Autor | Zpráva | ||
---|---|---|---|
Darker Profil |
#1 · Zasláno: 26. 5. 2012, 13:06:52
V C++ lze v rámci třídy nadefinovat jednu funkci vícekrát pro různé sestavy parametrů. Jde to i v PHP? Jde mi teď o přehlednost a jdenoduchost kódu, pokud je tedy řešení složité, krkolomné nebo nepřehledné, nemá pro mě smysl.
|
||
Nox Profil |
#2 · Zasláno: 26. 5. 2012, 13:09:37
Nejde ... PHP na rozdíl od C++ tak neřeší typy proměnných ... takže prostě jedna funkce a uvnitř případně detekovat, co že jsi to dostal za parametry
|
||
Radek9 Profil |
#3 · Zasláno: 26. 5. 2012, 13:18:03
Darker:
Přetěžování v PHP není, jsou tam ale nepovinné parametry: function something($a, $b=""){ //code } something(1); something(1, "something else"); |
||
Darker Profil |
#4 · Zasláno: 26. 5. 2012, 13:25:11
Možnost nepovinných parametrů jsem využil. Jak jsem říkal, šlo mi o přehlednost kódu:
Mám funkci (konstruktor) která očekává buď šířku a výšku pro vytvoření nového něčeho, nebo pole $data obsahující informace z již uloženého něčeho. Teď to vypadá takhle: /** ... pripadne nacitani ulozenych dat ... */ //Pokud funkce dostala souradnice else if(is_int($data}&&is_int($h)){ generuj($data, $h); } |
||
ShiraNai7 Profil |
#5 · Zasláno: 26. 5. 2012, 13:42:36
Darker:
Možná si vytvořit "factory" metody. Protected konstruktor zamezí přímému použití new Trida. Můžeš jej nechat public a dát mu nějakou výchozí funkcionalitu, nebo jej dát protected/private a poté ho používat na interní přípravu objektu (např. předáním argumentů z factory metod). To už záleží na tobě. <?php class Trida { protected function __construct() { // konstruktor } static public function getInstanceForDimensions($w, $h) { // vytvorit instanci pomoci $w a $h (POUZE PRIKLAD) $inst = new static; $inst->w = $w; $inst->h = $h; return $inst; } static public function getInstanceForData(array $data) { // vytvorit instanci pomoci $data $inst = new static; // neco s daty.. return $inst; } } A poté: $inst = Trida::getInstanceForDimensions(200, 100); // instance pro rozmery $inst = Trida::getInstanceForData(array( /* nějaká data */ )); // instance z dat |
||
Časová prodleva: 12 let
|
0