一、trait
命名問題。php
問題:trait
裏定義的方法找不到docker
<?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
解決:ubuntu
trait 與 trait 裏寫的方法名稱不能夠相同。將上面的 trait 名稱 Example 和 方法名 example() 改爲不同就能夠了。
二、你的 opcache
真的關了嗎?centos
在開發過程當中,當你修改了代碼,可實際上卻輸出的是改以前
的內容。緩存
檢測是否關閉了 opcache。 var_dump(ini_get('opcache.enable')); 若是爲 0,剛爲關閉。
最近在用 laradock
這個 docker
環境,我在配置裏改了 PHP_FPM_INSTALL_OPCACHE=false
,而且也註釋了 ./php-fpm/opcache.ini
裏的全部東西,又從新編譯了容器。但結果就是沒關掉 opcache
!app
最後我發現,不能註釋掉,感受是opcache
默認開啓的。我把 ./php-fpm/php5.6.ini
和 ./php-fpm/opcache.ini
裏明確指定了 opcache.enable = 0
、opcache.enable_cli=0
。這才解決。php-fpm
一個字,煩~this
三、關於空間名大小寫問題spa
問題:在A類
內實例化B類
,並調用B類
內的C方法
,第一次運行,沒用錯誤。這時修改C方法
,從新運行,結果倒是修改以前的代碼。code
解決:一開始懷疑有opcache
緩存,因此關掉了opcache
。結果仍解決不了。個人docker用的是 ubuntu
,我把代碼放到了 centos
上,結果報錯 - 「A類實例化B類的時候,找不到B類」
。可明明在ubuntu
上沒問題啊。一經檢查,發現 B類空間名
中的路徑
與 B類
文件路徑存在不一致
(主要是有一個字母的大小寫不一樣,其它部分都同樣)。
因而把B類的空間名的大小寫與所在文件路徑的路徑
(主要指B類所在文件的上級文件夾的命名)大小寫統一
,問題解決了。
不是緩存問題~