道歉,因为无法更好地阐明这个问题。我尝试过一些简单的测试,并且没有能够解决问题。无论如何,我想知道以下两个例子之间存在什么差异,如果有的话:
<?php
class foo
{
public function __construct()
{
}
}
$foo1 = new foo;
而且:
<?php
class foo
{
public function __construct()
{
}
}
$foo1 = new foo();
请注意,在第二个示例中,我使用括号以及“&#39; new&#39;关键词。如果这里没有差异,我可以对我的foo类声明做些什么来创造差异?如果存在差异,它们是否特别适用于PHP?感谢。
答案 0 :(得分:2)
我觉得使用括号实例化类更好,即使构造函数不需要任何参数。虽然您的示例执行相同的操作,但如果构造函数发生更改,则不会这样做。这虽然是品味和风格的问题。
这是你的第一个例子:
<?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
如果在大型代码库中一致地完成上述操作,则可以节省时间。我不再那么肯定,因为人们在测试方面变得更好 - 但这只是我的意见。
目前,但是,不,这两个例子之间没有区别。