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


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

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

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

此外,我是否可以有一个带括号的类,并且没有像下面这样的特定参数或引用变量声明:

$myObject=克隆类名();

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

类用户($param,$param2)

或者类甚至使用过参数吗?我真的不确定,因为在我的书中没有一个类采用参数的例子。。。。

首先,我假设您指的是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不需要有参数。有一个构造函数只做一些没有任何参数的事情是有效的。

这些参数,例如

$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
    }
}

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