Autor Zpráva
lookAssSWE
Profil *
Zdravim,
vim že v php existuje toto:
<?php
class Magic
{
    public $x;
    public $y;
    public function x($x)
    {
        $this->x = $x;
        return $this;
    }
    public function y($y)
    {
        $this->y = $y;
        return $this;
    }
    public function __toString()
    {
        $r = $this->x.PHP_EOL;
        $r .= $this->y;
        return $r;
    }
}
a
$test = new Magic(true);
print($test->x("some")->y("thing));
Ale ptam se, jde jeste nejak vyvolat $neco->neco->neco->neco("neco");, nebo $this->neco->neco("neco"); ?
Koukal jsem se treba na PHP SDK Facebooku a tam to pouzivali dost a nikde jsem metodu __toString neviděl.
Diky za pripadne vysvetleni
Alphard
Profil
lookAssSWE:
$neco->neco->neco->neco("neco")
Lepší by bylo pojmenovat to jinak:
$a->b->c->d("neco")
Přistupujeme k vlastnosti b instance $a (instance vzniká $a = new A). Ve vlastnosti b instance $a je přiřazená nějaká jiná instance, třeba $b, a tady přistupujeme k její vlastnosti c. V té je opět nějaká instance $c a voláme její metodu d().
Když se to rozepíše:
$b = $a->b;
$c = $b->c;
$vysledek = $c->d("neco");

Tohle všechno je obecné objektové modelování, nic magického v tom není.

Do skupiny Magic Methods patří až __toString, která se volá až na výsledné instanci, pokud je vyžadována konverze na řetězec. S předchozím to vůbec nesouvisí (tj. obojí lze používat nezávisle na sobě).
xROAL
Profil
Metóda __toString() hovorí, ako sa trieda/objekt zachová, pokiaľ je použitá ako string.
<?php
class EchoMe{
  public function __toString(){
    return "You did it!";
  }
}

$obj = new EchoMe();
echo $obj; // vypíše "You did it!"

$neco->neco1->neco2->...->necoX("neco") nie je nič špeciálne.
Objekt $neco má atribút neco1, v ňom je objekt, ten má atribút neco2, v ňom je objekt ... atď., na poslednom objekte v tejto šialenej "reťazi" sa potom volá metóda necoX().
BuggsyUpper
Profil *
Aha parada, dekuju :)

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:

0