关于静态方法中不能使用$this

关于静态方法中不能使用$this

class Test{
   public $str;
    function __destruct()
   {
       // TODO: Implement __destruct() method.
       echo '销毁对象'.PHP_EOL;
       echo $this->str;
   }

   function __construct($v)
   {
       $this->str=$v;
       echo $this->str;
   }

}

$t = new Test('ccccccc');

输出
//ccccccc
//Warning: Call to private Test::__destruct() from context '' during shutdown ignored in Unknown on line 0
//PHP Warning:  Call to private Test::__destruct() from context '' during shutdown ignored in Unknown on line 0


// 课程中有讲$this在静态方法中不可用. 但是我在__destruct()加了关键字private 爆出警告信息 Warning: Call to private Test::__destruct()
// 那么构造函数也是一个静态方法了. 却是$this可以在里面使用的。


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
imooc_澈 2018-07-09 11:55:38

您好,代码在小慕这里执行没有报错,静态方法使用类名直接调用,此时并没有实例化对象,因此就不存在$this,静态函数中不能使用$this. 构造函数和析构函数是类的魔术方法,不能加private,加了会报错。

如果解决了你的问题,请采纳,祝学习愉快~

  • 提问者 托儿所 #1
    我知道析构函数不能加private, 我的意思是加了private后警告信息 Warning: Call to private Test::__destruct(), Test::__destruct()不是类的静态方法调用吗? 所以我认为析构函数是一个静态方法。而静态方法中不能使用$this. 故而矛盾。所以我的疑问是析构函数是不是一个静态方法,如果不是为什么使用类的静态方法调用形式
    2018-07-14 12:13:56
  • 好帮手慕查理 回复 提问者 托儿所 #2
    您好,不是静态方法。构造方法是一个系统已经规定其名字,并且只在new一个对象的时候自动执行的方法;析构方法,是一个在对象被“销毁”的时候,会自动调用的方法。祝学习愉快!
    2018-07-15 10:56:20
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师