Bu nesneye yeni bir özellik oluşturmak için yönetir. Ancak, birisi setAttrib
iki farklı şekilde davranır neden destekleyen bağlantıları ile açıklayabilir? Neden bir neden olmaz ... wait for it ... yığın taşması!?
class Test
{
public function setAttrib( $key, $value ) {
echo "setAttrib\n";
// first time: calls $this->__set($key, $value)
// second time: just sets a public property (but, when exactly was it created?)
$this->$key = $value;
}
public function __set( $key, $value ) {
echo "__set\n";
$this->setAttrib($key, $value);
}
}
$test = new Test();
$test->setAttrib('hey', 'It works');
var_dump($test);
üretir ...
setAttrib
__set
setAttrib
object(Test)#1 (1) {
["hey"]=>
string(8) "It works"
}
Düzenleme: Ben bir alternatif aramıyorum. I'm looking for the reason why this works.