Autor Zpráva
hugo123
Profil *
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
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 *
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 *
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
hugo123:
a jak by sis představoval elegantní kód ? :-)
Jan Tvrdík
Profil
Tori:
Ten konstruktor bych tak nekomplikoval:
public function __construct(array $predvolby = array())
{
    $this->predvolby = $predvolby + $this->predvolby;
}
hugo123
Profil *
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
Třeba
function xyz($param = null)
{
  $param = $param ?: $this->param;
}

Možností je mnoho.
hugo123
Profil *
Alphard:
wowo, to je aky terarny operator? ;-)))) toto je krasne Alphard.

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: