Autor | Zpráva | ||
---|---|---|---|
czmarci Profil * |
#1 · Zasláno: 20. 9. 2011, 07:19:09
Zdravím,
učím se PHP a narazil jsem na problém při statickém volání nestatické metody. Pokusím se to trochu shrnout. Mám: class trida{ function funkce1() { ... } function funkce2() { ... } function funkce3( $promena1, $promena2, $promena3) { $vysledek = trida::funkce1(trida::fukce2($promena1, $promena2, $promena3)) } } class trida2{ trida::funkce3("$a","$b","$c") } Samotný kód funguje, ale vyhodí mi PHP Unknown: Non-static method trida::funkce1() should not be called statically, assuming $this from incompatible context in ..... on line 165 Googluju celou noc ale neúspěšně. S toho co jsme našel je mi jasné, že staticky volám nestatickou funkci ale nikde jsem nenašel řešení, jak kód upravit. Ještě dodám, že u trida::funkce3("$a","$b","$c") jsou do $a, $b, $c vloženy $this->data['atribut'] Můžete mě prosím někdo nakopnout správným směrem, nejde mi tak ani o opravu toho co dělám špatně jako spíš o jednoduché vysvětlení a případně i řešení. Nechci kód jen opravit ale zároveň se i z chyby poučit. |
||
Bertram Profil |
#2 · Zasláno: 20. 9. 2011, 07:54:54
Ahoj,
používej modifikátory přístupu public, protected, private, je to opravdu ku prospěchu,např. zapouzdření. public function getName{ return $this->name; } Uvnitř třídy se k vlastním nestatickým metodám (funkcím) přistupuje takto: $this->metodaTridy(); ke statiským: self::statickaMetodaTridy(); A pokud potřebuješ někde v kódu zavolat nestatickou metou nějaké třídy, tak si vytvoříš z této třídy objekt (instanci třídy) a na něm pomocí operátoru -> zavoláš onu metodu. class User { protected $firstName; protected $lastName; public function __construct($first, $last) { $this->firstName = $first; $this->lastName = $last; } public function getName() { return $this->firstName . $this->lastName; } } // konec třídy User $objUser = new User ('Franta', 'Vopršálek'); echo 'Vaše celé jméno je: ' . $objUser->getName(); |
||
meris Profil |
#3 · Zasláno: 20. 9. 2011, 08:30:43
Ahoj,
definuj statické funkce jako public static function, volání je pak možně jako self:: , nebo jako NazevTridy:: které je malinko univerzálnější, toto volání lze použít kdekoli. |
||
Michal666 Profil |
#4 · Zasláno: 20. 9. 2011, 13:47:11
Více pak v PHP manuálu http://www.php.net/manual/en/language.oop5.static.php.
|
||
czmarci Profil * |
#5 · Zasláno: 20. 9. 2011, 18:15:27
Děkuji všem za odpovědi, všichni jste mi hodně pomohli a já konečně začínám chápat jak by to mělo fungovat.
|
||
Časová prodleva: 13 let
|
0