很抱歉标题不好,但我不知道该给我的问题一个好的标题。
我用工作台创建了一个包。现在我有一个包裹。比方说strernd/mypkg在工作台目录Strernd/Mypkg
中,我有以下代码:http://laravel.io/bin/oNzoa
为什么Mypkg::test()
有效而$mypkg = new Mypkg(); $mypkg->test();
无效?(在我的应用程序中)错误是Call to undefined method Strernd'Mypkg'Facades'Mypkg::test()Call to undefined method Strernd'Mypkg'Facades'Mypkg::test()
我想我不了解PHP的一些基本原理。我更像是一个复制品&粘贴/尝试&错误为"developer",但在大多数情况下效果良好。
以"static"方式使用它时,Laravel访问您编写的facade并实例化底层类,然后在该实例上调用该方法。当您使用new Mypkg
调用test
方法时,实际上是在实例化facade类,而不是底层类。该facade类上没有test
方法,因此出现了错误。
这样试试:
use Strernd'Mypkg as MypkgActual;
$mypkg = new MypkgActual;
$mypkg->test();
我相信,因为你的facade和实际的类实现有着完全相同的类名,所以你会遇到一个伪类名冲突,Laravel的facade系统会胜出。您也可以尝试将立面的名称更改为MypkgFacade
。