PHP静态变量 php静态变量问题_PHP_编程问答

PHP静态变量 php静态变量问题

来源:互联网  时间:2017-9-12 16:03:24

关于网友提出的“PHP静态变量 php静态变量问题”问题疑问,本网通过在网上对“PHP静态变量 php静态变量问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:PHP静态变量 php静态变量问题
描述:

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

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

输出是


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


解决方案1:

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

相当于

class test{
 
   function __construct(){
    }
    
}
$test = new test();//此时已经 __construct(); 创建时已经调用了
$a = $test->__construct();//第2次调用

解决方案2:

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

解决方案3:

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

解决方案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( )的方法。

上一篇怎么判断获取到的url是否能访问
下一篇apache新版本的源哪里有
明星图片
相关文章
《PHP静态变量 php静态变量问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)