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 定义是没有意义的。
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 定义是没有意义的。