基类
<?php
namespace app\service;
use think\Facade;
use think\Model;
abstract class BaseService extends Facade
{
protected Model $model;
public function IList(){}
public function Test(){}
}
代理类
<?php
namespace app\service;
use app\model\AdminModel;
use think\Model;
class AdminService extends BaseService
{
protected Model $model;
function __construct()
{
$this->model = new AdminModel();
}
protected static function getFacadeClass()
{
return "app\service\AdminService";
}
function test()
{
echo 1;
}
}
然后调用
<?php
namespace app\facade;
use app\service\AdminService;
class TestFacade
{
function test()
{
AdminService::test();
}
}
这里的调用会提示,没有静态方法。请问是我哪里写错了吗?
参考资料:
当你继承自
Facade
时,如果 尝试静态调用一个不可访问的方法, 就会触发Facade
的__callStatic
方法,他会去尝试解析getFacadeClass
方法返回的类名,从而调用实际的方法。而你这里的
AdminService::test()
,因为AdminService
已经存在有可访问的test
方法了,所以不满足 __callStatic 的调用条件,而你这里的test
方法并不是静态的,所以报错了。还有,你这个 AdminService 实际就是为他自身创建了一个 Facade,虽然是可以这样做,但是一般为了方便管理,是不建议这样做,而是单独放一个文件。