Portál AbcLinuxu, 12. května 2025 06:40

Dotaz: Jak dostat v php z konstruktoru data jako string

11.4.2012 16:05 Soleto
Jak dostat v php z konstruktoru data jako string
Přečteno: 261×
Odpovědět | Admin
Ahoj, jak můžu dostat v php z konstruktoru data jako string, nebo jde udělat třeba tohle?
$foo = new foo();
a tu proměnnou $foo až nějak převést na string? Díky

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.4.2012 16:14 Kit
Rozbalit Rozbalit vše Re: Jak dostat v php z konstruktoru data jako string
Odpovědět | | Sbalit | Link | Blokovat | Admin
To se nedělá v konstruktoru, ale v magické metodě __toString(), která nemá parametry, ale vrací string. Pak už jen stačí použít objekt tam, kde je očekáván string.
$foo = new Foo();
echo $foo;
nebo zkráceně
echo new Foo();
11.4.2012 16:27 Soleto
Rozbalit Rozbalit vše Re: Jak dostat v php z konstruktoru data jako string
A volat jiný class z nějaké class se může z konstruktoru? Nebo se má volat uz přímo z té magické metody? Je to teď dobře? Díky
class map
{
   var $foo;
   function __construct($foo)
   {
       $this->foo = $foo;
   }

   public function __toString()
   {
      return new $this->foo();
   }
}

new map('add_class');
11.4.2012 16:42 Kit
Rozbalit Rozbalit vše Re: Jak dostat v php z konstruktoru data jako string
Nechápu, co tě k takovým konstrukcím vede. Najdi si nějakou učebnici PHP a vyzkoušej pár příkladů na objekty. Bez základů objektového programování a dědičnosti jen střílíš naslepo.

Možná ten tvůj příklad bude i fungovat, ale správně to není, protože málokdo takovou konstrukci po tobě pochopí a i ty sám budeš po roce přemýšlet nad tím, co to vlastně má dělat.

Metoda __toString() je prezentační a její return prostě musí vracet string.
11.4.2012 17:29 Soleto
Rozbalit Rozbalit vše Re: Jak dostat v php z konstruktoru data jako string
Co mě vede? No snažím se to co nejjednodušeji napsat, myslim, že to je naprosto jasne i ted i za rok čeho chci docílit, jestli máš lepší řešení jistě ho uvítám... ;) Konstruktor nemůže vracet data pomocí return, což string vyžaduje, toString zase neumi předat parametry tak jak to jinak řešit, fakt nevím..
class map{
          var $pdo;
          public function __construct($pdo){
                    $this->pdo = $pdo;
          }

          public function __toString(){
                    ...
                    # Tady zjistim jaký class zavolám
                    ...

                    # Zavolám zvolenou class a vratim vysledek
                    return new index($this->pdo);
          }
}

class index{

          var $pdo;
          public function __construct($pdo){
                    $this->pdo = $pdo;
          }

          public function __toString(){
                    ...
                    # Tady zjistim jaký class zavolám
                    ...

                    # Zavolám zvolenou class a vratim vysledek
                    return new news($this->pdo);
          }
}

class news{
          var $pdo;
          public function __construct($pdo){
                    $this->pdo = $pdo;
          }

          public function __toString(){

                    # Už řádnou class nevolam, vrátím jen vysledek
                    return $pdo->query(.....); // Ahoj
          }
}

$map = new map($pdo);
echo $map; // Ahoj
11.4.2012 20:06 l4m4
Rozbalit Rozbalit vše Re: Jak dostat v php z konstruktoru data jako string
Potřebuješ zkonstruovat objekt, nebo máš objekt a chceš jeho textovou representaci?

První udělá konstruktor.

Druhé udělá nějaká metoda. Pro standardní textovou representaci __toString(). Je-li zapotřebí representovat ten objekt různě a cheš to řídit, tak prostě nějaká jiná metoda.

Chceš-li obojí v logickém pořadí, tak nejdřív uděláš to první, pak to druhé -- předpokládám, že objekt přitom má smysl sám o sobě.

Pokud chceš jen vyrobit nějaký string a objekt k ničemu není, tak do toho objekty a konstruktory nepleť.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.