php静态函数class保存之前的函数调用数据

php static function class save previous function call data

    class User
{
    private static $User;
    public static function get()
    {
        if (empty(self::$User)) {
            echo "Create New Object<br/>";
            return self::$User = new User();
        }
        echo "Already Created<br/>";
        return self::$User;
    }
}

User::get();
User::get();
User::get();
User::get();

这是我的代码。当我 运行 这段代码然后输出给定这段代码是,

Create New Object
Already Created
Already Created
Already Created

但是为什么呢?我的预期输出是,

Create New Object
Create New Object
Create New Object
Create New Object

因为当我们在 class 中调用一个静态函数时,它会重新调用这个 class 并且一直创建一个新对象,因为调用此函数时用户始终为空。但是为什么这段代码保存了以前的 class 数据?

如果您的预期输出是:

Create New Object
Create New Object
Create New Object
Create New Object

那么你想要的是:

class User
{
    public function __construct() {
       echo "Create New Object<br/>";
    }
    public static function get()
    {
       return new self();
    }
}

$user1 = User::get();
$user2 = User::get();
$user3 = User::get();
$user4 = User::get();

// or

$user1 = new User();
$user2 = new User();
$user3 = new User();
$user4 = new User();

正如人们在评论中指出的那样,static 标志表示整个 class 定义中只有一个变量实例。如果您想创建 User::$User 属性 的新实例,那么将其作为静态变量附加到 class 定义是没有意义的。