📜  什么时候在PHP使用 self 而不是 $this ?(1)

📅  最后修改于: 2023-12-03 15:21:45.442000             🧑  作者: Mango

什么时候在 PHP 使用 self 而不是 $this?

在 PHP 中,self 和 $this 都是关键字,但它们的用法是不同的。

$this 关键字

$this 是一个特殊的变量,它包含当前对象的引用。在非静态方法中,它可以用于访问对象的属性和方法。例如,下面的例子中,我们可以使用 $this 来访问 MyClass 对象的属性和方法:

class MyClass {
    private $name = "Tom";

    public function getName() {
        return $this->name;
    }
}

$obj = new MyClass();
echo $obj->getName();  // 输出 "Tom"
self 关键字

self 是一个类自身的引用,它可以用于访问类的静态成员或常量。静态成员是指属于类的成员,而不是属于对象的成员。常量是不可变值,通常在类声明时定义。使用 self 关键字,我们可以在类中访问静态成员和常量,而不需要实例化该类。

例如,下面的例子定义了一个类,并在类中使用了 self 关键字来访问静态成员和常量:

class MyClass {
    const TAX = 0.1;
    public static $counter = 0;

    public function __construct() {
        self::$counter++;
    }

    public static function calculateTax($price) {
        return $price * self::TAX;
    }
}

$obj1 = new MyClass();
$obj2 = new MyClass();

echo MyClass::$counter;  // 输出 "2"
echo MyClass::calculateTax(100);  // 输出 "10"
什么时候使用 self?

使用 self 关键字的主要场景是在访问类的静态成员和常量。静态成员可以被所有实例共享,所以我们不需要创建一个对象来访问它们。常量的值是不可变的,它们适合用于定义常数。

在使用 self 关键字时,需要注意以下几点:

  • self 是一个类自身的引用,所以它只能在类中使用,而不能用于对象。
  • self::$property 可以用于访问静态成员,而 $this->property 用于访问对象的成员。
  • self::CONSTANT 可以用于访问常量,而 $this->CONSTANT 句法是无效的,因为常量是类的属性,而不是对象的属性。

如果你需要在代码中使用 self,需要先了解自己要访问的属性或方法是类级别的还是对象级别的。如果是类级别的,那么可以使用 self::$property 或 self::METHOD()。如果是对象级别的,那么应该使用 $this->property 或 $this->method()。

结论

使用 self 和 $this 都很重要,但它们的用法各不相同。self 用于访问类的静态成员和常量,而 $this 用于访问对象的非静态成员和方法。记住这些区别,可以让你写出更优秀的 PHP 代码。