特性引發的問題
‘About PHP’
thinkphp5
搭建tp5的時候,出現了一個非常奇怪的問題,伺服器一直500
但是就是沒有辦法發現對應的問題,直到後來打開了nginx的error日誌,出現了
\nFatal error: Arrays are not allowed in class constants in /mnt/putao/api/xin.36qq.com/vendor/mrmiao/think-interface-encryption/src/RSACrypt.php on line 54
找到了對應的行數
const exception_response = [ 'miss_config'=>['code'=>100,'message'=>'RSA config missing'],//缺少配置檔案 'request_parse_fail'=>['code'=>101,'message'=>'Request param parsing exception'],//請求引數解析失敗 'request_method_error'=>['code'=>102,'message'=>'Request method error'],//請求方式錯誤 'request_param_num_error'=>['code'=>103,'message'=>'Number of request parameters and rules inconsistent'],//請求引數數量與規則不符 'request_param_error'=>['code'=>104,'message'=>'Error params:'],//錯誤的請求引數 ];
後來找了很多的問答,發現這個特性常量定義,對於陣列而言,php>=5.6才會有這個特性,否則無法使用
雖然版本是5.6但是hhvm是不支援的,所以我用了土方法
把常量改成了變數,用this去呼叫,也算是解決了這個問題
不過想想還是後怕,因為常量與變數區別很大,光光有大影響的區別
-
- 常量前面沒有美元符號($)
-
- 常量只能用 define() 函式定義,而不能通過賦值語句
-
- 常量可以不用理會變數範圍的規則而在任何地方定義和訪問(這點影響非常大) 常量的作用域:常量無論在那定義,都可以直接呼叫,沒有作用域。 變數的作用域:變數定義在那個範圍就在那個範圍有效,如函式中定義的變數就只在函式中有效。
-
- 常量一旦定義就不能被重新定義或者取消定義
-
- 常量的值只能是標量(5.6以後可以為陣列)