php静态变量问题

目前使用php5.6版本,刚刚试着了解静态变量,简单写了个方法

class test
{
    public function test()
    {
        static $a = [];
        $a[] = 1;
        return $a;
    }
}
$test = new test();
$a = $test->test();
print_r($a);

输出是

clipboard.png
请问这个结果是怎么产生的?我以为结果会是array([0]=>1);

阅读 2.5k
4 个回答

如果我记得没错的话:

$test = new test()的时候已经使得 $a[] = 1;

你在$a[] = 1 后面var_dump $a 就能看到。(此时没有执行$test->test());

而你在执行 $test->test() 的时候 又执行了 $a[] = 1,上面 var_dump($a); 会输出两个

因为是静态变量 所以不会被重新声明,继续往数组里面增加内容。

test() 是构造函数,new 的时候会自动执行的。至于为什么是构造函数:

引用如下:

在PHP5以前的版本中,构造函数的名称必须与类名相同,这种方法在PHP5中仍然可以使用,但现在已经很少有人用了。
PHP5以及之后的版本,构造函数用__construct()方法来声明,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。
为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个与类名相同名的构造方法。
如果__construct( )的方法、与类名相同名的构造方法同时存在的话,优先使用__construct( )的方法。

构造函数执行了一次,直接调用执行了一次,所以数组里有两个元素

和类名相同的方法=构造方法

class test{
   function test(){
    
    }
}
$test = new test();
$a = $test->test();

相当于

class test{
 
   function __construct(){
    }
    
}
$test = new test();//此时已经 __construct(); 创建时已经调用了
$a = $test->__construct();//第2次调用
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题