Using $this when not in object context

今天在写脚本的时候,遇到了一个很郁闷的问题,脚本比较繁琐,以下用一个简单的例子表示

<?php
   class fun{
       var a = '1';
       function __contruct(){
           echo 'this is contruct';
       }
       function test(){
   
          echo $this->a;
      }
   }

?>

 

<?php
    require_once('./class.php');
    echo fun::test();
?>

 

该脚本的运行环境在PHP5下,报错Fatal error: Using $this when not in object context

又试了一下,在PHP4环境的可以运行

我想PHP4到PHP5升级后,提高了代码的安全性。

上述的代码是通过命名空间的方式调用的,这个函数虽然在类里面,但是被调用后只是普通的函数了,所以解释不到$this

因此,若要在PHP5下调用类fun下的test方法,可以先继承这个类,然后new一个对象来调用父类的方法

<?php
    require_once('./class.php');
    class exam extends fun{
        function __contruct(){
             echo 'this is child contruct';
        }
    }
    $obj = new exam;
    echo $obj->test;

?>

 注意,若不想让父类fun执行它的构造函数,继承类必须写上构造函数。

 

当然,若在PHP4环境下是不会出现以上问题的

有人会问了,我直接new fun这个类来调用不就好了吗,干嘛那么麻烦还搞继承。其实以上只是个例子而已,我今天写的脚本是调用某个项目里面的一个类,这个类当然不是专门给你用的,整个类包含太多你不需要的东西,而你只要用它类里面的一个方法而已,还有一个原因是我不想让父类自动执行构造函数,所以这么写还是有必要的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值