在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.self代表类,$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();
|
2022-11-06
2022-08-17
2022-07-18
2022-08-17
2022-07-29
请发表评论