Autor Zpráva
XYZ
Profil *
Dobrý den, chci se zeptat na takovou možná blbost. když mám ve třídě metodu __toString, tak pokaždé když napíšu echo $objekt, vypíše se název té třídy. No ale co když chci aby se třeba vrátilo pole?
Například:
class Array
{
   private $data;
   public function __construct()
   {
      $this->data = func_get_args();
   }
}

$Pole = new Array(1, 2, 3, 4);
echo $Pole; //Vrátí array
echo count($Pole) //Vrátí 4
Šlo by to nějak udělat?
Jan Tvrdík
Profil
XYZ:
No ale co když chci aby se třeba vrátilo pole?
To je trochu složitější a obecně to vyřešit nejde (není žádná __toArray() metoda). Nicméně lze to vyřešit částečně. Chceš-li, aby fungovalo volání count, tak stačí implementovat rozhraní Countable.

class Array implements Countable
{
   private $data;
   public function __construct()
   {
      $this->data = func_get_args();
   }
   
   public function count()
   {
       return count($this->data);
   }
}

Pokud bys chtěl, aby se objekt dal procházet např. pomocí foreach, tak musíš implementovat rozhraní Iterator nebo IteratorAggregate. Pokud chceš, aby se dalo přistupovat k prvkům přes hranaté závorky (např. $pole[7]), tak musíš implementovat rozhraní ArrayAccess.
XYZ
Profil *
No já to myslel obecně, ne jenom na to count, chtěl jsem aby objekt vracel přímo svůj datový typ, který reprezentuje...No tak ok, budu to řešit přes metody. Díky za radu

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: