2017-05-25 5 views
1

Voici mon exemple de code classe utilisateur mais ne fonctionne pas quand j'ai ajouté la méthode statique avec les méthodes publiques:Est-il possible d'enchaîner statique avec la méthode non statique en PHP?

<?php 

namespace App\Classic; 

class User 
{ 
    public $username; 
    public static $upassword; 
    public $age; 
    public $message; 

    public function username($username) 
    { 
     $this->username = $username; 
     echo $this->username."<br>"; 
     return $this; 
    } 

    public static function password($upassword) 
    { 
     self::$upassword = $upassword; 
     echo self::$upassword."<br>"; 
    } 

    public function age($age) 
    { 
     $this->age = $age; 
     echo $this->age."<br>"; 
     return $this; 
    } 

    public function message($message) 
    { 
     $this->message = $message; 
     echo $this->message."<br>"; 
     return $this; 
    } 
} 

et ceci est l'effet secondaire de la méthode enchaînant:

$user = new User(); 
$user::password('secret') 
    ->username('admin') 
    ->age(40) 
    ->message('lorem ipsum'); 
+1

Ou, vous pouvez simplement cesser d'utiliser des méthodes statiques et variables. Comme ils font de votre code une nature procédurale et causent un couplage étroit avec des noms de classe spécifiques. –

+0

La propriété statique et la méthode n'ont aucune raison d'exister. Une propriété statique est commune à toutes les instances de la classe. ** Voulez-vous utiliser le même mot de passe pour tous les utilisateurs? ** – axiac

+0

Oh okay. Merci –

Répondre

0

Je ne sais pas Quelle est la logique derrière cela, mais cette solution sera toujours utile.

Try this code snippet here

<?php 

namespace App\Classic; 

ini_set('display_errors', 1); 

class User 
{ 

    public $username; 
    public static $upassword; 
    public static $currentObject=null;//added this variable which hold current class object 
    public $age; 
    public $message; 

    public function __construct()//added a constructor which set's current class object in a static variable 
    { 
     self::$currentObject= $this; 
    } 
    public function username($username) 
    { 
     $this->username = $username; 
     echo $this->username . "<br>"; 
     return $this;//added this statment which will return current class object 
    } 

    public static function password($upassword) 
    { 
     self::$upassword = $upassword; 
     echo self::$upassword . "<br>"; 
     return self::$currentObject; 
    } 

    public function age($age) 
    { 
     $this->age = $age; 
     echo $this->age . "<br>"; 
     return $this; 
    } 

    public function message($message) 
    { 
     $this->message = $message; 
     echo $this->message . "<br>"; 
     return $this; 
    } 

} 

$user = new User(); 
$user::password('secret') 
     ->username('admin') 
     ->age(40) 
     ->message('lorem ipsum'); 
+0

J'expérimente des méthodes de chaînage avec une approche différente. Je vous remercie. –

+0

Ouais. Je vous remercie. :) –

+0

@KarlAngeloTanjuan bienvenue ... :) –