PHP Как добавить свойство классу?

Свойства класса - это названия столбцов в базе(т.е. класс типа MODEL)

Столбец в базе MYSQL и Elasticsearch называется 18+

я пробовал

class CategoryElastic extends ElasticModel
{
 public static function putStaticProperty(string $name,$value)
 {
   static::${$name} = $value;
 }
}
CategoryElastic::putStaticProperty('18+', null);

Но это лишь вызывает ошибку та как свойство изначально не определено

Идет обращение к свойствам класса через ReflectionClass::getProperties() и вытаскивается их имя через ::getName()


Ответы (1 шт):

Автор решения: Ein

Насколько мне известно, вы не можете добавить статическое поле по время выполнения.

Если же не приипиальна статичность, то можно воспользоваться get_object_vars

class Foo {
    public function addProp($name, $val){
        
        $this->$name = $val;
        //    ^     ^
        // Скобки не нужны
    }
}


$foo = new Foo();

$foo->addProp('18+', 'bar');

$props = get_object_vars($foo);

var_dump($props);

Или ReflectionObject, как предложил Максим Степанов

class Foo {
    public function addProp($name, $val){
        
        $this->$name = $val;
        
    }
}

$foo = new Foo();

$foo->addProp('18+', 'bar');

$reflect = new ReflectionObject ($foo);
$props = $reflect->getProperties();

var_dump($props);

→ Ссылка