2

有人可以解释一下这两个类之间的区别吗?为什么要使用 satic 调用而不是新对象?

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);
4

3 回答 3

6

非静态成员绑定到单个实例。如果您想要工厂或实例注册表,这不是您想要的,因此我们将相关成员设为静态。

于 2010-10-14T11:06:44.190 回答
3

有很多用例,主要是:工厂模式、单例模式等。但实际上,它可以适用于许多情况来详细说明它们。例如,用你的代码:$user = User::create()->addName('foo')->addSurname('bar');节省一些代码行。

于 2010-10-14T11:14:35.823 回答
0

静态表示该类是实例类。用外行的话来说,您只需初始化对象一次,然后它将位于内存中,直到对象的生命周期完成或您明确销毁对象。

这意味着该对象只有一个实例,而如果您每次创建一个新对象,它都会对内存产生影响。

请注意,这两个类的使用必须在上下文中。由于某些限制,某些类必须是实例类才能重用,而某些类必须是普通类。请在开始之前定义您的最终目标。并阅读有关此主题的内容。

网上有很多很好的辩论和文章可以比我更好地解释它。

于 2010-10-14T11:13:19.483 回答