php - 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
因为当我们在类中调用静态函数时,它完全是新调用这个类,并且它总是创建一个新对象,因为调用这个函数时用户一直是空的。但是为什么这段代码会保存以前的类数据?
解决方案
如果您的预期输出是:
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
属性的新实例,那么将其作为静态变量附加到类定义中是没有意义的。
推荐阅读
- functional-programming - 在 SML 中获取子树的问题
- c++ - 在这个构造函数中 initializer_list 允许什么样的初始化?
- weblogic - 找不到 weblogic.jms.common.ResourceAllocationException 的 jar
- php - PHP中降低矩阵顺序的有效方法
- javascript - 如何隐藏和显示链接栏下的内容?
- javascript - 获取火基函数的平均值,找到所需节点的平均值
- python - 100s后IIS wfastcgi django请求超时,如何让它更长?
- spring-boot - GRPC 在 Cloud Foundry 中如何工作?GoRouter 不支持 HTTP2
- bash - 如何使用特定列号(不是字段值)输出这些数据?
- javascript - 如何从用户那里获取目录的名称,然后使用 node.js 创建它?