Portál AbcLinuxu, 12. května 2024 08:57


Dotaz: php OOP ukladanich promenych

1.7.2016 20:06 php5
php OOP ukladanich promenych
Přečteno: 492×
Odpovědět | Admin
Chtel bych pomoci php ukladat promene, nasel jsem kus kodu - classa "Store" (viz. nize), ale potreboval bych objasnit, jak funguji magicke metody __set a __get. Je mi jasne ze __set nastavi objekt cow a "moooooo". Ale k cemu je v te funkci __set? Dekuji.
class Store {

    protected $values = array();

    public function __get( $key ) {
        return $this->values[ $key ];
    }

    public function __set( $key, $value ) {
        $this->values[ $key ] = $value;
    }
}

$obj = new Store();
$obj->cow = 'mooooooo';
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.7.2016 21:08 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: php OOP ukladanich promenych
Odpovědět | | Sbalit | Link | Blokovat | Admin
__set() v příkladu nastaví atribut $this->values['cow'] na "mooooooo" místo defaultního nastavení $this->cow na "mooooooo".

Slovo "protected" je v daném příkladu chybně, patří tam "private".
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
1.7.2016 22:18 php5
Rozbalit Rozbalit vše Re: php OOP ukladanich promenych
viz. "protected" je to zkopirovane odsud: http://stackoverflow.com/questions/4713680/php-get-and-set-magic-methods
1.7.2016 22:29 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: php OOP ukladanich promenych
Příklad s "protected" je vytržen z nějakého neznámého kontextu a je v něm i další porušení konvencí, takže bych ho za bernou minci neuznal. O něco níže je lepší příklad, i když o něco delší.

Prostě "protected" se používá jen výjimečně ve speciálních případech. Jinak je lepší se mu vyhnout a systematicky používat "private".
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
1.7.2016 22:01 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: php OOP ukladanich promenych
Odpovědět | | Sbalit | Link | Blokovat | Admin
Metody __set a __get se v php automaticky zavolají, pokud se v kódu pokusíte přistoupil k instanční proměnné, která nebyla ve třídě definována. Uvedený kód to ilustruje: $cow ve třídě neexistuje a když do ní zapíšete hodnotu, zavolá se místo toho metoda __set (a ta může s tou hodnotou něco udělat, zapsat do databáze například), pokud z té neexistující proměnné naopak čtete, volá se metoda __set (která může naopak hodnotu odněkud načíst, třeba opět z databáze). Podobných metod je php ještě několik.
-- OldFrog
1.7.2016 22:15 php5
Rozbalit Rozbalit vše Re: php OOP ukladanich promenych
dekuji za vysvetleni.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.