В этом примере у меня есть абстрактный класс и два обычных класса.Абстрактный класс не должен использоваться один, поэтому его конструктор защищен.Некоторые функции определены в абстрактном классе.
Одной из этих функций является функция «клон», которая должна возвращать новый экземпляр текущего объекта.Эта функция делает копию текущего объекта.
Вот мой вопрос:
При попытке установить $ copy-> baz ([2] в 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
}