写iAccont是对面向对象的关键词self和this有点迷惑了,于是做了一些测试.
首先写了下面的代码:
<?php
class test_class
{
public $test_value=null;
static function set()
{
self::$test_value=1;
}
static function test()
{
self::set();
echo self::$test_value;
}
}
test_class::test();
?>
结果不用说,直接报错:**Fatal error: Access to undeclared static property: test_class::$test_value in /var/www/test/a.php on line 9**说我的$test_value是未声明的,怪了,我不是在第三行声明了吗?看来self用错了,于是我把第三行的public $test=null;改为了static $test=null;再次测试,显示1.Bingo!self这个关键字只能用于static的关键字的属性或者方法呀,来试试this关键字.改下.
<?php
class test_class
{
public $test_value=null;
static function set()
{
$this->test_value=1;
}
static function test()
{
$this->set();
echo $this->test_value;
}
}
test_class::test();
?>
又报错!Fatal error: Using $this when not in object context in /var/www/test/a.php on line 14哦,this关键字是用在对象上的啊..于是乎,我给第18行的代码改为了这样
$test1=new test_class;
$test1->test();
测试,正常...
做下总结:$this只能用在对象中,是用在类的实例化时指向相关的方法和属性,而self::则是直接只想类中static类型的方法和属性.got it...