文章目录

PHP 面向对象:class 定义与对象实例化

发布于 2026-04-04 12:30:44 · 浏览 14 次 · 评论 0 条

PHP 面向对象:class 定义与对象实例化


理解面向对象的基本概念

在正式写代码之前,先搞清楚两个核心概念:类(Class)对象(Object)

类就像是一张设计图纸或者一个模具。它定义了某种事物的共同特征和行为。比如,你可以设计一个 Car 类,这个类会规定"汽车"必须有颜色、速度、品牌这些属性,还必须有"行驶"、"刹车"这些行为。

对象就是根据这张图纸实际制造出来的具体产品。当你基于 Car 类创建一个对象时,就得到了一辆真实的、可以驾驶的汽车——它有具体的颜色(比如红色),具体的速度(当前可能是 0),具体的品牌(比如"丰田")。

这两者的关系可以这样理解:类是抽象的模板,对象是具体的存在。一个类可以创建无数个对象,就像一张设计图可以造出无数辆车一样。


定义一个类

在 PHP 中,使用 class 关键字来定义类。类的基本结构包含属性(类的特征)和方法(类的行为)。

类的完整结构

class Car {
    // 属性:描述类的特征
    public $color;
    public $brand;
    public $speed = 0;
    
    // 方法:描述类的行为
    public function drive($speed) {
        $this->speed = $speed;
        echo "汽车以 {$this->speed} km/h 的速度行驶";
    }
    
    public function brake() {
        $this->speed = 0;
        echo "汽车已停止";
    }
}

关键元素解析

属性声明:使用 $` 符号加上变量名来定义属性,前面的 `public` 是访问修饰符,表示这个属性可以从类的外部访问。除了 `public`,还有 `protected`(只能在类内部和子类访问)和 `private`(只能在类内部访问)。 **方法定义**:方法就是类里面的函数,使用 `function` 关键字定义。方法内部使用 `$this 关键字来引用当前对象,访问对象的属性或调用其他方法。

class User {
    public $name;
    public $email;

    public function getInfo() {
        return "姓名: {$this->name}, 邮箱: {$this->email}";
    }
}

创建对象实例

类定义好之后,使用 new 关键字来创建对象实例。创建对象的过程也叫做"实例化"。

基本实例化语法

// 基于 User 类创建一个对象
$user1 = new User();

// 为对象的属性赋值
$user1->name = "张三";
$user1->email = "zhangsan@example.com";

// 调用对象的方法
echo $user1->getInfo();

执行以上代码会输出:姓名: 张三, 邮箱: zhangsan@example.com

创建多个对象

同一个类可以创建多个独立的对象,每个对象都有自己独立的属性值。

$user2 = new User();
$user2->name = "李四";
$user2->email = "lisi@example.com";

$user3 = new User();
$user3->name = "王五";
$user3->email = "wangwu@example.com";

$user1`、`$user2、`$user3` 是三个完全独立的对象,修改其中一个对象的属性不会影响其他对象。 --- ## 构造函数:初始化对象 构造函数是一个特殊的方法,当对象被创建时,会自动调用这个方法。它通常用于设置对象的初始状态。 ### 定义构造函数 在 PHP 中,构造函数的方法名是 `__construct`(注意前面有两个下划线)。 ```php class Product { public $name;
public $price; // 构造函数:创建对象时自动调用 public function __construct($name, $price) { $this->name = $name; $this->price = $price; } public function getInfo() { return "商品: {$this->name}, 价格: ¥{$this->price}"; } } ``` ### 使用构造函数创建对象 ```php // 创建对象时直接传入参数 $product1 = new Product("手机", 2999);
$product2 = new Product("笔记本电脑", 5999); echo $product1->getInfo();
echo $product2->getInfo(); ``` 使用构造函数的好处是:**创建对象的同时完成初始化**,确保对象创建后就能立即使用,无需再单独设置属性。 --- ## 析构函数:清理资源 析构函数在对象被销毁时自动调用,用于执行清理工作,比如关闭数据库连接、释放资源等。 ```php class Database { public $connection;

public function __construct($host, $dbname) {
    // 模拟连接数据库
    echo "连接到数据库: {$host}/{$dbname}\n";
    $this->connection = "数据库连接对象";
    }
    
    // 析构函数:对象销毁时自动执行
    public function __destruct() {
        echo "数据库连接已关闭\n";
    }
}

// 当脚本执行完毕,所有对象会被销毁,析构函数自动调用
$db = new Database("localhost", "myapp");

echo "业务逻辑处理中...\n";


执行结果:

连接到数据库: localhost/myapp
业务逻辑处理中...
数据库连接已关闭


---

## 完整示例:学生信息管理系统

下面通过一个完整的示例,演示如何综合运用类的定义和对象实例化。

```php
class Student {
    public $name;
    public $age;
    public $grade;
    
    public function __construct($name, $age, $grade) {
        $this->name = $name;
        $this->age = $age;
        $this->grade = $grade;
    }

    public function study() {
        return "{$this->name} 正在努力学习";
    }
    
    public function exam($subject) {
        return "{$this->name} 正在参加 {$subject} 考试";
    }

    public function getInfo() {
        return "姓名: {$this->name}, 年龄: {$this->age}, 年级: {$this->grade}";
    }
}

// 创建学生对象
$student1 = new Student("小明", 16, "高一");
$student2 = new Student("小红", 17, "高二");

// 使用对象
echo $student1->getInfo() . "\n";
echo $student1->study() . "\n";
echo $student2->exam("数学") . "\n";

输出结果:

姓名: 小明, 年龄: 16, 年级: 高一
小明 正在努力学习
小红 正在参加 数学 考试

访问修饰符的区别

前面提到属性和方法可以使用 publicprotectedprivate 三种访问修饰符,它们决定了属性和方法的访问范围。

修饰符 访问范围
public 任何位置都可以访问
protected 只能在类本身和子类中访问
private 只能在类本身内部访问

class Person {
    public $publicName = "公开属性";
    protected $protectedAge = 25;
    private $privateId = "ID12345";
    
    public function showAll() {
        // 在类内部可以访问所有属性
        echo "公开: {$this->publicName}\n";
        echo "保护: {$this->protectedAge}\n";
        echo "私有: {$this->privateId}\n";
    }
}

$person = new Person();

// 这些可以正常访问
echo $person->publicName . "\n";
$person->showAll();

// 以下访问会报错(已注释)
// echo $person->protectedAge;   // 错误:无法从外部访问
// echo $person->privateId;      // 错误:无法从外部访问
```

---

## 关键要点总结

**类的定义**使用 `class` 关键字,包含属性(变量)和方法(函数)。访问修饰符控制属性的可见性,建议将属性设置为 `private` 或 `protected`,通过公共方法来访问和修改,这样更安全。

**对象实例化**使用 `new` 关键字,每次实例化都会创建一个独立的对象。构造函数 `__construct` 用于初始化对象,析构函数 `__destruct` 用于清理资源。

**`$this` 关键字**在方法内部引用当前对象,访问对象的属性或调用其他方法。记住:`$this` 只能用在对象上下文中,不能用在静态方法中。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文