PHP stdClass中有效属性的全局检查?
是否可以从PHP stdClass检查属性?我有一些模型是作为stdClass生成的。当使用它们时,我想检查我调用的属性是否存在于某种核心类中。我注意到,stdClass忽略了\uuuu getPHP stdClass中有效属性的全局检查?,php,stdclass,Php,Stdclass,是否可以从PHP stdClass检查属性?我有一些模型是作为stdClass生成的。当使用它们时,我想检查我调用的属性是否存在于某种核心类中。我注意到,stdClass忽略了\uuuu get 如何检查stdClass中的属性是否存在于对象中?用于遍历stdClass对象,然后使用函数查看当前属性是否存在于父类中。stdClass对象仅包含属性,而不包含代码。所以你不能从“内部”编码任何东西。所以你需要解决这个“短指令”。根据生成这些类的内容,可以通过“重载”数据(例如,使用装饰器)来实现这一
如何检查stdClass中的属性是否存在于对象中?用于遍历
stdClass
对象,然后使用函数查看当前属性是否存在于父类中。stdClass
对象仅包含属性,而不包含代码。所以你不能从“内部”编码任何东西。所以你需要解决这个“短指令”。根据生成这些类的内容,可以通过“重载”数据(例如,使用装饰器)来实现这一点,从而提供所需的功能:
class MyClass
{
private $subject;
public function __construct(object $stdClass)
{
$this->subject = $stdClass;
}
public function __get($name)
{
$exists = isset($this->subject->$name);
#...
}
}
$myModel = new MyClass($model);
把它扔到一个数组里
$x = (array) $myStdClassObject;
然后您可以使用所有通用数组函数,但全局存储在哪里?因为忽略了uu get()。@BenFransen:你能发布一个stdClass实例的转储,以及你所引用的核心类。stdClass是由mysql_fetch_object()生成的。在一个名为System_Core(每个类都从中扩展)的类中,有一些神奇的函数uuu get()和uu set()。我正在寻找装饰器模式。谢谢你的帮助,+1:)也许我不明白你所说的“\u get被stdClass忽略”是什么意思,但是
\u get()
没有在stdClass
中实现。我不知道这一点。感谢您澄清:)如果我理解您下面的评论:您还可以实现\uu isset()
目标实际上是将数组作为对象;)是的,这是一种模式。如果您在类中详细描述这些stdClass
对象是如何创建的,在某些情况下甚至可以简化。这似乎是一个解决方案。谢谢已接受+1:)