PHP:$ myObject = new ClassName; vs newClassName;

问题描述

| 因此,我了解到有时人们在将类的实例声明为对象时使用parens,有时却不使用parens。 如果我声明一个没有参数的类,然后将其扩展为具有参数,那么初始类是否需要具有parens? 此外,我是否可以使用带有方括号且没有特定参数或引用变量声明的类,如下所示: $ myObject =克隆ClassName(); 然后为类使用参数。 类User($ param,$ param2) 还是类甚至使用过参数?我不太确定,因为在我的书中没有带参数的类的例子。     

解决方法

        这些参数,例如
$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
    }
}
因此,基本上,您看不到带有参数的类声明的原因是因为它们不存在,所以类构造函数是参数所在的位置。     ,        首先,我假设您的意思是
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
不需要参数。具有仅执行不带任何参数的操作的构造函数是有效的。