在PHP中使用“this”和“self”
http://board.phpbuilder.com/showthread.php?10354489-RESOLVED-php-class-quot-this-quot-or-quot-self-quot-keyword class Demo { private static $name; private $age; public function __construct($name,$age) { self::$name = $name; $this->age=$age; } public function show() { echo "Name : ",self::$name,"<br/>"; //Accessing by self echo "Name : ",Demo::$name,"<br/>"; //Accessing by class name echo "Age : ",$this->age,"<br/>"; } } $demo = new Demo("Tiny",13); $demo->show(); 这会产生以下输出. Name : Tiny Name : Tiny Age : 13 前面代码段中self :: $name和Demo :: $name有什么区别? class Person1 { private $name; private $address; public function __construct($name,$address) { $this->name = $name; $this->address = $address; } public function show() { echo "Name : ",$this->name,"<br/>"; echo "Address : ",$this->address,"<br/>"; //Accessing by this } } $p1=new Person1("xxx","yyy"); $p1->show(); class Person2 { private $name; private $address; public function __construct($name,$address) { self::$name = $name; self::$address = $address; } public function show() { echo "Name : ",self::$address,"<br/>"; //Accessing by self } } $p2=new Person1("xxx","yyy"); $p2->show(); 在前面的两个类Person1和Person2产生如下相同的输出. Name : xxx Address : yyy 有什么区别(如在Preson1类中,show()方法) $this->name; $this->address; 和(如在Preson2类中,show()方法) self::$name; self::$address; 在这种背景下? 解决方法
在Demo类中使用Demo :: $name和self :: $name实际上是相同的.您可以通过名称访问它,因为变量是静态的和可访问的,就像您可以使用类的名称从不同的类访问公共静态变量一样.
因此,在这种情况下,按名称访问主要是能够从可访问类访问任何公共静态变量的副产品. 第二个输出与第一个输出相同,因为您显然正在创建一个新的Person1对象,而不是Person2对象(请参阅:$p2 = new Person1(“xxx”,“yyy”);) 如果您要创建一个Person2对象,那么您将收到一个错误,因为您无法将值分配给尚未声明的静态变量(您在名称和地址中有对象级变量,但不是静态的).如果您将它们声明为静态,那么由于它使用静态调用,您将从修改后的show方法获得相同的输出. 如果您不确定对象(读取:实例)变量和静态变量之间的区别是什么,那么我建议您参与一些Google搜索,但基本上静态变量存在于类级别,而不是对象级别,并且可以访问来自任何类方法或指定类型的对象(例如,如果你有100个Person2实例,他们都可以访问相同的名称变量,例如),而实例变量对于单个对象本身是唯一的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |