Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP - Dotaz ohledně třídy

Ahoj, procházím různé návody a potřeboval bych poradit ohledně tříd.

class Data {

  private $data=array();

  public function __construct()
  {
    $this->data->foo='bar';
  }

  public function __set($k,$v){
    $this->data[$k]=$v;
  }

  public function __get($k){
    return $this->data[$k];
  }
}

$data = new Data();

echo $data->foo; //tohle by mělo vypsat bar

V tom konstruktu je nastavená proměnná 'foo' na hodnotu 'bar', ale když ji zavolám, nic se nevypíše. Poradí někdo ? Děkuji

Předmět Autor Datum
Keby si mal zapnuté vypisovanie varovaní, tak by si videl, že to hlási: Warning: Attempt to assign…
los 02.06.2016 23:52
los
Děkuji, a když použiju $this->foo = 'bar'; bude to uloženo kde, taky v té proměnné $data ? PS: p…
Kolemjdoucí 03.06.2016 10:43
Kolemjdoucí
Áno, bude to uložené tiež v $this->data. Ten riadok hovorí o tom, že sa má priradiť hodnota 'bar' do…
los 03.06.2016 11:03
los
Díky moc za objasnění, pokud jsem to dobře pochopil, tak když dám $this->foo = "a"; $this->bar = "b… poslední
Kolemjdoucí 03.06.2016 11:23
Kolemjdoucí
Len doplnim losa, ze to neni "dotaz ohledne trid". Je to dotaz ohledne nemam jasne zaklady.
MM.. 03.06.2016 08:28
MM..
Jde videt ze jsi zkopiroval kod ktery ani nevis co dela, protoze hned v obou metodach ktere tam mas,…
Vorech 03.06.2016 09:40
Vorech

Áno, bude to uložené tiež v $this->data. Ten riadok hovorí o tom, že sa má priradiť hodnota 'bar' do vlastnosti $this->foo. Keďže $this žiadnu takú vlastnosť nemá, použije sa špeciálna metóda __set, ktorá nastaví tú hodnotu do $this->data['foo'];

Keďže je tam private, tak sa práve k $data mimo triedu nedostaneš. Dostaneš sa len nepriamo cez ten getter a setter k hodnotám, ktoré sú tam uložené. (Keby si sa vedel zvonku dostať k $data, tak by si vedel napr. povedať, koľko prvkov $data obsahuje - a to v tomto prípade nevieš.)

Díky moc za objasnění, pokud jsem to dobře pochopil, tak když dám

$this->foo = "a";
$this->bar = "b";
$this->add = "c";

a odstraním setter a getter, proměnná $data bude prázdná a místo toho se vytvoří tři další proměnné. Ano ?

Zpět do poradny Odpovědět na původní otázku Nahoru