当前位置: 首页 > 后端技术 > PHP

phpmagicmethod和phpdoc的具体应用结合

时间:2023-03-30 00:41:21 PHP

的MagicMethods介绍自行参考官方文档,这里不再赘述。http://php.net/manual/en/lang...使用phpstorm的同学注意了,如果我们在代码中使用php中的相关magic方法,需要在php文件中指定如何跟踪phpstorm的变量属性.我们来详细分析一下。假装现在我有一个名为BaseController.phpcontainer=$container;}/***@param$name*@returnmixed*/publicfunction__isset($name){return$this->container->{$name};}/***@param$name*@param$value*@returnmixed*/publicfunction__set($name,$value){return$this->container->{$name}=$value;}/***@param$name*@returnmixed*/publicfunction__get($name){return$this->container->{$name};}}while还有一个CompanyController.php类文件继承自BaseController.phpauth->requestUser($request);}}这里主要关注$this->auth,因为这是我们今天要关注的内容。我在这里多说一点。列出的代码基于slim框架的一部分。如果你不知道slim框架,你可以先学习它。当然,看不懂也不影响我们今天要说的内容。这是主题。我这里想要实现的效果是,当我想在CompanyController.php的方法中访问这个容器(container)中的auth时,直接使用$this->auth就可以了,然后就可以操作里面的方法和属性了授权。我上面列出的方法是利用php语言的magicmethods特性。那么有同学会说,我可以直接指定吗?答案是肯定的。container=$container;$this->auth=$this->container->get('auth');$this->validator=$this->container->get('validator');$this->fractal=$this->container->get('fractal');$this->session=$this->container->get('session');$this->db=$this->container->get('db');效果就是这样,确实可以这样实现,但是没有使用magicmethod这个magicmethod的属性。这里强调的是我们定义的这些类的内部属性(这些成员属性必须由phpdoc的@var指定你要调用哪个成员属性,否则phpstorm无法识别提示)和__get()方法,当当我们想要访问不可访问的属性时调用此方法。所以如果我们想自动调用__get()方法访问$auth|等属性$验证器|$分贝|),这样我们在外部调用的时候就可以自动执行__get()方法,调用$this->auth等也能达到同样的目的。