PHP開發錯誤錦集(持續更新)

一、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 裏的全部東西,又從新編譯了容器。但結果就是沒關掉 opcacheapp

最後我發現,不能註釋掉,感受是opcache默認開啓的。我把 ./php-fpm/php5.6.ini./php-fpm/opcache.ini 裏明確指定了 opcache.enable = 0opcache.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類所在文件的上級文件夾的命名)大小寫統一,問題解決了。

不是緩存問題~

相關文章
相關標籤/搜索