Délután, munkából hazafelé menet elgondolkoztam azon, hogy mi lehet akkor, ha a gyermekosztályban létezik egy ugyanolyan nevű private adattag. Csodák-csodájára, így működik a __sleep() -l. Csodálatos.
class A
{
private $a = 'a';
public function printvar()
{
echo 'A::a = '.$this->a."\n";
}
}
class B extends A
{
private $a = 'b';
public function printvar()
{
parent::printvar();
echo 'B::a = '.$this->a."\n";
}
public function __sleep()
{
return array('a');
}
}
$a = new A;
$b = new B;
$oa = unserialize(serialize($a));
$ob = unserialize(serialize($b));
$oa->printvar();
echo "-\n";
$ob->printvar();
Kimenet:
A::a = a
-
A::a = a
B::a = b
Viszont vannak még itt további érdekességek, mint pl. a get_class_vars() nevű csodálatos függvény. Működésére jellemző, hogy azonos nevű leszármazott esetén az ősosztályban lévő értéket hagyja meg.
Mondjuk szerintem a Serializable::Unserialize() is egy érdekes elgondolást követ (konstruktor helyett konstruktorként viselkedik), de ez legalább használható. Csak fapados, lehet megírni kézzel mindent.
- saxus blogja
- A hozzászóláshoz be kell jelentkezni
- 837 megtekintés
Hozzászólások
subscribe
- A hozzászóláshoz be kell jelentkezni
Nezz bele a php forrasaba, ahol megvalositjak ezeket a fuggvenyeket ha szeretnel nagyon elborzadni (egy nagy ganyolas az egesz) :D
- A hozzászóláshoz be kell jelentkezni