| Autor | Zpráva | ||
|---|---|---|---|
| hugo123 Profil * |
#1 · Zasláno: 5. 10. 2013, 00:05:52
Ahojte,
mam takyto problem, jedna moja trieda vyuziva tu istu premennu, a ja si ju chcem najskor vytvorit a potom sa aplikuje na vsetky metody. Ale zase chcem mat moznost zadat metode parameter. Toto nefunguje: class Farby
{
public $mojaPremenna;
public function mojaFunkcia($farba = $this->mojaPremenna)
{
// ked bude deklarovana globalna premenna, tak sa pouzije ta, inak bude musiet byt zvoleny parameter pre tuto metodu
}
} Viete mi prosim ako to dosiahnut? |
||
| Alphard Profil |
#2 · Zasláno: 5. 10. 2013, 00:31:09
Takto to nejde, defaultní hodnota musí být konstantní.
The default value must be a constant expression, not (for example) a variable, a class member or a function call. (zdroj) Můžete dát jako defaultní hodnotu třeba NULL a pak si to ošetřit podmínkou.
|
||
| hugo123 Profil * |
#3 · Zasláno: 5. 10. 2013, 03:04:43
Vdaka za odpoved, a to sa fakt neda vyriesit nejako krajsie?
Ja mam takychto metod tam aj 6 s rovnakym parametrom, to teraz mam pridat ku kazdej metode podmienku? Ten kod bude dost neprehladny.... |
||
| Tori Profil |
hugo123:
Něco takového? class Farby
{
protected $predvolby = array(
'pozadie' => '#fff',
'pismo' => '#000',
'ramcek' => '#f00', // toto chci změnit
);
public function __construct($predvolby = array())
{
if (!empty($predvolby)) {
foreach ($this->predvolby as $kluc => $hodnota) {
if (isset($predvolby[$kluc]) && $predvolby[$kluc] !== '') {
$this->predvolby[$kluc] = $predvolby[$kluc];
}
}
}
}
public function mojaFunkcia()
{
// pouziju např. $this->predvolby['pismo']
}
}
$mojeFarby = array(
'ramcek' => '#000',
);
$farby = new Farby($mojeFarby); |
||
| hugo123 Profil * |
#5 · Zasláno: 5. 10. 2013, 12:32:47
Tori:
Vdaka za pekny kod, ano, nieco take to... ale s tou podmienkou to nie je elegantne, ale inak sa to asi neda teda spravit. |
||
| Micruss Profil |
#6 · Zasláno: 5. 10. 2013, 13:55:19
hugo123:
a jak by sis představoval elegantní kód ? :-) |
||
| Jan Tvrdík Profil |
#7 · Zasláno: 5. 10. 2013, 14:08:52
Tori:
Ten konstruktor bych tak nekomplikoval: public function __construct(array $predvolby = array())
{
$this->predvolby = $predvolby + $this->predvolby;
} |
||
| hugo123 Profil * |
#8 · Zasláno: 5. 10. 2013, 14:16:26
Micruss:
elegantny je taky, aky som napisal ja, kebyze funguje;-))) Jan Tvrdík: Inak da sa to prerobit tak, ze premenna bude len string? |
||
| Alphard Profil |
#9 · Zasláno: 5. 10. 2013, 14:32:09
Třeba
function xyz($param = null)
{
$param = $param ?: $this->param;
}Možností je mnoho. |
||
| hugo123 Profil * |
#10 · Zasláno: 5. 10. 2013, 20:15:56
Alphard:
wowo, to je aky terarny operator? ;-)))) toto je krasne Alphard. |
||
|
Časová prodleva: 13 let
|
|||
0