Autor Zpráva
ybznek
Profil
Ahoj, chtěl bych se poradit, jak byste řešili daný problém, aby to bylo co nejsprávnější

mám třídu, která má jednu metodu, například
register()

problém je v tom, že chci volat
trida::register(username,password);

ale také
trida::register(<nějaký nerozparsovaný string>)



v delphi jsem byl zvyklý napsat obě funkce a ona se podle parametrů "zvolila sama"
v php by to šlo nejspíš šlo udělat pomocí __call, ale přijde mi to jako s kladivem na komára
popř jak správně pojmenovat tento styl metod, aby to bylo intuitivní a srozumitelné pro někoho cizího, kdo by se do toho podíval.

Jakým způsobem byste to řešili vy?

Omlouvám se, pokud je tento dotaz příliš hloupý.

Děkuji za odpověď
joe
Profil
V PHP není přetěžování metod jako v jiných jazycích.

Udělal bych to tak, že bych nechal metodu

trida::register($username, $password, array $data = array());


A to parsování asi prováděl ještě před voláním té metody register. Pokud bych chtěl přidat ještě nějaká další data, přidal bych je jako volitelný parametr.
Alphard
Profil
func_get_args() zjistí počet parametrů dodaných funkci. Pak by šlo pomocí jejich počtu a typu (is_numeric() apod.) podmínkovat tělo, ale v PHP bych se složitému rozdělení spíš vyhnul.
Lamicz
Profil
Asi bych to řešil úplně jinak - User::register a String::register
Majkl578
Profil
Já bych asi volil podle toho, co má být <nějaký nerozparsovaný string>. Pokud nějaká stringová reprezentace jména a hesla, co třeba metody User::register($username, $password) a User::registerFromString($string) (nebo statickou User::parseRegisterString($string) vracející username a password)?
ybznek
Profil
joe:
to mi přijde nezvyklé, třeba pro někoho cizího by to mohl být problém na první pohled pochopit
Lamicz:
moc nechápu, co přesně by obsahoval "String"?
Majkl578:
asi použiju tvé řešení

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