白驹过隙,这篇文章距今已有一年以上的历史。技术发展日新月异,文中的观点或代码很可能过时或失效,请自行甄别:)

写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...