为什么这样的输出结果都是ccc?希望能讲下原理

<?phpstatic $arr = 'aaa';var_dump($arr);static $arr = 'ccc';var_dump($arr);

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

<?phpstatic $arr = array();$arr[] = 'sdsds';$arr[] = 'xxx';var_dump($arr);static $arr = array();var_dump($arr);

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

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



MMTTMM
浏览 120回答 3
3回答

海绵宝宝撒

static一般是用在function或者class里的, 这种用法比较少见我认为,php引擎在扫到static的时候,会把静态声明的提到域的顶端<?phpstatic&nbsp;$arr&nbsp;=&nbsp;'aaa';var_dump($arr);static&nbsp;$arr&nbsp;=&nbsp;'ccc';var_dump($arr);也就变成了<?phpstatic&nbsp;$arr&nbsp;=&nbsp;'aaa';static&nbsp;$arr&nbsp;=&nbsp;'ccc';&nbsp;//&nbsp;所以两个输出都是"ccc"var_dump($arr);var_dump($arr);下一个演变成了<?phpstatic&nbsp;$arr&nbsp;=&nbsp;array();static&nbsp;$arr&nbsp;=&nbsp;array();$arr[]&nbsp;=&nbsp;'sdsds';$arr[]&nbsp;=&nbsp;'xxx';var_dump($arr);var_dump($arr);&nbsp;&nbsp;//&nbsp;所以两个都是&nbsp;[&nbsp;"sdsda",&nbsp;"xxx"&nbsp;]第三个演变成了<?phpstatic&nbsp;$arr&nbsp;=&nbsp;array();static&nbsp;$arr&nbsp;=&nbsp;array('ww',&nbsp;'vv');$arr[]&nbsp;=&nbsp;'sdsds';$arr[]&nbsp;=&nbsp;'xxx';var_dump($arr);&nbsp;&nbsp; var_dump($arr);&nbsp;//两个结果都是&nbsp;["ww","vv","sdsds","xxx"]

DIEA

静态变量在执行前就已经初始化完了。不管初始化多少次,只有最后一次有用。不带上static就可以赋值。你的所有static&nbsp;$xxx&nbsp;=&nbsp;xxx;都只有最后一句有用。下面的代码应该能帮你理清思路:<?phpstatic&nbsp;$arr&nbsp;=&nbsp;array('1','2');if&nbsp;(1&nbsp;==&nbsp;0)&nbsp;{ static&nbsp;$arr&nbsp;=&nbsp;array('gga','gaga'); }var_dump($arr);?>结果是:array&nbsp;(size=2) &nbsp;&nbsp;0&nbsp;=>&nbsp;string&nbsp;'gga'&nbsp;(length=3) &nbsp;&nbsp;1&nbsp;=>&nbsp;string&nbsp;'gaga'&nbsp;(length=4)

开满天机

第二个的第二次定义数组时是空的,应该是忽略。你再把第一个的第二次定义改为'',看看结果。
打开App,查看更多内容
随时随地看视频慕课网APP