Máte s tím někdo zkušenosti?
Zkusil jsem jednoduchý příklad:
class b {
var $bx;
var $cnt = 0;
function b() {
$this->bx='toto je bx';
}
function __set($name, $val) {
$this->$name = $value;
$this->cnt++;
}
}
overload('b');
$x = new b();
$x->bx = 1;
print_r($x);
$x->bx = 10;
print_r($x);
očekával jsem, že se bude cnt zvětšovat, ale podle všeho se __set() vůbec nevolá.
Něco podobného jsem zkoušel i v PHP5, tam mě ale php vyčetlo používání fce overload(), kterou vůbec nezná.
Jak to má být správně?
takže pro ty, kdo nevědí:
v manuálu jsem přehlídl větu, že __set() a __get() se volají pro neexistující proměnné třídy. Takže o overloadu se moc hovořit nedá. Jediné použití, které mě napadá, je jako prostředek pro varování při přiřazování nedefinovaných proměnných.
Ještě jsem neprověřil __call(), tam to třeba funguje.
<HTML>To je sice zajímavý, ale stále asi nikdo nechápe, k čemu vlastně potřebuješ tuhle věc pro šílený ajnštajny. Mohl bys nám všem vysvětlit, k čemu to konkrétně potřebuješ použít, resp. co to má vlastně dělat?</HTML>
no, pokud jste někdy dělali i s jinými jazyky jak s PHP, tak třeba v C# je něco jako property, kde definujete, jak se k da né proměné přistupuje, a že je třeba jenom pro čtení a td.
Kdybych chtěl třeba udělat třídu datum, kde by se interně ukládal datum třeba jako unixtime (vteřiny od 1.1.1970), pak tam byl typ výstupu a podle toho se vracel obsah roměnné.
Mohl by se tak kontrolovat správný tvar vstupujícího času a td...
I když asi právě toto se dá tím __set() a __get(), s tím, že zvenku nastavuju něco, co jsem nenadefinoval a vnitřně nastavuju něco, co nevidím. Ale je to takové škrábání se levou rukou za pravým uchem.