对非静态和静态成员变量使用 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 的区别

在 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