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);