Установить атрибут объекта с именем строкового атрибута в PHP - PullRequest
2 голосов
/ 11 января 2012

Я хочу иметь возможность установить атрибут объекта, но имя атрибута будет сгенерировано. Как я могу сделать это в PHP, без использования eval()

например:.

$obj->name = "Prakash Raman"; // Works
$obj->$attr_name = <some value>; // Would want something like this to work

Я бы хотел изменить $attr_name.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 11 января 2012
$obj->{$attr_name} = "New value";

Это будет именно то, что нужно.

Однако, предостережение, я бы рекомендовал использовать его в сочетании с property_exists() для проверки существования объекта.

1 голос
/ 11 января 2012

Я понимаю, что на вопрос есть верный ответ, но просто добавлю несколько способов, которыми вы можете сделать это:

<?php
$myClass = new ReflectionClass($someClass);
if($myClass->hasProperty($someProperty)){
   $myClass->getProperty($someProperty)->setValue($someClass,__NEW__VALUE__);
}
?>
1 голос
/ 11 января 2012

Как ни странно, ваш код после публикации будет работать.(++ для property_exists, хотя.)

http://codepad.org/qW0Tj4MR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...