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