| 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: 14 let
|
|||
0