今天在写脚本的时候,遇到了一个很郁闷的问题,脚本比较繁琐,以下用一个简单的例子表示
<?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这个类来调用不就好了吗,干嘛那么麻烦还搞继承。其实以上只是个例子而已,我今天写的脚本是调用某个项目里面的一个类,这个类当然不是专门给你用的,整个类包含太多你不需要的东西,而你只要用它类里面的一个方法而已,还有一个原因是我不想让父类自动执行构造函数,所以这么写还是有必要的。