返回没有继承属性的当前类对象

时间:2013-01-09 09:21:25

标签: php class

我有一个自动加载器,在加载迷你框架时初始化很多对象。对象保存为静态变量,但现在我遇到了问题。我有一个在自动加载器中实例化的文件,但后来用作异常处理程序,在调用时处理特殊情况。目的是这个类中的方法返回$ 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"
}

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

感谢。

1 个答案:

答案 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并在那里分配找到的属性。完成此操作以满足您的需求。