Autor Zpráva
4ever
Profil
Ahoj,
chtěl bych se zeptat na názor jak vylepšit toto:

public function setRulesByID($basic){
    $this->caller="setRulesByID";
    $this->on = false;
    $this->setRulesByName(func_get_args());
}


Metoda setRulesByName() dělá skoro to samé co setRulesByID(), ale je tam pár vyjímek. Tak abych nevytvářel dvě stejné funkce, tak volám tu samou metodu přes jinou metodu.

Trochu potíž nastává při předávání argumentů do metody setRulesByName().

Metoda setRulesByID() může mít až 4 argumenty, ale takto se předává jen jeden.

Nemáte někdo nápad, jak to udělat co nejjednodušeji, abych předal argumenty z metody setRulesByName() ve stejném pořadí a ve stejném počtu?
Jan Tvrdík
Profil
To, o co se pokoušíš, je s největší pravděpodobností chyba návrhu. Místo nastavování takových blbostí jako $this->caller je mnohem lepší vytvořit třetí soukromou metodu, která bude obsahovat činnosti společné setRulesById a setRulesByName. Možná bude potřeba přidat víc funkcí, aby to bylo čisté, ale rozhodně to není vhodné řešit tak, jak se pokoušíš. Pro zajímavost (ne abys to použil) doplním, že to, co jsi hledal, je call_user_func_array(array($this, 'setRulesByName'), func_get_args()).
4ever
Profil
Myslíte vložit obě funkce do jedné funkce a touto obsluhovat vše?
Proto jsem to ale rozdělil na dvě funkce, i když hlavní činnost obsluhuje jen jedna, aby to bylo pro uživatele přehledné a nemusel si pamatovat, že funkce
setRules()
má mít pět argumentů a první určuje jakým způsobem má běžet.

Ještě jednou se dívám na to svoje momentální řešení a zjišťuji že $this->caller tam vůbec nemusí být stačí mi ten $this->on.

Co je špatného na call_user_func_array?
Alphard
Profil
4ever:
Tak funkce nebo metody, nechci slovíčkařit, ale když se řekne funkce, představím si neOOP, když metoda, tak OOP, což je zásadní rozdíl.

Vy s OOP začínáte? Hádám i dle Jak nadeklarovat proměnnou ve třídě?, že se snažíte PHP trochu znásilnit, aby fungovalo dle vašich představ :-)

Co je špatného na call_user_func_array?
Při použití na vhodném místě nic, jen tady máme podezřejní, že chybný návrh aplikace nevyřeší, jen oddálí další problémy.
4ever
Profil
Alphard:
S OOP Začínám. Rozdílu mezi metodou a funkcí jsem si vědom, ale občas mi to ještě ujede postaru. Mě se právě moje řešení zdá elegantní právě tím, že k obsluze stačí de fakto jen jedna metoda, ta druhá tam je jen pro zpohodlnění a snadnější zapamatování. Co se týče vlastností té třídy, už mi odpadly čtyři přebytečné věci a deset z jedenácti jsem převedl na private.

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:

0