对非静态和静态成员变量使用 self 和 $this
让我们从表示 self 和 $this 用于静态和非静态成员变量的正确用法开始。
下面是一个例子:
<?php class X { private $non_static_member = 1; private static $static_member = 2; function __construct() { echo $this->non_static_member . ' ' . self::$static_member; } } new X(); ?>
为了进行比较,我们在下面演示了将 self 和 $this 用于静态和非静态成员变量的错误方法:
<?php class X { private $non_static_member = 1; private static $static_member = 2; function __construct() { echo self::$non_static_member . ' ' . $this->static_member; } } new X(); ?>
在给定的教程中,我们选择了在 PHP 中使用 self 和 $this 的最常见和最方便的方法。
PHP 中 self 和 $this 的区别
在 PHP 中,self 通常属于类成员,但从不属于任何确切的对象。
原因是静态成员(函数或者变量)是类的所有对象共享的类成员。
而 $this 指的是特定实例的成员变量和函数。
$符号不用于 self ,因为它不表示变量,而是表示类结构。
由于 $this 不引用特定变量,因此它包含一个 $符号。
关于 PHP 中的 $this
在 PHP 中,$this 被认为是对当前对象的引用的伪变量。
大多数时候,它是在面向对象的代码中实现的。
变量 $this 用于调用非静态方法。
如果尝试调用静态方法,则会发生错误。
这意味着变量 $this 现在可以在静态方法中使用。
用自我抑制多态行为
下面演示了通过将 self 应用于成员函数来抑制多态行为的示例:
<?php class X { function foo() { echo 'X::foo()'; } function bar() { self::foo(); } } class Y extends X { function foo() { echo 'Y::foo()'; } } $x = new Y(); $x->bar(); ?>
$this 的多态性
$this 用于成员函数的多态性示例如下所示:
<?php class X { function foo() { echo 'X::foo()'; } function bar() { $this->foo(); } } class Y extends X { function foo() { echo 'Y::foo()'; } } $x = new Y(); $x->bar(); ?>
日期:2020-06-02 22:16:01 来源:oir作者:oir