【问题标题】:Different ways of instantiating class instances in PHP [duplicate]在 PHP 中实例化类实例的不同方法 [重复]
【发布时间】:2014-12-13 06:07:50
【问题描述】:

抱歉,无法更好地阐明这个问题。我尝试做一些简单的测试,但未能阐明太多。无论如何,我想知道以下两个示例之间存在什么区别(如果有的话):

<?php
class foo
{
   public function __construct()
   {
   }
}

$foo1 = new foo;

还有这个:

<?php
class foo
{
   public function __construct()
   {
   }
}

$foo1 = new foo();

请注意,在第二个示例中,我将括号与“new”关键字一起使用。如果这里没有差异,我可以对我的 foo 类声明做些什么来产生差异吗?如果存在差异,它们是 PHP 特有的吗?谢谢。

【问题讨论】:

  • 它们本质上是一样的,都会调用__construct()方法。但是,如果在实例化对象时需要一些参数,则需要括号。
  • 谢谢..您链接的问题似乎是重复的。完美回答我的问题。
  • 如果您的构造函数不带参数,则调用您的类而不使用beacess 或使用任何您的偏好,如果您有构造函数参数,则使用大括号解析vvalues

标签: php class


【解决方案1】:

我觉得最好使用括号来实例化你的类,即使构造函数不需要任何参数。虽然您的示例做同样的事情,但如果构造函数发生更改,它们不会。不过,这是品味和风格的问题。

这是你的第一个例子:

<?php
class foo
{
   public function __construct()
}

$foo1 = new foo;

这行得通,但如果我们这样做呢?

public function __construct($db = null) {}

.. 好吧,那么它仍然可以工作,因为参数有默认值。

但是如果我们这样做呢?

public function __construct($db) {}

.. 它会由于缺少参数而中断,并且您需要括号才能传递参数。如果您返回并让 foo 构造函数变得更有趣,那么您只需添加括号以及所有参数。

最后,语言确实进化了。当您使用括号时,我从来没有看到 PHP 抱怨,但如果您不使用它可能有一天会变得脾气暴躁。一些确实使用无括号的方式来表示我们正在实例化的这个类没有构造函数。这是..个人口味。您可以有意义地使用缺席:

$f = new foo; // class has no constructor, or constructor has no arguments
$f = new foo(); // class has a constructor with default arguments we can set later
$f = new foo($bar) // class has a constructor, and it needs arguments

如果在整个大型代码库中始终如一地执行上述操作,则可以节省时间。我不确定了,因为人们在测试方面做得更好 - 但这只是我的意见。

但是,目前 - 不,根据您的示例,两者之间没有区别。

【讨论】:

  • 我不明白你的意思。无论括号与否,最后一个示例都会以相同的方式中断。
  • 我的意思是,您可能只需要返回并添加它们,而不是最初使用它们可以以某种方式节省您:)
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2020-07-20
相关资源
最近更新 更多