【发布时间】:2020-12-30 14:43:35
【问题描述】:
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
因为当我们在类中调用静态函数时,它完全是新调用这个类,并且始终创建一个新对象,因为调用此函数时用户始终为空。但是为什么这段代码会保存以前的类数据呢?
【问题讨论】:
-
在使用它之前,您需要了解静态的含义。此输出是预期的
-
输出超出预期 - 跨调用保存状态是静态类属性的整点。如果你不想这样,那么静态属性不是正确的答案。
标签: php class oop instance static-functions