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

Dotaz: Jak zavolat metodu v class (PHP)

21.10.2013 02:35 XcX
Jak zavolat metodu v class (PHP)
Přečteno: 331×
Odpovědět | Admin
Chtěl bych se zeptat, mám class Start a uvnitř této class mám metodu mess(). Z konstruktoru class Start vytvořím instanci pro další class s názvem Akce. Jak můžu již ve třídě Akce zavolat metodu mess() v class Start? Poradíte prosím? Děkuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.10.2013 08:12 Kit
Rozbalit Rozbalit vše Re: Jak zavolat metodu v class (PHP)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co to má být za třídu "Start"? Neznám v reálu žádný objekt třídy start. Asi by to skutečně chtělo začít s OOP od základů.

Nauč se v objektech pracovat pouze s atributy objektu a objekty předanými v parametrech metod. Neporušuj Démeteřin zákon.

Můžeš objektu třídy Akce předat jako parametr $this, ale dobře si rozmysli, než si tímto způsobem zašmodrcháš program.
21.10.2013 16:05 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak zavolat metodu v class (PHP)
Odpovědět | | Sbalit | Link | Blokovat | Admin

Jedna z možných odpovědí by mohla být:

Start::mess();
Odpovědí si jsem jistý, ale neznám znění otázky.

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
23.10.2013 10:28 Prema van Smuuf
Rozbalit Rozbalit vše Re: Jak zavolat metodu v class (PHP)
Odpovědět | | Sbalit | Link | Blokovat | Admin

Asi by sis měl urovnat rozdíl mezi třídou a její instancí. Je totiž rozdíl v tom, jestli mluvíš o metodách statických (což jsou metody tříd), nebo metodách těch samotných objektů (tedy metody už instancí daných tříd). Podle toho, co píšeš, bych odvodil, žes mohl myslet něco takovéhoto:

class Start{

  public function __construct(){
    // Tuto instanci třídy Start uložíme třídě Akce do statické proměnné
    // To znamená, že touto jedinou instancí mohou disponovat všechny instance třídy Akce.
    Akce::setStartObject($this);       
  }

  public function Hello(){
    echo "Hello ";
  }

}

class Akce{

  private static $start_object = null;
  
  public static function setStartObject(Start $object){
    self::$start_object = $object;
  }
  
  public function Whatever($whatever){
    echo $whatever;
  }

}

// Tato jediná vytvořená instance třídy Start bude nyní dostupná
// ve všech budoucích instancích třídy Akce
$start_object = new Start();

// Takže:
$akce_jedna = new Akce();
$akce_jedna->Whatever("World <br>");

$akce_dva = new Akce();
$akce_dva->Whatever("Universe <br>");
..a výstup by byl:
Hello World
Hello Universe
Ale je dost možné, že jsi to myslel úplně jinak a pak je výše uvedené hromada kydů. Takže se zkus příště vyjádřit komplexněji :)

Josef Kufner avatar 23.10.2013 11:26 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak zavolat metodu v class (PHP)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Abys ji mohl zavolat, potřebuješ získat ten objekt. A protože ven z třídy je vidět blbě a dovnitř ještě hůř (což je jejich účel), musíš si instanci Start předat explicitně, třeba jako parametr konstruktoru při vyrábění instance Akce.
Hello world ! Segmentation fault (core dumped)

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.