Autor | Zpráva | ||
---|---|---|---|
Psta Profil * |
#1 · Zasláno: 10. 4. 2010, 09:45:29
Zdravim, chcem sa opytat ludi OOP znalych, ci nahodou nieco take existuje:
<?php class A{ function aEcho(){ B::bEcho(); } } class B extends A{ function bEcho(){ echo 'class B'; } } $a = new A(); ?> chcem zavolat cez $a funkciu bEcho(). Aby som ju zavolal je potrebne vytvorit novy objekt B vo funkcii aEcho(), alebo sa to da aj nejako bez toho volania? |
||
Psta Profil * |
#2 · Zasláno: 10. 4. 2010, 09:49:14
ach, moja chyba.. zabudol som tam dat $a->aEcho();
|
||
fuckin Profil |
#3 · Zasláno: 10. 4. 2010, 11:30:20
Tak prostě jednoduše napiš B::bEcho(); jelikož je to statická metoda tak to půjde bez problému. A nebo pokud to chceš přes třídu A, pak v A vytvoř metodu, která bude volat bEcho přesně tak jak to máš.
Tvůj příklad vypíše "class B". |
||
Majkl578 Profil |
#4 · Zasláno: 10. 4. 2010, 16:46:09 · Upravil/a: Majkl578
Dopustil jsi se chyby návrhu. Statické metody se deklarují pomocí static. Třída A by měla být abstraktní a instance by se měla vytvářet ze třídy B.
Proč to vlastně neřešíš překrýtím metody rodiče nebo abstrakcí? abstract class Foo { public function xyz() { return __CLASS__; } } class Bar extends Foo { public function xyz() { return __CLASS__; } } $cls = new Bar(); echo $cls->xyz(); //Bar Psta: „chcem zavolat cez $a funkciu bEcho()“ Lze použít metodu __invoke(), která umožní volat instanci objektu jako funkci. class Foo { public function xyz() { return __CLASS__; } public function __invoke() { return $this->xyz(); } } $cls = new Foo(); echo $cls(); //Foo |
||
Časová prodleva: 14 let
|
0