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.
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
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.