PHP stdClass中有效属性的全局检查?

PHP stdClass中有效属性的全局检查?,php,stdclass,Php,Stdclass,是否可以从PHP stdClass检查属性?我有一些模型是作为stdClass生成的。当使用它们时,我想检查我调用的属性是否存在于某种核心类中。我注意到,stdClass忽略了\uuuu get 如何检查stdClass中的属性是否存在于对象中?用于遍历stdClass对象,然后使用函数查看当前属性是否存在于父类中。stdClass对象仅包含属性,而不包含代码。所以你不能从“内部”编码任何东西。所以你需要解决这个“短指令”。根据生成这些类的内容,可以通过“重载”数据(例如,使用装饰器)来实现这一

是否可以从PHP stdClass检查属性?我有一些模型是作为stdClass生成的。当使用它们时,我想检查我调用的属性是否存在于某种核心类中。我注意到,stdClass忽略了\uuuu get


如何检查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:)