有人可以解释我这两个班级之间的区别吗?为什么要使用静态类而不是新对象?
class User
{
protected $users = array();
/**
* Create new user
*
* @param string $name Username
* @return array Users
*/
public function create($name)
{
$this->users[] = $name;
return $this->users;
}
}
$u = new User();
var_dump($u->create('TEST'));
class User
{
protected static $users = array();
/**
* Create new user
*
* @param string $name Username
* @return array Users
*/
public static function create($name)
{
self::$users[] = $name;
return self::$users,
}
}
$u = User::create('TEST');
var_dump($u);
答案 0 :(得分:6)
非静态成员绑定到单个实例。如果您需要工厂或实例注册表,那么这不是您想要的,因此我们将相关成员设置为静态。
答案 1 :(得分:3)
有很多用例,主要是:工厂模式,单身人士等。但实际上,它可以适用于许多情况来详细说明它们。例如,使用您的代码:$user = User::create()->addName('foo')->addSurname('bar');
来保存一些代码行。
答案 2 :(得分:0)
Static表示该类是实例类。在外行人的术语中,你只需要初始化一次对象,然后它将在内存中,直到对象的生命周期完成或你明确地销毁对象。
这意味着该对象有一个实例,而如果每次创建一个新对象时都会产生内存影响。
请注意,这两个类的用法必须在上下文中。某些类必须是重复使用的实例类,而某些类由于某些约束需要是普通类。请在进入之前定义您的最终目标。并对此主题进行一些阅读。
网上有很多好的辩论和文章可以解释它比我更好。