web-dev-qa-db-fra.com

Comment appeler une méthode non statique à partir d'une méthode statique de la même classe?

Je travaille sur PHP code.

Voici l'exemple de code pour expliquer mon problème:

class Foo {

    public function fun1() {
             echo 'non-static';   
    }
    public static function fun2() {
        echo "static" ;
        //self::fun1();
        //Foo::fun1(); 
    }
}

Comment puis-je appeler la méthode non statique à partir de la méthode statique?

Remarque: Les deux fonctions sont utilisées sur l'ensemble du site, ce qui n'est pas connu. Je ne peux rien changer à leur nature statique/non statique.

27
Rahul

Vous devez créer un nouvel objet dans la méthode statique pour accéder aux méthodes non statiques dans cette classe:

class Foo {

    public function fun1()
    {
        return 'non-static';
    }

    public static function fun2()
    {
        return (new self)->fun1();
    }
}

echo Foo::fun2();

Le résultat serait non-static

Later edit: Comme vu l'intérêt de passer des variables au constructeur, je posterai une version mise à jour de la classe:

class Foo {

    private $foo;
    private $bar;

    public function __construct($foo, $bar)
    {
        $this->foo = $foo;
        $this->bar = $bar;
    }

    public function fun1()
    {
        return $this->foo . ' - ' . $this->bar;
    }

    public static function fun2($foo, $bar)
    {
        return (new self($foo, $bar))->fun1();
    }
}

echo Foo::fun2('foo', 'bar');

Le résultat serait foo - bar

63
Matei Mihai

La principale différence serait que vous pouvez appeler des méthodes statiques pour une classe sans avoir à instancier un objet de cette classe. Donc, dans votre méthode statique, essayez

Foo $objInst = new Foo();
$objInst->fun1();

Mais je ne vois pas comment cela aurait un sens dans aucun contexte.

3
optimoose