在PHP中实例化类实例的不同方式

问题描述:

由于无法更好地表达此问题而抱歉。我试过做一些简单的测试,并没有能够摆脱多少光线。在任何情况下,我不知道如果有,区别以下两个例子之间存在什么样,:在PHP中实例化类实例的不同方式

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

$foo1 = new foo; 

这:

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

$foo1 = new foo(); 

注意,在第二个例子中,我使用括号一起'新'关键字。如果这里没有区别,我有什么可以做我的foo类声明,会造成差异?如果差异存在,它们对PHP特别有用吗?谢谢。

+4

它们本质上是一样的,都会调用'__construct()'方法。但是,如果在实例化对象时需要一些参数,则需要使用括号。 – Crackertastic 2014-10-17 15:47:06

+0

谢谢..你链接的问题看起来像重复。完美地回答我的问题。 – oliakaoil 2014-10-17 15:49:49

+0

如果你的构造函数不接受任何参数,那么调用你的,没有beacess的类,或者无论你的首选项是什么,如果你有构造函数参数,然后使用大括号来解析vvalues – 2014-10-17 16:10:13

我觉得最好使用圆括号实例化类,即使构造函数不需要任何参数。虽然你的例子做同样的事情,但如果构造函数改变了,他们不会。这是品味和风格的问题。

这是你的第一个例子:

<?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 

如果在整个大型代码库中一致地进行操作,上面的操作可以节省时间。我不再那么肯定了,因为人们在测试中变得更好 - 但这只是我的看法。

但是,目前,没有,给出您的示例两者之间没有区别。

+0

我看不到你的观点。最后一个例子不管括号是否都以相同的方式打破。 – 2014-10-17 16:07:43

+0

我的观点是,你可能只需回去添加它们,而不是最初使用它们会以某种方式拯救你:) – 2014-10-17 16:08:47