加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

PHP类中self和$this的差异

发布时间:2021-11-12 15:39:46 所属栏目:教程 来源:互联网
导读:1.self代表类,$this代表对象 2.能用$this的地方一定使用self,能用self的地方不一定能用$this 静态的方法中不能使用$this,静态方法给类访问的。 今天在使用静态方法的时候,使用了$this去调用对象的属性,导致曝出错误信息,在网上查询了手册和百度, 发现

1.self代表类,$this代表对象
2.能用$this的地方一定使用self,能用self的地方不一定能用$this
静态的方法中不能使用$this,静态方法给类访问的。
 
今天在使用静态方法的时候,使用了$this去调用对象的属性,导致曝出错误信息,在网上查询了手册和百度,
 
发现大部分回答只是说明了在静态方法中不允许使用$this,只能使用self,较为靠谱的回答说明是$this是实例化对象的指针,self是对象的指针。
 
针对以上信息,综合自己的学习知识和网上搜索结果作下图:
 
 
 
其中,我们可以明显看到,self调用的类的指针,而非实例化后的对象指针,静态变量和静态方法始终属于类,而非属于实例化后的对象,因此在静态方法中无法使用$this,因为此时所处的位置是类所在的指针,只能使用self调用静态方法或者静态变量。
 
如果要在静态方法中,强制使用函数的其他方法,则只能先实例化一个新的对象,然后再使用该对象的方法。
 
综上所述,self调用的是类,而$this调用的则是实例化的对象。下面是代码。
 
<?php
class demo {
    public $a;
    public $b;
    public static $c = 100;
 
    public function __construct($a) {
        $this->a = $a;
        $this->funct();
    }
 
    public static function func() {
        $newObj = new self(20);
        $newObj->funct();
        self::$c += 100;
        echo self::$c;
    }
 
    private function funct() {
        $this->b = $this->a * 200;
    }
 
    public function getC() {
            echo  self::$c;
    }
}
 
$demo = new demo(3);
$demo::func();
$demo::getC();
$demo2 = new demo(4);
$demo2::func();
$demo::getC();
$demo2::getC();
$demo->getC();

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读