1. 程式人生 > >PHP開發錯誤錦集(持續更新)

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

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 = 0opcache.enable_cli=0。這才解決。

一個字,煩~

3、關於空間名大小寫問題

問題:在A類內例項化B類,並呼叫B類內的C方法,第一次執行,沒用錯誤。這時修改C方法,重新執行,結果卻是修改之前的程式碼。

解決:一開始懷疑有opcache快取,所以關掉了opcache。結果仍解決不了。我的docker用的是 ubuntu

,我把程式碼放到了 centos上,結果報錯 - “A類例項化B類的時候,找不到B類”。可明明在ubuntu上沒問題啊。一經檢查,發現 B類空間名 中的路徑B類檔案路徑存在不一致(主要是有一個字母的大小寫不同,其它部分都一樣)。

於是把B類的空間名的大小寫與所在檔案路徑的路徑(主要指B類所在檔案的上級資料夾的命名)大小寫統一,問題解決了。

不是快取問題~

原文地址:https://segmentfault.com/a/1190000016109590