在PHP中实例化类实例的不同方式
由于无法更好地表达此问题而抱歉。我试过做一些简单的测试,并没有能够摆脱多少光线。在任何情况下,我不知道如果有,区别以下两个例子之间存在什么样,:在PHP中实例化类实例的不同方式
<?php
class foo
{
public function __construct()
{
}
}
$foo1 = new foo;
这:
<?php
class foo
{
public function __construct()
{
}
}
$foo1 = new foo();
注意,在第二个例子中,我使用括号一起'新'关键字。如果这里没有区别,我有什么可以做我的foo类声明,会造成差异?如果差异存在,它们对PHP特别有用吗?谢谢。
我觉得最好使用圆括号实例化类,即使构造函数不需要任何参数。虽然你的例子做同样的事情,但如果构造函数改变了,他们不会。这是品味和风格的问题。
这是你的第一个例子:
<?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
如果在整个大型代码库中一致地进行操作,上面的操作可以节省时间。我不再那么肯定了,因为人们在测试中变得更好 - 但这只是我的看法。
但是,目前,没有,给出您的示例两者之间没有区别。
我看不到你的观点。最后一个例子不管括号是否都以相同的方式打破。 – 2014-10-17 16:07:43
我的观点是,你可能只需回去添加它们,而不是最初使用它们会以某种方式拯救你:) – 2014-10-17 16:08:47
它们本质上是一样的,都会调用'__construct()'方法。但是,如果在实例化对象时需要一些参数,则需要使用括号。 – Crackertastic 2014-10-17 15:47:06
谢谢..你链接的问题看起来像重复。完美地回答我的问题。 – oliakaoil 2014-10-17 15:49:49
如果你的构造函数不接受任何参数,那么调用你的,没有beacess的类,或者无论你的首选项是什么,如果你有构造函数参数,然后使用大括号来解析vvalues – 2014-10-17 16:10:13