PHP開發錯誤錦集(持續更新)
阿新 • • 發佈:2018-11-17
1、trait
命名問題。
問題:trait
裡定義的方法找不到
<?php namespace app\controllers; trait Example { public function example(); } class Foo { use Example; public function __construct() { $this->example(); } } PHP message: PHP Fatal error: Call to undefined method app\controllers\FooController::example() in path/controllers/FooController.php on line xx
解決:
trait 與 trait 裡寫的方法名稱不可以相同。將上面的 trait 名稱 Example 和 方法名 example() 改成不一樣就可以了。
2、你的 opcache
真的關了嗎?
在開發過程中,當你修改了程式碼,可實際上卻輸出的是改之前
的內容。
檢測是否關閉了 opcache。
var_dump(ini_get('opcache.enable'));
如果為 0,剛為關閉。
最近在用 laradock
這個 docker
環境,我在配置裡改了 PHP_FPM_INSTALL_OPCACHE=false
,並且也註釋了 ./php-fpm/opcache.ini
opcache
!
最後我發現,不能註釋掉,感覺是opcache
預設開啟的。我把 ./php-fpm/php5.6.ini
和 ./php-fpm/opcache.ini
裡明確指定了 opcache.enable = 0
、opcache.enable_cli=0
。這才解決。
一個字,煩~
3、關於空間名大小寫問題
問題:在A類
內例項化B類
,並呼叫B類
內的C方法
,第一次執行,沒用錯誤。這時修改C方法
,重新執行,結果卻是修改之前的程式碼。
解決:一開始懷疑有opcache
快取,所以關掉了opcache
。結果仍解決不了。我的docker用的是 ubuntu
centos
上,結果報錯 - “A類例項化B類的時候,找不到B類”
。可明明在ubuntu
上沒問題啊。一經檢查,發現 B類空間名
中的路徑
與 B類
檔案路徑存在不一致
(主要是有一個字母的大小寫不同,其它部分都一樣)。
於是把B類的空間名的大小寫與所在檔案路徑的路徑
(主要指B類所在檔案的上級資料夾的命名)大小寫統一
,問題解決了。
不是快取問題~