2017-06-11 3 views
-2

Bonjour, j'ai cette erreur avec cet exemple de code.

Exception: L'utilisation de $ quand pas dans le contexte de l'objet

<?php 

Class A { 
public function test($str) 
{ 
    return trim($str); 
} 
} 


Class B { 

protected $trim; 
public function __construct(A $trim){ 
    $this->trim = $trim; 
} 

public static function trim_str($str) 
{ 
    return $this->trim->test($str); 
} 
} 

//implementation 
B::trim_str(" TRIM ME "); 

?> 

quelqu'un peut me éclairer. merci

+3

'this' $ fait référence à une instance d'un objet donné. Mais statique n'est pas vraiment lié à une instance, donc vous ne pouvez pas utiliser '$ this' dans une méthode statique. – FirstOne

+0

comment refactoriser le code? instancier la classe A à l'intérieur de la méthode statique? Est-ce une bonne pratique? –

+0

Enlever statique et essayer –

Répondre

-2

Vous ne pouvez pas utiliser $this dans le contexte de la méthode statique dans une classe car il n'appartient pas à une instance, c'est pourquoi l'erreur se produit.

Comme par manuel PHP:

Comme les méthodes statiques sont appelables sans une instance de la classe, la présente est $ pseudo variable non disponible dans la méthode déclarée comme statique.

S'il vous plaît se référer à la documentation du manuel PHP pour une brève description (http://php.net/manual/en/language.oop5.static.php)

0
Class B 
{ 

    protected $trim; 

    public function __construct(A $trim) 
    { 
     $this->trim = $trim; 
    } 

    public static function trim_str($str) 
    { 
     return $this->trim->test($str); //You Cannot access $this here 
    } 
} 

Solution possible

Change $ inclinaison variable à l'électricité statique

Class B 
{ 
    protected static $trim; 

    public function __construct(A $trim) 
    { 
     static::$trim = $trim; 
    } 

    public static function trim_str($str) 
    { 
     return static::$trim->test($str); 
    } 
} 
+0

Je vais essayer ça. Merci pour l'entrée .. –