PHP:$ myObject = new ClassName(); vs newClassName;

时间:2011-06-13 01:49:27

标签: php class variables parameters arguments

所以,我理解有时人们会使用parens,有时他们在将类的实例声明为对象时却不会。

如果我声明一个没有参数的类然后将其扩展为有参数,那么初始类是否需要有parens?

此外,我是否可以使用括号类,没有特定参数或引用变量声明,如下所示:

$ myObject = clone ClassName();

然后使用类的参数....

类用户($ param,$ param2)

或者类甚至使用参数?我不太确定,因为没有一个类的例子在我的书中带参数....

2 个答案:

答案 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
    }
}

所以基本上你没有看到带参数的类声明的原因是因为它们不存在,类构造函数是参数所在的位置。