Heim > Backend-Entwicklung > PHP-Tutorial > php中静态变量的疑问

php中静态变量的疑问

WBOY
Freigeben: 2016-06-06 20:51:37
Original
1061 Leute haben es durchsucht

为什么这样的输出结果都是ccc?

<?php static $arr = 'aaa';
var_dump($arr);
static $arr = 'ccc';
var_dump($arr);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

但是这样却改变不了数组?

<?php static $arr = array();
$arr[] = 'sdsds';
$arr[] = 'xxx';
var_dump($arr);
static $arr = array();
var_dump($arr);
Nach dem Login kopieren
Nach dem Login kopieren

而这样会给数组新增元素?

static $arr = array();
$arr[] = 'sdsds';
$arr[] = 'xxx';
var_dump($arr);
static $arr = array('ww', 'vv');
var_dump($arr);
Nach dem Login kopieren
Nach dem Login kopieren

希望能讲下原理 :)

回复内容:

为什么这样的输出结果都是ccc?

<?php static $arr = 'aaa';
var_dump($arr);
static $arr = 'ccc';
var_dump($arr);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

但是这样却改变不了数组?

<?php static $arr = array();
$arr[] = 'sdsds';
$arr[] = 'xxx';
var_dump($arr);
static $arr = array();
var_dump($arr);
Nach dem Login kopieren
Nach dem Login kopieren

而这样会给数组新增元素?

static $arr = array();
$arr[] = 'sdsds';
$arr[] = 'xxx';
var_dump($arr);
static $arr = array('ww', 'vv');
var_dump($arr);
Nach dem Login kopieren
Nach dem Login kopieren

希望能讲下原理 :)

static一般是用在function或者class里的, 这种用法比较少见
我认为,php引擎在扫到static的时候,会把静态声明的提到域的顶端

<?php static $arr = 'aaa';
var_dump($arr);
static $arr = 'ccc';
var_dump($arr);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

也就变成了

<?php static $arr = 'aaa';
static $arr = 'ccc'; // 所以两个输出都是"ccc"
var_dump($arr);
var_dump($arr);
Nach dem Login kopieren

下一个演变成了

<?php static $arr = array();
static $arr = array();
$arr[] = 'sdsds';
$arr[] = 'xxx';
var_dump($arr);
var_dump($arr);  // 所以两个都是 [ "sdsda", "xxx" ]
Nach dem Login kopieren

第三个演变成了

<?php static $arr = array();
static $arr = array('ww', 'vv');
$arr[] = 'sdsds';
$arr[] = 'xxx';
var_dump($arr);  
var_dump($arr); //两个结果都是 ["ww","vv","sdsds","xxx"]
Nach dem Login kopieren

静态变量在执行前就已经初始化完了。不管初始化多少次,只有最后一次有用。不带上static就可以赋值。
你的所有

static $xxx = xxx;
Nach dem Login kopieren

都只有最后一句有用。

下面的代码应该能帮你理清思路:

<?php static $arr = array('1','2');
if (1 == 0) {
	static $arr = array('gga','gaga');
}
var_dump($arr);
?>
Nach dem Login kopieren

结果是:

array (size=2)
  0 => string 'gga' (length=3)
  1 => string 'gaga' (length=4)
Nach dem Login kopieren

第二个的第二次定义数组时是空的,应该是忽略。
你再把第一个的第二次定义改为'',看看结果。

学习了。。。

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage