PHP作为支持面向对象编程的脚本语言,对象创建是开发中非常基础且重要的操作,掌握不同的对象创建方法能适配更多开发场景,下面先介绍最基础的对象创建方式。

一、使用new关键字创建对象
这是PHP中最常用的对象创建方式,首先需要定义一个类,然后通过new关键字实例化类得到对象。如果类有构造函数,实例化时会自动调用构造函数完成属性初始化。
下面是一个简单的示例,先定义一个User类,再通过new关键字创建对象:
<?php
// 定义User类
class User {
public $name;
public $age;
// 构造函数,用于初始化对象属性
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
// 获取用户信息的普通方法
public function getInfo() {
return "姓名:{$this->name},年龄:{$this->age}";
}
}
// 使用new关键字创建User对象,传入构造函数所需参数
$user1 = new User("张三", 25);
// 调用对象方法
echo $user1->getInfo();
?>
上述代码中,new User("张三", 25)会创建一个User类的实例,同时把参数传递给__construct构造函数,完成name和age属性的赋值。
二、通过变量动态创建对象
PHP支持通过变量存储类名,再用new关键字配合变量创建对象,这种方式适合类名需要动态变化的场景,比如根据配置参数实例化不同的类。
示例代码如下:
<?php
class Product {
public $productName;
public function __construct($productName) {
$this->productName = $productName;
}
public function showName() {
return "商品名称:{$this->productName}";
}
}
// 用变量存储类名
$className = "Product";
// 通过变量动态创建对象
$product = new $className("笔记本电脑");
echo $product->showName();
?>
这种方式下,只要变量存储的是合法的、已定义的类名,就可以成功创建对应的对象实例。
三、使用工厂方法创建对象
工厂方法是一种设计模式,通过专门的工厂类来负责对象的创建,这样可以把对象创建的逻辑封装起来,方便后续修改和扩展,也符合面向对象的单一职责原则。
下面是一个简单的工厂方法示例:
<?php
// 定义基础类
class Car {
public $brand;
public function __construct($brand) {
$this->brand = $brand;
}
}
// 定义工厂类
class CarFactory {
// 静态工厂方法,用于创建Car对象
public static function createCar($brand) {
return new Car($brand);
}
}
// 通过工厂方法创建对象
$car1 = CarFactory::createCar("比亚迪");
$car2 = CarFactory::createCar("特斯拉");
echo $car1->brand; // 输出比亚迪
echo $car2->brand; // 输出特斯拉
?>
当后续需要修改Car对象的创建逻辑,比如增加参数校验、添加对象缓存时,只需要修改工厂类的方法即可,不需要修改所有调用创建对象的地方。
四、对象创建的注意事项
- 创建对象前必须确保对应的类已经被定义,否则会抛出类不存在的错误。
- 如果类的构造函数有必填参数,实例化时必须传入对应参数,否则会报错。
- 同一个类可以创建多个不同的对象实例,每个实例的属性相互独立,修改一个实例的属性不会影响其他实例。
下面是验证多个实例属性独立的示例:
<?php
class Student {
public $score;
public function __construct($score) {
$this->score = $score;
}
}
$stu1 = new Student(90);
$stu2 = new Student(85);
$stu1->score = 95;
echo $stu1->score; // 输出95
echo $stu2->score; // 输出85,不受stu1修改的影响
?>
以上就是PHP中几种常用的对象创建方法,开发者可以根据实际的开发场景选择合适的方式,基础场景用new关键字即可,复杂场景可以结合工厂方法等设计模式优化代码结构。