一、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类所在文件的上级文件夹的命名)大小写统一
,问题解决了。
不是缓存问题~