new
要创建一个类的实例,必须使用 new
关键字。当创建新对象时该对象总是被赋值,除非该对象定义了 构造函数 并且在出错时抛出了一个 异常。类应在被实例化之前定义(某些情况下则必须这样)。
如果一个变量包含一个类名的 string 和 new 时,将创建该类的一个新实例。
如果该类属于一个命名空间,则必须使用其完整名称。
注意:
如果没有参数要传递给类的构造函数,类名后的括号则可以省略掉。
示例 #3 创建实例
PHP 8.0.0 起,支持任意表达式中使用 new。如果表达式生成一个
string,这将允许更复杂的实例化。表达式必须使用括号括起来。
示例 #4 使用任意表达式创建实例
在下列示例中,我们展示了多个生成类名的任意有效表达式的示例。展示了函数调用,string 连接和 ::class 常量。
以上示例在 PHP 8 中的输出:
object(ClassA)#1 (0) {
}
object(ClassB)#1 (0) {
}
object(ClassC)#1 (0) {
}
object(ClassD)#1 (0) {
}
在类定义内部,可以用 new self 和 new parent 创建新对象。
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用
克隆 给一个已创建的对象建立一个新实例。
示例 #5 对象赋值
var = '$assigned will have this value';$instance = null; // $instance 和 $reference 变为 nullvar_dump($instance);var_dump($reference);var_dump($assigned);?>
以上示例会输出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
有几种方法可以创建一个对象的实例。
示例 #6 创建新对象
以上示例会输出:
bool(true)
bool(true)
bool(true)
可以通过一个表达式来访问新创建对象的成员:
示例 #7 访问新创建对象的成员
format('Y'), PHP_EOL;// 从 PHP 8.4.0 起,周围的括号是可选的echo new DateTime()->format('Y'), PHP_EOL;?>
以上示例的输出类似于:
2025
2025
注意:
在 PHP 7.1 之前,如果类没有定义构造函数,则不对参数进行执行。