Skip to content

Commit 2791ffc

Browse files
committed
feat: properties traits
1 parent 7bf0779 commit 2791ffc

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

PropertiesTrait.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
/**
4+
* This file is part of Blitz PHP framework.
5+
*
6+
* (c) 2022 Dimitri Sitchet Tomkeu <devcode.dst@gmail.com>
7+
*
8+
* For the full copyright and license information, please view
9+
* the LICENSE file that was distributed with this source code.
10+
*/
11+
12+
namespace BlitzPHP\Traits;
13+
14+
use ReflectionClass;
15+
use ReflectionProperty;
16+
17+
/**
18+
* Fourni des utilitaires pour lire et ecrire des proprietés de classes.
19+
* Limite l'accès principalement à des proprietés publiques.
20+
*/
21+
trait PropertiesTrait
22+
{
23+
/**
24+
* Tente de modifier les valeurs des proprités publiques de la classe.
25+
*/
26+
final public function fill(array $params): self
27+
{
28+
foreach ($params as $key => $value) {
29+
if (property_exists($this, $key)) {
30+
$this->{$key} = $value;
31+
}
32+
}
33+
34+
return $this;
35+
}
36+
37+
/**
38+
* Recupere les proprietés publiques de la classe et les retourne dans un tableau.
39+
*/
40+
final public function getPublicProperties(): array
41+
{
42+
$worker = new class () {
43+
public function getProperties(object $obj): array
44+
{
45+
return get_object_vars($obj);
46+
}
47+
};
48+
49+
return $worker->getProperties($this);
50+
}
51+
52+
/**
53+
* Recupere les proprietés protégées et privées de la classe et les retourne dans un tableau.
54+
*/
55+
final public function getNonPublicProperties(array $exclude = []): array
56+
{
57+
$properties = [];
58+
59+
$reflection = new ReflectionClass($this);
60+
61+
foreach ($reflection->getProperties(ReflectionProperty::IS_PRIVATE | ReflectionProperty::IS_PROTECTED) as $property) {
62+
if ($property->isStatic() || in_array($property->getName(), $exclude, true)) {
63+
continue;
64+
}
65+
66+
$property->setAccessible(true);
67+
$properties[] = $property;
68+
}
69+
70+
return $properties;
71+
}
72+
}

0 commit comments

Comments
 (0)