【发布时间】:2012-06-11 04:53:40
【问题描述】:
我一直在寻找一种调用类的构造函数的方法,它类似于“parent::_construct”,但用于类本身(类似于“self::_construct”,不过这不起作用)。为什么要这样做?考虑以下(这不起作用,顺便说一句)...
class A {
var $name;
function __construct($name) {
$this->name = $name;
}
function getClone($name) {
$newObj = self::__construct($name);
return $newObj;
}
}
class B extends A {
}
在实际实现中,还有其他属性可以区分 B 类和 A 类,但两者都应该具有“getClone”方法。如果在 A 类的对象上调用它应该产生另一个 A 类的对象,如果在 B 类上调用它应该产生另一个 B 类的对象。
当然,我可以通过重写 B 类中的“getClone”并将类名硬编码到方法中来做到这一点(即,$newObj = new B($name)),但最好只对方法进行一次编码,告诉它实例化自己类的对象,无论该类是什么。
PHP 会让我这样做吗?
【问题讨论】:
-
我不应该将我的方法称为“getClone”或以任何方式暗示克隆。新对象可能与调用其方法的对象非常不同,并且不应复制其任何祖先的内部数据。所以我认为内置克隆不适合我。
-
同样,我不认为“init()”有帮助,因为我仍然需要从方法中生成并返回一个新的 obj,唯一的方法是最终使用构造函数。很想以其他方式展示。我想我很惊讶没有等同于“父母”的意思是“自我”。
-
有一个等价的,它可以是
self或static,这取决于您的需要。
标签: php class methods constructor extends