工厂设计模式中,如何让phpStorm认识调用的是哪个指定的方法?
工厂类代码demo
Apple(苹果类)
namespace App\Lib\Fruits;
class Apple{
public function money(){
return 2;
}
}
Banana(香蕉类)
namespace App\Lib\Fruits;
class Banana{
public function money(){
return 0.5;
}
}
FruitsFactory (水果工厂)
namespace App\Lib\Fruits;
/**
*
* @method static \App\Lib\Fruits\Apple Apple()
/
class FruitsFactory{
//调用指定的第三方类
public static function make($className)
{
$namespace = 'App\Lib\Fruits\\';
return app($namespace . $className);
}
public static function __callStatic($name, $arguments)
{
return self::make($name, ...$arguments);
}
}
调用Test类
class Test(FruitsFactory $factory){
//情况一
$fruits = "Apple";
//编辑器找不到money()
echo factory::$fruits()->money();
//编辑器找得到money()
echo factory::Apple()->money();
//情况二
$factory = new ThirdCustomFactory();
//找得到
echo factory::Apple()->money();
//情况三
$factory = app("App\Lib\Fruits\FruitsFactory");
//找不到
echo factory::Apple()->money();
}
问题
想知道上述调用到的Test类中如何让编辑器识别到
factory::$fruits()->money();
即便是下述写法,也需要在factory里面加入@method
factory::Apple()->money();
有没有什么办法可以在连@method都不需要写。。只需要去关心生成的对应的水果类,和具体调用的地方.
另外-关于如何使用服务提供者
这三种情况都可以正常的返回出我想要的结果,但是在情况三中,在make之前我没有进行指定register,但是也能make通,所以在laravel中,什么情况或者功能下,我才需要用到ServiceProvider,去register它呢?
🙏🙏🙏🙏🙏
推荐文章: