Php 返回没有继承属性的当前类对象
我有一个自动加载器,在加载小框架时初始化许多对象。对象被保存为静态变量,但现在我遇到了一个问题。我有一个在autoloader中实例化的文件,但稍后会像异常处理程序一样使用,在调用时处理特殊情况。其目的是该类中的方法返回$this,即类对象,但这样做时,返回的值不是被调用对象的实例,而是继承到调用它的类中。此外,被调用的异常处理程序不仅是自身的一个实例,而且是整个autoloader中实例化的所有内容,在加载所有内容时继承$this。令人困惑,但我建立了一个小示例:Php 返回没有继承属性的当前类对象,php,class,Php,Class,我有一个自动加载器,在加载小框架时初始化许多对象。对象被保存为静态变量,但现在我遇到了一个问题。我有一个在autoloader中实例化的文件,但稍后会像异常处理程序一样使用,在调用时处理特殊情况。其目的是该类中的方法返回$this,即类对象,但这样做时,返回的值不是被调用对象的实例,而是继承到调用它的类中。此外,被调用的异常处理程序不仅是自身的一个实例,而且是整个autoloader中实例化的所有内容,在加载所有内容时继承$this。令人困惑,但我建立了一个小示例: class a {
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"
}
我需要它在调用特殊方法时只返回被调用的类。我知道这可以用工厂模式修复,但在这种情况下希望避免
谢谢。尝试使用反射来获取没有继承属性的类对象属性:
<?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());
您可以创建一个stdClass并在那里分配找到的属性。。完成此操作以满足您的需要。为什么不将
$a_tmp
设置为私有?这是一个小例子,将$a_tmp设置为私有意味着我应该将整个框架中的所有内容都设置为私有,因为只有一个类。也许我错了,但工厂模式更具吸引力。:)我不确定我是否理解这个问题,如果你理解:new b()这将返回一个从a继承一些方法和属性的b实例。但是,当您调用GetOnlyThis类时,您希望b的实例没有经过初始化的方法和属性?这是一个很好的示例,但实际上看不出这是如何工作的,类b需要将自身作为对象返回,自身的实例。在我的应用程序中,$b中有一些方法,一旦调用并存储在变量中,我就需要访问这些方法。您的返回一个字符串,我可以再次验证。在我的应用程序中,我需要这个来验证“$tmp instanceof b”。我以为你需要它只是为了调试。。听起来似乎不可能将类从它的父类中分离出来,并且仍然是它自己。我想你是对的,单件工厂模式是我解决这个问题的方法。谢谢你的帮助!
object(stdClass)#2 (1) { ["b_tmp"]=> string(3) "tmp" }