在PHP中,定义类和创建对象是面向对象编程的核心操作。以下从类定义、对象实例化、构造函数、访问控制等角度进行详细说明,并结合示例和引用资料展开分析:
一、类的定义
1. 基本语法
类通过class
关键字定义,语法结构为:
[权限修饰符] class 类名 {
// 属性(成员变量)
// 方法(成员函数)
}
- 权限修饰符:可选,包括
public
、protected
、private
,默认是public
。 - 类名:遵循驼峰命名法(如
Car
、UserModel
)。 - 属性和方法:定义在类的花括号内,属性和方法可通过访问修饰符控制可见性。
示例:定义一个汽车类Car
,包含颜色和价格属性:
class Car {
public $color; // 公有属性
public $price;
}
2. 访问控制修饰符
- public:类内、子类、外部均可访问。
- protected:仅类内和子类可访问。
- private:仅类内可访问。
class User {
private $password; // 仅当前类可访问
protected $email; // 当前类和子类可访问
public $name; // 所有位置可访问
}
二、对象的实例化
对象是类的实例,通过new
关键字创建。PHP支持多种实例化方式:
1. 直接使用new
关键字
$car1 = new Car();
$car1->color = "red"; // 设置属性值
2. 通过变量动态实例化
$className = 'Car';
$car2 = new $className(); // 等价于 new Car()
3. 通过现有对象克隆
$car3 = new $car1(); // 基于已有对象创建新实例
4. 其他高级方式(适用于继承场景)
new self()
:在类方法中返回当前类的实例。new parent()
:在子类中返回父类的实例。new static()
:在静态方法中返回调用者类的实例。
三、构造函数的使用
构造函数在对象创建时自动调用,用于初始化属性。PHP通过__construct()
方法定义构造函数:
1. 基本用法
class User {
public $name;
public $email;
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
}
// 实例化时传递参数
$user = new User("Alice", "alice@example.com");
2. 继承中的构造函数
- 子类若未定义构造函数,默认继承父类的构造函数。
- 子类若定义构造函数,需显式调用父类构造函数:
class Student extends User {
public $grade;
public function __construct($name, $email, $grade) {
parent::__construct($name, $email); // 调用父类构造函数
$this->grade = $grade;
}
}
3. 兼容性说明
- PHP5之前构造函数需与类同名(如
class User { function User() { ... } }
),PHP5+推荐使用__construct()
。
四、访问控制的实际应用
1. 属性访问控制示例
class BankAccount {
private $balance = 0;
public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // 输出100
// $account->balance = 200; // 错误:私有属性不可外部访问
2. 方法访问控制示例
class BaseClass {
protected function protectedMethod() {
echo "受保护的方法";
}
}
class SubClass extends BaseClass {
public function callProtectedMethod() {
$this->protectedMethod(); // 子类可访问父类的protected方法
}
}
$obj = new SubClass();
$obj->callProtectedMethod(); // 输出“受保护的方法”
// $obj->protectedMethod(); // 错误:外部不可访问
五、总结
- 类定义:通过
class
关键字,结合访问修饰符定义属性和方法。 - 对象实例化:使用
new
关键字,支持动态类名和高级继承场景。 - 构造函数:优先使用
__construct()
初始化对象,注意继承中的显式调用。 - 访问控制:合理使用
public
、protected
、private
实现封装性。
通过上述机制,PHP能够有效组织代码结构,提升可维护性和安全性。例如,一个完整的用户管理系统可能包含如下类结构:
class User {
private $id;
protected $role;
public function __construct($id, $role) {
$this->id = $id;
$this->role = $role;
}
public function getRole() {
return $this->role;
}
}
class Admin extends User {
public function managePermissions() {
echo "管理员权限操作";
}
}
$admin = new Admin(1, "admin");
$admin->managePermissions(); // 输出“管理员权限操作”
此示例展示了类的继承、构造函数初始化、访问控制的综合应用。