【发布时间】:2012-01-18 20:17:40
【问题描述】:
在这个例子中,我有一个抽象类和两个常规类。抽象类不应该单独使用,所以它的构造函数是受保护的。一些函数是在抽象类中定义的。
其中一个函数是“克隆”函数,它应该返回当前对象的一个新实例。 此函数复制当前对象。
这是我的问题:
当试图设置 $copy->baz ([2] in clone()) 时,它可以工作,因为我在定义这个私有属性的类中。然而,这对我来说没有意义(至少在这个例子中),因为 $copy 是另一个对象(同一个类) - 是否可以强制 PHP 使用魔法设置器(“设置私有属性”)时设置另一个对象(不是类)的私有属性?
abstract class ac
{
private $baz = "fakedefault";
function __set($name, $value)
{
die("Setting private property!");
}
function clone()
{
$copy = clone $this; //make copy
//Test:
$this->baz = "newval"; //[1] Works as expected
$copy->baz = "newval"; //[2] Does not die!
return $copy; //return copy
}
}
class c1 extends ac
{
function foo()
{
print $this->baz;
}
}
class c2 extends ac
{
function foo()
{
print $this->baz;
}
}
function dostuff()
{
$o = new c1();
$o->baz = "thiswontwork"; //Private -> doesn't work
}
【问题讨论】:
-
请查看我对答案的最新编辑 - 我认为这可能会有所帮助。谢谢
标签: php class properties visibility