PHP中this、self和parent关键字的区别详解

一只小鹿
一只小鹿
发布时间:2026-10-14| 4人浏览过
原创

在PHP的面向对象编程(OOP)中,$this、self 和 parent 是三个极易混淆但至关重要的关键字。它们分别代表当前对象实例、当前类本身和父类。掌握它们的区别是编写高质量PHP代码的基础,直接关系到属性访问范围、静态变量调用以及继承机制的正确实现。

结果与目标

明确区分 $this、self 和 parent 的作用域及指向目标,确保在类的方法内部能正确引用实例属性、静态属性和父类资源。

准备条件

  • 已安装支持面向对象特性的 PHP 环境(建议 PHP 7.0+)。
  • 具备基础的 PHP 语法知识,包括类定义、对象实例化及基本的数据类型。

真实操作顺序

第1步:使用 $this 引用当前对象实例

目的:在类的非静态方法中访问当前对象的属性和方法。

说明:$this 是一个伪变量,它指向调用该方法的对象实例。只有当类被实例化后,$this 才有意义。它不能用于静态上下文中。

示例代码:

<?php
class Name {
    private $name;

    // 构造函数中使用 $this 初始化属性
    public function __construct($name) {
        $this->name = $name;
    }

    // 方法中使用 $this 访问属性
    public function printName() {
        echo $this->name;
    }
}

$obj1 = new Name("PBPHome");
$obj1->printName(); // 输出: PBPHome

$obj2 = new Name("PHP");
$obj2->printName(); // 输出: PHP
?>

第2步:使用 self 引用当前类本身

目的:在类内部访问静态成员(属性或方法),而不依赖具体的对象实例。

说明:self 指向定义它的类。它通常配合作用域解析运算符 :: 使用,用于访问静态变量或调用静态方法。因为静态成员属于类而非对象,所以不能用 $this 访问。

示例代码:

<?php
class Counter {
    private static $firstCount = 0;
    private $lastCount;

    public function __construct() {
        // 使用 self 访问静态变量
        $this->lastCount = ++self::$firstCount;
    }

    public function printLastCount() {
        echo $this->lastCount;
    }
}

$obj = new Counter();
$obj->printLastCount(); // 输出: 1
?>

第3步:使用 parent 引用父类

目的:在子类中调用父类的方法或构造函数,特别是当子类覆盖了父类方法时。

说明:parent 指向当前类的直接父类。它同样使用 :: 运算符。最常见的场景是在子类的构造函数中调用父类的构造函数,以初始化从父类继承的属性。

示例代码:

<?php
class Animal {
    public $name;

    public function __construct($name) {
        $this->name = $name;
    }
}

class Person extends Animal {
    public $personSex;
    public $personAge;

    public function __construct($personSex, $personAge) {
        // 使用 parent 调用父类构造函数
        parent::__construct("PBPHome");
        $this->personSex = $personSex;
        $this->personAge = $personAge;
    }

    public function printPerson() {
        echo $this->name . " is " . $this->personSex . ", age is " . $this->personAge;
    }
}

$personObject = new Person("male", "21");
$personObject->printPerson(); // 输出: PBPHome is male, age is 21
?>

完成判断

通过上述代码运行验证:
- $this->name 成功获取了特定对象的值。
- self::$firstCount 成功修改并读取了类的静态状态。
- parent::__construct 成功执行了父类的初始化逻辑,使子类对象拥有了父类的属性。

简要总结

$this 指向当前对象实例,用于非静态成员的访问;self 指向当前类,主要用于静态成员的引用;parent 指向父类,常用于继承体系中的方法重定向和初始化。三者各司其职,共同构成了PHP面向对象编程的基石。以上就是PHP中this、self与parent关键字详细区别的详细内容,更多关于PHP面向对象编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。