0

我有一个自动加载器,在加载迷你框架时初始化很多对象。对象被保存为静态变量,但现在我遇到了问题。我有一个在自动加载器中实例化的文件,但稍后使用类似于异常处理程序,在调用时处理特殊情况。目的是这个类中的方法返回 $this,类对象,但是这样做时,返回的值不是被调用对象的实例,而是被继承到调用它的类中。此外,被调用的 exception_handler 不仅是它自己的一个实例,而且是整个自动加载器中的所有实例,在加载所有内容时继承 $this。令人困惑,但我建立了一个小例子:

class a {
    public $a_tmp = 'tmp';
}

class b extends a {
    public $b_tmp = 'tmp';

    public function getOnlyThisClass() {
        return $this;
    }
}

$b = new b();
$b->getOnlyThisClass();

这将返回:

object(b)#1 (2) {
  ["b_tmp"]=>
  string(3) "tmp"
  ["a_tmp"]=>
  string(3) "tmp"
}

当调用特殊方法时,我需要它只返回被调用的类。我知道这可以通过工厂模式解决,但在这种情况下想避免它。

谢谢。

4

1 回答 1

0

尝试使用反射来获取没有继承属性的类对象属性:

<?php

class a {
    public $a_tmp = 'tmp';
}

class b extends a {
    public $b_tmp = 'tmp';

    public function getOnlyThisClass() {
        $cl       = new stdClass();
        $refclass = new ReflectionClass($this);
        foreach ($refclass->getProperties() as $property)
        {
            $name = $property->name;
            if ($property->class == $refclass->name) {
                $cc = $property->name;
                $cl->$cc = $this->$name;
            }
        }
        return $cl;
    }
}
$b = new b();
var_dump($b->getOnlyThisClass());

输出:

object(stdClass)#2 (1) { ["b_tmp"]=> string(3) "tmp" } 

您可以创建一个 stdClass 并在那里分配找到的属性。完成此操作以满足您的需求。

于 2013-01-09T09:28:31.963 回答