2017-05-25 66 views
1

这里是我的示例代码级用户,但是当我加入的公共方法静态方法不工作:在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; 
    } 
} 

,这是链接方法的副作用:

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

或者,你可以只是停止使用静态方法和变量。因为它们使你的代码在程序本质上变得紧密,并且导致与特定类名的紧密耦合。 –

+0

静态属性和方法没有任何理由存在。静态属性对于该类的所有实例都是通用的。 **是否要为所有用户使用相同的密码?** – axiac

+0

噢好吧。谢谢 –

回答

0

我不知道做这件事背后的逻辑是什么,但这个解决方案仍然会有帮助。

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

我正在用不同的方法试验链接方法。谢谢。 –

+0

是的。谢谢。 :) –

+0

@KarlAngeloTanjuan欢迎... :) –

相关问题