php静态数组变量初始化,为什么数组初始化时,赋值不能是常量?
剛剛發現的一個很奇怪的現象
下面這個數組我設置為類的屬性,其中SYSTEM_LIB為我定義的常量
final class Application { public static $_lib=array( 'route' => SYSTEM_LIB.'/lib_route.php', 'mysql' => SYSTEM_LIB.'/lib_mysql.php', );}
但最終運行時報錯為Parse error: syntax error, unexpected
而我將該數組放入方法中時,就能正常創建
final class Application { public static $_lib=array(); public static function run(){ self::$_lib =array( 'route' => SYSTEM_LIB.'/lib_route.php', 'mysql' => SYSTEM_LIB.'/lib_mysql.php', ); }}
我分析是因為當數組被設置為類屬性時,數組內的值必須在引號內,數組不認識常量
回復討論(解決方案)
類定義時,屬性不能賦予不確定的值
用戶常量是在程序運行時定義的
而語法檢查是在程序運行前進行的
而系統常量就是確定的值class T { var $os = PHP_OS;}$p = new T;echo $p->os;
Like any other PHP static variable, static properties may only be initialized using a literal or constant before PHP 5.6; expressions are not allowed.
與PHP的靜態變量一樣,靜態屬性只能使用一個字面值或常量來初始化(PHP5.6之前的版本);表達式是不允許的。
In PHP 5.6 and later, the same rules apply as const expressions: some limited expressions are possible, provided they can be evaluated at compile time.
PHP5.6以上版本則與常量表達式的規則一樣,可以使用一些特定的表達式,只要其能在編譯時被計算
所以你的第一種寫法在PHP5.6以上版本是可以正常運行的。
印象中static靜態變量不能用其他變量或函數作為值初始化
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的php静态数组变量初始化,为什么数组初始化时,赋值不能是常量?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode32 --- longe
- 下一篇: 操作系统进程间通信 --- IPC