抱歉标题不好,但我不知道为我的问题打好标题。
我用工作台创建了一个包。现在我有一个包。让我们说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的一些基本原则。我更喜欢复制和粘贴/尝试和错误“开发人员”,但在大多数情况下它运作良好。
答案 0 :(得分:0)
使用时,静态'方式,Laravel正在访问您编写的外观并实例化底层类,然后在该实例上调用该方法。当您使用test
调用new Mypkg
方法时,实际上是实例化 facade 类,而不是底层类。该Facade类没有test
方法,因此错误。
试试这样:
use Strernd\Mypkg as MypkgActual;
$mypkg = new MypkgActual;
$mypkg->test();
我相信,因为你的外观和实际的类实现具有完全相同的类名,所以你在Laravel的外观系统中赢得了伪类名称冲突。您也可以尝试将外观名称更改为MypkgFacade
。