资讯专栏INFORMATION COLUMN

php magic method 的具体应用和 phpdoc 结合

csRyan / 1273人阅读

摘要:关于的介绍自行查阅官方文档,这里不再赘述。使用的同学注意了,如果在我们的代码中使用到了中相关的魔术方法,需要在文件中指明告诉应该如何来跟踪变量属性。下面我们来具体实践分析。确实这个样子可以实现,但没有利用到这一魔术方法的特性。

关于 Magic Methods 的介绍自行查阅官方文档,这里不再赘述。
http://php.net/manual/en/lang...

使用 phpstorm 的同学注意了,如果在我们的代码中使用到了 php 中相关的魔术方法,需要在 php 文件中指明告诉 phpstorm 应该如何来跟踪变量属性。下面我们来具体实践分析。

假设现在我有一个 php 的基类名为 BaseController.php

container = $container;
    }

    /**
     * @param $name
     * @return mixed
     */
    public function __isset ($name)
    {
        return $this->container->{$name};
    }

    /**
     * @param $name
     * @param $value
     * @return mixed
     */
    public function __set ($name, $value)
    {
        return $this->container->{$name} = $value;
    }

    /**
     * @param $name
     * @return mixed
     */
    public function __get ($name)
    {
        return $this->container->{$name};
    }
}

同时还有一个 CompanyController.php 的类文件继承的该 BaseController.php

auth->requestUser($request);
    }
}

这里我们主要要关注的点就是 $this->auth 这个,因为这个才是我们今天要将的重点。这里再说一点,列举的代码是基于 slim framework 中的一部分,有不了解 slim framework 的可以先了解下。当然不了解也不影响我们今天要说的这一点。下面是正题。

这里我想实现的效果就是当我在 CompanyController.php 的方法中要访问这个容器(container)中的 auth,可以直接使用 $this->auth,然后就可以操作auth中的方法和属性等。

那上面我列举的方式是使用 php 语言的 magic methods 这个特性,那有同学就要说了,我直接指定岂不是也可以,答案是肯定的。

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");
    }

效果就是这个样子。
确实这个样子可以实现,但没有利用到 magic method 这一魔术方法的特性。

这里着重说明的是这个我们定义的这些个类内部属性(这些成员属性必须通过phpdoc 的 @var 来指明你将要调用的成员属性是哪一个不然 phpstorm 不会识别提示)和 __get() 方法,当我们要访问不可访问的属性时会调用该方法。
那所以说 $auth | $validator | $db | fractal 等属性我们要在外部自动调用 __get() 方法来访问的话就必须将其访问修饰符设置为 private (php 中的三种修饰符 public protected private),这样我们在外部调用才能自动执行到 __get() 方法,达到同样的目的来调用 $this->auth 等

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30784.html

相关文章

  • PHP注释艺术——phpDoc规范

    摘要:特别适合一些动态加载的类,无法自动提示出来,这时就可以通过写标记来告诉我这类里有哪些方法格式返回值类型名称类型参数描述例如向谷歌提问,返回答案内容包。 用过IDE或看过其他源码的小伙伴们应该都见过类似下面这样的注释 /** * 递归获取所有游戏分类 * @param int $id * @return array */ 看得多了就大概知道了一些规律。为了使自己的代码更加规zhu...

    HtmlCssJs 评论0 收藏0
  • php-cs-fixer - PHP 编码格式化工具

    摘要:是个代码格式化工具,格式化的标准是以及一些的标准。这个工具也和等优秀的库出自同门。如果同时设定了和,前者的优先级更高。同时使用和命令可以显示出需要修改的汇总,但是并不实际修改。你可以设置格式化的选项级别文件以及目录。 php-cs-fixer 是个代码格式化工具,格式化的标准是 PSR-1、PSR-2 以及一些 symfony 的标准。这个工具也和 symfony、twig 等优秀的 ...

    ityouknow 评论0 收藏0
  • Zurmo - - 新手入门指南

    摘要:新建时创建默认数据将基本字段添加到你的类在本节中,介绍如何向最近创建的类添加类型为,或的新的基本字段,在这个例子中,我们将向类添加一个新的字段首先要做的是定义类中的新字段。 新手入门指南-创建模块 Customizing Zurmo ---- 自定义Zurmo 官方的动物园为例:链接:http://zurmo.org/wiki/customi... 新建模块 所有扩展类将在自己的模块...

    fredshare 评论0 收藏0
  • Zurmo - - 新手入门指南

    摘要:新建时创建默认数据将基本字段添加到你的类在本节中,介绍如何向最近创建的类添加类型为,或的新的基本字段,在这个例子中,我们将向类添加一个新的字段首先要做的是定义类中的新字段。 新手入门指南-创建模块 Customizing Zurmo ---- 自定义Zurmo 官方的动物园为例:链接:http://zurmo.org/wiki/customi... 新建模块 所有扩展类将在自己的模块...

    yy13818512006 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<