PHP: $myObject = new ClassName(); 与 newClassName; 的区别

4

我知道有时候人们在声明类的实例对象时会使用括号,有时候则不会。

如果我先声明一个没有参数的类,然后扩展它以添加参数,那么初始类是否需要使用括号?

此外,我可以创建一个带有括号但没有特定参数或引用变量声明的类吗?像这样:

$myObject = clone ClassName();

然后再为类使用参数...

class User($param, $param2)

或者类根本不使用参数吗?我不确定,因为我的书中没有介绍带有参数的类的示例...

2个回答

10

首先,我假设你的意思是使用 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 不需要具有参数。可以有一个没有任何参数的构造函数,只是执行某些操作是有效的。

我只是想知道为什么有时候类的实例会带参数调用。我猜如果构造函数有参数,你可以用它们来调用对象... - Wolfpack'08
如果构造函数有非可选参数,则在创建对象时必须传递它们。 - Matthew
@Matthew除了传递参数到构造函数之外,$foo = new Foo;$foo = new Foo();有什么区别吗? - Nasik Shafeek

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接