overload a __set() __get()

4 příspěvky

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. 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ě?
  2. 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.
  3. <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>
  4. 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.

← Zpět na všechna témata