ci4

Форк
0
/
PropertiesTrait.php 
80 строк · 1.9 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
/**
6
 * This file is part of CodeIgniter 4 framework.
7
 *
8
 * (c) CodeIgniter Foundation <admin@codeigniter.com>
9
 *
10
 * For the full copyright and license information, please view
11
 * the LICENSE file that was distributed with this source code.
12
 */
13

14
namespace CodeIgniter\Traits;
15

16
use ReflectionClass;
17
use ReflectionProperty;
18

19
/**
20
 * Trait PropertiesTrait
21
 *
22
 * Provides utilities for reading and writing
23
 * class properties, primarily for limiting access
24
 * to public properties.
25
 */
26
trait PropertiesTrait
27
{
28
    /**
29
     * Attempts to set the values of public class properties.
30
     *
31
     * @return $this
32
     */
33
    final public function fill(array $params): self
34
    {
35
        foreach ($params as $key => $value) {
36
            if (property_exists($this, $key)) {
37
                $this->{$key} = $value;
38
            }
39
        }
40

41
        return $this;
42
    }
43

44
    /**
45
     * Get the public properties of the class and return as an array.
46
     */
47
    final public function getPublicProperties(): array
48
    {
49
        $worker = new class () {
50
            public function getProperties(object $obj): array
51
            {
52
                return get_object_vars($obj);
53
            }
54
        };
55

56
        return $worker->getProperties($this);
57
    }
58

59
    /**
60
     * Get the protected and private properties of the class and return as an array.
61
     */
62
    final public function getNonPublicProperties(): array
63
    {
64
        $exclude    = ['view'];
65
        $properties = [];
66

67
        $reflection = new ReflectionClass($this);
68

69
        foreach ($reflection->getProperties(ReflectionProperty::IS_PRIVATE | ReflectionProperty::IS_PROTECTED) as $property) {
70
            if ($property->isStatic() || in_array($property->getName(), $exclude, true)) {
71
                continue;
72
            }
73

74
            $property->setAccessible(true);
75
            $properties[] = $property;
76
        }
77

78
        return $properties;
79
    }
80
}
81

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.