所以,我理解有时人们会使用parens,有时他们在将类的实例声明为对象时却不会。
如果我声明一个没有参数的类然后将其扩展为有参数,那么初始类是否需要有parens?
此外,我是否可以使用括号类,没有特定参数或引用变量声明,如下所示:
$ myObject = clone ClassName();
然后使用类的参数....
类用户($ param,$ param2)
或者类甚至使用参数?我不太确定,因为没有一个类的例子在我的书中带参数....
答案 0 :(得分:7)
首先,我假设您的意思是new
,而不是clone
。 PHP在创建类时不要求使用括号。
class Foo { }
$foo = new Foo;
$foo = new Foo();
两者都有效。
您发送的任何参数都会传递给__construct
函数。创建对象时会自动调用该函数(如果存在)。
class Foo
{
public function __construct($n)
{
echo "Hello, $n\n";
}
}
$foo = new Foo("World!");
那将输出:
Hello, World!
如果构造函数接受参数,那么如果您不发送任何参数,则会出现错误(警告)。
请注意__construct
不需要参数。有一个构造函数只是做一些没有任何参数的东西是有效的。
答案 1 :(得分:2)
这些参数,例如
$myObject = new ClassAwesome($param1, $param2);
不对应于类声明,它们与构造函数有关。一个例子:
//this is how you declare a class, there will not be a parenthesis here
class ClassAwesome {
//here is where the parameters are used when you instantiate a class
public function __construct($param1, $param2) {
//init code goes here
}
}
所以基本上你没有看到带参数的类声明的原因是因为它们不存在,类构造函数是参数所在的位置。