在PHP中使用“this”和“self”

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在PHP中使用“this”和“self”脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_419_1@

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

前面@L_406_3@段中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实例,他们都可以访问相同的名称变量,例如),而实例变量对于单个对象本身是唯一的.

脚本宝典总结

以上是脚本宝典为你收集整理的在PHP中使用“this”和“self”全部内容,希望文章能够帮你解决在PHP中使用“this”和“self”所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。