首页 > 解决方案 > php静态函数类保存以前的函数调用数据

问题描述

    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

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

标签: phpclassoopinstancestatic-functions

解决方案


如果您的预期输出是:

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标志表明整个类定义中只有一个变量实例。如果您想创建该User::$User属性的新实例,那么将其作为静态变量附加到类定义中是没有意义的。


推荐阅读