简体   繁体   English

是否可以在PHP中使用非静态方法将静态链接起来?

[英]Is it possible to chain static together with non-static method in PHP?

Here is my sample code Class User but not working when I added the static method with the public methods: 这是我的示例代码Class User,但是当我使用public方法添加静态方法时,它不起作用:

<?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;
    }
}

and this is the side effect of chaining method: 这是链接方法的副作用:

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

I dont know what is the logic behind doing this, but still this solution will be helpful. 我不知道这样做背后的逻辑是什么,但这个解决方案仍然会有所帮助。

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');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM