Autor Zpráva
spartan13
Profil
Dobrý den,
potřebuju v PHP udělat "fluent interface" akorát, když mám předka, který vrací sebe (return $this) tak mi to samozřejmě vrátí toho předka, což nahrazuju v konstruktoru, že předkovi předám objekt, který to má vracet, jen mám potom problém, že mi IDE (Netbeans) nedává nápovědu, jelikož nepochopí, že má nabízet všechny metody potomka, nevíte jestli s tím lze něco udělat?
Alphard
Profil
Nevím, jestli vám dobře rozumím, nepomůže NetBeans nápověda phpdoc?
/**
 * Popis metody.
 * @return Projekt\Trida
 */
spartan13
Profil
Alphard:
díky za odpověď, ono je právě problém, že od jedné metody se mohou volat různé třídy (předek má více různých potomků) a příjde mi "divné" u každé třídy (potomka) přepisovat metodu vlastně jen kvůli dokumentaci..

ideálně by to vypadalo takto (což bohužel nelze) :
/**
 * Popis metody.
 * @return $this->return_class;
 */
Majkl578
Profil
Nejsem si jist, zda to Netbeans podporují (jelikož je nepoužívám), ale nepomohlo by @return $this?
spartan13
Profil
Majkl578:
Díky, podporují, to používám ale jde mi o to, když metodu nemám psanou v potomkovi, je to jediné co mi momentálně zbývá všechny metody přepsat i v potomkovi (jen kvůli návratu)
Alphard
Profil
A to je nějaké supertřída která vrací nesouvisející věci? Nešlo by řešit děděním abstraktní třídy, implementace rozhraní apod.?
spartan13
Profil
Alphard:
zřejmě máte pravdu, pokusím se přepsat návrh tříd, děkuji.

Přesto ale nevím, jak danou strukturu navrhnout, jednoduše mám pár funkcí, které by měli být i ve zděděných funkcích..
pro zjednodušení:

abstract class ATrida {
    private $a, $b;
    
    public function setA($a){
        $this->a = $a;
        return $this;
    }
    
    public function setB($b){
        $this->b = $b;
        return $this;
    }
    
}

class Trida extends ATrida {
    private $c;

    public function setC($c){
        $this->c = $c;
        return $this;
    }
    
}
při tomto stylu návrhu však nemůžu pomocí fluent interface volat všechny metody, jelikož pokud zavolám setA() tak již nemohu volat setC().

Jak jsem již zmiňoval napadají mě pouze dvě varianty (v konstruktoru abstraktní třídy předat objekt, který bych pak vracel -> IDE nepochopí ale funkční..) nebo bych musel všechny metody v potomkovi přepsat s přidáním return $this. (což mi příjde zbytečné a pokud bych něco změnil (jednu funkci, musím přepisovat ve všech třídách))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: