Portál AbcLinuxu, 10. května 2025 02:47

Dotaz: PHP - Jak zavolat z getteru objek nastavená v costructu ?

8.11.2014 23:38 Falco
PHP - Jak zavolat z getteru objek nastavená v costructu ?
Přečteno: 224×
Odpovědět | Admin
Ahoj. Mám problém s tímto kódem. Neporadí někdo? Díky
class Parser{

   function __construct($obj){
      $this->$obj = $obj;
   }

   function __get(){
      # Nevím jak tady zavolat ten objekt $obj. Zkoušel jsem toto
      $this->obj->metoda;
      # ale nefunguje to
   }
}

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.11.2014 01:43 Sten
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chyby tam jsou dvě:
  1. $this->$obj = $obj; má být $this->obj = $obj;. $this->$obj totiž pro jméno proměnné použije výsledek volání $obj->__toString()
  2. Volání metody musí obsahovat závorky: $this->obj->metoda()
9.11.2014 15:29 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Ještě chybí deklarace: public $obj = NULL; (nebo bez inicializace).
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
9.11.2014 16:03 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Ono to vyjde nastejno. Asi jsi to chtěl udělat privat, ne?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
9.11.2014 16:04 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Jo - nevím co mě napadlo tam dát public - to mi ujelo.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
9.11.2014 16:26 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Gettery a settery se v PHP používají trochu jinak:
<?php

class Parser {
    private $obj = array();

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

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

$registr = new Parser();
$registr->smysl = 42;
$registr->kopa = 60;
echo "Kopa je $registr->kopa kusů, smyslem života je $registr->smysl";
Jenže pokud potřebuješ něco takhle primitivního, vystačíš si i se standardní třídou stdClass, která to už umí.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
FrostyX avatar 9.11.2014 22:24 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Smysl tohodle __get() a __set() v PHP jsem nikdy nepochopil. Přijde mi, že gettery a settery jako takové, mají dvě výhody.
  1. Pokud je potřeba, nedovolit uložení nesprávné hodnoty do objektu
  2. Pokud je potřeba, provést nějakou akci ještě před tím, než se hodnota uloží/vrátí
V drtivé většině případů to člověk nepotřebuje, ale ve chvíli kdy to potřebuje, ví jak to udělat. Ovšem tenhle způsob co je v PHP mi přijde úplně k ničemu, protože mi nedovolí udělat ten getter/setter pro konkrétní proměnnou, kterou potřebuji. Takže stejně nakonec musím udělat
public function getFoo() { ... }
public function setFoo($foo) { ... }
FrostyX.cz | 1984 was not supposed to be an instruction manual.
9.11.2014 22:38 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Gettery a settery obecně moc velký význam nemají. Těmito magickými funkcemi se dají elegantně postihnou i funkce, které jsi popsal. Stačí použít vhodný switch.

Metodu $obj->getFoo() nemůžeš použít ve stringu (šabloně), ale $obj->foo tam použít můžeš - normálně se expanduje. Ládovat všechno do pomocných proměnných před šablonou je poněkud nepraktické.

Jak jsem psal, ten mnou popsaný způsob pouze popisuje volání - jako v manuálu. V této podobě to už nepoužívám. Nepoužívám gettery/settery a nepoužívám ani public proměnné.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
FrostyX avatar 9.11.2014 23:17 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: PHP - Jak zavolat z getteru objek nastavená v costructu ?
Stačí použít vhodný switch
Určitě souhlas, ale asi by se mi to moc nelíbilo.
Metodu $obj->getFoo() nemůžeš použít ve stringu (šabloně)
Díky, tohle mě nenapadlo. Já většinou používám Laravel a tam by s tím problém nebyl.
FrostyX.cz | 1984 was not supposed to be an instruction manual.

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.