Autor Zpráva
Psta
Profil *
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 *
ach, moja chyba.. zabudol som tam dat $a->aEcho();
fuckin
Profil
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
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

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