在将类实例化为实例时,可能会注意到,有时候类后面加了括号,而有时又没有加括号,两者到底有什么区别呢?
我们先看一个示例:
class Person
{
public function sayHello()
{
echo 'Hello';
}
}
$person1 = new Person;
$person1->sayHello(); // Hello
$person2 = new Person();
$person2->sayHello(); // Hello
两者没有任何区别。
再看另外一个例子,如果构造函数中带有参数呢?
class Person
{
protected $name;
public function __construct($name)
{
$this->name = $name;
}
public function sayHello()
{
echo "Hello, I am {$this->name}.";
}
}
$bob = new Person;
$bob->sayHello();
$nancy = new Person('nancy');
$nancy->sayHello();
结果运行后报致命错误了:Fatal error: Uncaught ArgumentCountError: Too few arguments to function Person::__construct(), 0 passed.
因此得出的结论是:当类的构造函数中没有必填参数时,使用 new
创建实例可以省略括号;当构造函数有必填参数时,一定要加上括号并传递参数,否则会导致致命错误。