Autor Zpráva
Aloiss
Profil *
Ahoj, můžu poprosit jaký je rozdíl mezi (tedy pokuď nějaký vůbec je)

$row['akce']
a
$row->akce
učenec
Profil *
pomocí
$row['akce']

přistupuješ k indexu pole, kdežto

$row->akce

$row představuje instanci nějaké třídy, která má vlastnost(proměnnou) akce.

Aspoň myslím...
Jcas
Profil
$row['akce']=>'hodnota';Rozložím ti to:
$row je proměnná se jménem row a v tomto případě je hodnotou této proměnné pole.
['akce'] je klíč jednoho prvku pole.
'hodnota' je string a ten je hodnotou prvku pole $row['akce']

Pro naše ochotné a skvělé tvůrce učebnice php:
Kapitola pole je nějaká divná.
Moderátor jenikkozak: Autor později smazal text svého příspěvku. Vracím jej zpět, abych zachoval celistvost diskuse.
Alphard
Profil
Rozdíl tam je. V prvním případě se přistupuje k prvku pole, v druhém případě se přistupuje k vlastnosti třídy (konkrétní instance). Někdy může fungovat obojí, pokud objekt implementují rozhraní ArrayAccess.
Joker
Profil
Jcas:
Pro naše ochotné a skvělé tvůrce učebnice php:
Kapitola pole je nějaká divná.
Protože není ještě hotová.
Informace o stavu, až budou, budou zde.
Aloiss
Profil *
aha díky, takže takhle jak to mám je vlastně blbost a správně by to tak nemělo být
<?php 
$sql = dibi::fetchAll('SELECT * FROM logy');
 ...
 ...
 ...
foreach($sql as $row) { 
echo '<span class="label label-default">'.$row->akce.'</span>';
}
?>    
Alphard
Profil
Aloiss [#7]:
Stručně řečeno, je to v pořádku. Nyní se nemusíte zajímat o to, co je v pozadí.

Detailnější informace pro zájemce.
Metoda dibi::fetchAll() vrací kolekci objektů DibiRow, které implementují rozhraní ArrayAccess (jak jsem psal výše), takže fungují oba přístupy.
suvel
Profil
Často se stkávám se scripty, které používají instance. Já jsem zvyklý používat spíš pole. Možná to bude někoho (třeba hlavně ty, kteří s programováním začínají a budou se muset rozhodnout, kdy a kde co použijí) zajímat - já to nevím: Je některá z těch metod výhodnější? A v jakém případě? Nebo je to z pohledu výsledku prakticky ekvivalent? Nakonec ten script funguje stejně, ať použiju instance nebo pole.
juriad
Profil
suvel:
Objekt si můžeš představit jako takové nabušené pole:
- má svůj zvláštní typ, který zajištuje, že vždy budou všechny prvky existovat
- obsahuje funkce, které jej spravují
- má vlastní syntaxi pro používání; operátory -> a ::

Asi nemá smysl rozepisovat něco, co už bylo popsáno mnohokrát. Zkus si něco přečíst o objektovém programování a jeho výhodách.
Docela rozumně vypadá (ale možná příliš technicky) programujte.com/clanek/2009113001-oop-v-php
juriad
Profil
suvel:
Kdybys řešil něco s geometrií a potřeboval reprezentovat bod v rovině, asi by sis vytvoril pole o dvou prvcích
buď array(1, 2)
nebo array('x' => 1, 'y' => 2)
a s tím by sis hrál.
Časem by sis přidal funkce sečti, odečti, vzdálenost, které by vypadaly asi (pro ten druhý případ):
function vytvor($x, $y) {
  return array('x' => $x, 'y' => $y);
}

function secti($b1, $b2) {
  return vytvor($b1['x'] + $b2['x'], $b1['y'] + $b2['y']);
}

function otoc($b) {
  return vytvor(-$b['x'], -$b['y']);
}

function odecti($b1, $b2) {
  return secti($b1, otoc($b2));
}

function absolutni_hodnota($b) {
  return sqrt($b['x'] * $b['x'] + $b['y'] * $b['y']);
}

function vzdalenost($b1, $b2) {
  return absolutni_hodnota(odecti($b1, $b2));
}

A toto už je zapsané skoro objektově; přepsáno by to bylo:

class Bod {
  public $x;
  public $y;
  
  function __construct($x, $y) {
    $this->x = $x;
    $this->y = $y;
  }

  function secti($b2) {
    return new Bod($this->x + $b2->x, $this->x + $b2->y);
  }

  function otoc() {
    return new Bod(-$this->x, -$this->y);
  }

  function odecti($b2) {
    return $this->secti($b2->otoc());
  }

  function absolutni_hodnota() {
    return sqrt($this->x * $this->x + $this->y * $this->y);
  }

  function vzdalenost($b) {
    return $this->odecti($b)->absolutni_hodnota();
  }
  
  
  # díky tomuto můžeš přímo echovat bod (a bude vždy vypsán v hranatých závorkách). Na kolika místech bys to jinak psal?
  function __toString() {
    return '[' . $this->x . '; ' . $this->y . ']';
  }
}

Teď je to však vše na jednom místě (vynuceně!); složky x a y jsou skutečně proměnné a nikoli prvky pole indexované řetězcem.
Můžeš to snadno rozšiřovat. Chytřejší vývojová prostředí ti budou nabízet, co vše můžeš s bodem provádět. Nejprojdou ti už konstrukce, které fungují nad libovolným polem (menší pravděpodobnost neodhalitelných chyb). Když dostaneš od někoho bod, můžeš se spolehnout, že všechno, co o něm slíbil také bude fungovat.
suvel
Profil
OK, děkuju za názorné vysvětlení :-)

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: