Php 按字符串调用属性

Php 按字符串调用属性,php,Php,在特殊情况下我需要帮助 我想通过循环中的字符串访问对象的属性。。。那个属性实际上是一个对象,当然它有自己的属性 更具体地说,$object->$object->property 某些代码不起作用: $objectAtribute = 'property->propertyOfObject'; echo $object->$objectAtribute; 怎么能做到呢 顺便说一句,我得到一个错误:未定义的属性 Tnx 'property->propertyOfObject'如果没有难

在特殊情况下我需要帮助

我想通过循环中的字符串访问对象的属性。。。那个属性实际上是一个对象,当然它有自己的属性

更具体地说,
$object->$object->property

某些代码不起作用

$objectAtribute = 'property->propertyOfObject';
echo $object->$objectAtribute;
怎么能做到呢

顺便说一句,我得到一个错误:未定义的属性

Tnx

'property->propertyOfObject'
如果没有难看的
eval
技巧或手动“解析”就无法工作,甚至不要让自己走上想这样做的道路。那么你的代码太“动态”了,对猴子的攻击太多了


'property->propertyOfObject'
如果没有难看的
eval
技巧或手动“解析”就无法工作,甚至不要让自己走上想这样做的道路。那么你的代码太“动态”了,对猴子的攻击也太多了。

问题是你试图访问一个单个属性,这个属性实际上被称为
属性->propertyOfObject
。试着打破它:

$className = 'className';
$object = new $className();

$propertyName = 'propertyName';
echo $object->$propertyName;
或者,如果不想创建新变量:

echo $object->{'propertyName'};
如果对象的类实现了,那么您只需使用

echo $object['propertyName'];

问题是,您正在尝试访问一个名为
property->propertyOfObject
单个属性。试着打破它:

$className = 'className';
$object = new $className();

$propertyName = 'propertyName';
echo $object->$propertyName;
或者,如果不想创建新变量:

echo $object->{'propertyName'};
如果对象的类实现了,那么您只需使用

echo $object['propertyName'];

为什么要这样做?@Eric当解析具有许多可选属性的JSON配置文件时,这种方法实际上是非常实用的,其中“model”描述了有哪些属性。@Niels在这种情况下,我只需使用类似于
foo.bar.baz
分解
并使用简单循环递归到JSON对象中。需要两三行代码,而且更干净。为什么要这样做?@Eric该方法在解析具有许多可选属性的JSON配置文件时实际上非常实用,用一个“模型”来描述有哪些属性。@Niels在这种情况下,我只需使用类似于
foo.bar.baz
explode
的符号来表示对象的路径,然后通过一个简单的循环递归到JSON对象中。需要两三行代码,而且更干净。