先感慨几句,以前看thinkphp手册主要看的都是模型,视图,路由,最近维护自己的一个项目开始看手册的架构了,把架构里面的内容读了几遍的几遍,感觉对tp的理解又深了一点。也体会到了tp的良苦用心!!都不容易呀!好了言归正传
thinkPHP中的门面(Facade)自我感觉算是架构里面比较简单、最容易分清楚,也是最实用的一种了。
官方的解释是
说的直白一点,Facade功能可以让类无需实例化而直接进行静态方式调用。
ok在这里我就不多说 public 和public static的区别了, 简单理解一个就是外部和内部都可以用 ->
调用,另外一种只能自己调用自己的那种self::
, 有了Facade 就可以不用实例化直接进行静态调用(半年前我还真不怎么理解,慢慢的自己就体会到了,5.0的手册就没有提及这个问题)废话有点多了,来例子解决问题
你完全按照官方手册去写,执行什么的都没有问题。
创建一个类方法
<?php
namespace app\common;
class Test
{
public function hello($name)
{
return 'hello,' . $name;
}
}
在创建一个facade
namespace app\facade;
use think\Facade;
class Test extends Facade
{
protected static function getFacadeClass()
{
return 'app\common\Test';
}
}
然后用调用静态方法的方式去调用就行,但是做为强迫症的我来说,在phpStorm中却没有代码提示,这让我很不爽,为啥官方在里面都有提示我写的facade没提示,不公平,这也不利于我去查找我写的东西呀!那还不如我直接写静态的来的爽呢!
百度了好久就找到一个关于这方面的,不具体还是错的,真的是醉了。然后我就在手册里面找,有人提及了,但是说的很含糊,照做了还是不行,然后我就发帖子,一个大神一句话点醒了我,按照大神的方法成功了,贴出大神的回答
!在这里插入图片描述
看懂了吗??
来拿个实在例子给你说,调用我WechatTool类里面的abc方法。方法很简单,就是注释,在facade中添加一个注释,phpStorm就能识别
关键就这么一句,
注释的重要性
就是这么一句注释的问题,@method 方法名() static
就这么一句,搞定。好了你可以去试试。看看能不能成。