我有一个自动加载器,在加载迷你框架时初始化很多对象。对象保存为静态变量,但现在我遇到了问题。我有一个在自动加载器中实例化的文件,但后来用作异常处理程序,在调用时处理特殊情况。目的是这个类中的方法返回$ 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"
}
我需要它在调用特殊方法时才返回被调用的类。我知道这可以用工厂模式修复,但在这种情况下我想避免它。
感谢。
答案 0 :(得分:0)
尝试使用Reflection来获取没有继承属性的类对象属性:
<?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并在那里分配找到的属性。完成此操作以满足您的需求。