PHPStorm 中的魔术方法,魔术属性支持

首先搞清楚为什么要用魔术方法,实际上魔术系列主要作用还是提供程序设计灵活性和语言表达能力,减去你写大量的样板代码,但是这种运行时解释,会让读代码的人很抓头。
比如 __call __get __get 等等,用了以后IDE支持变得很差,因为IDE根本捕捉不到意图,魔术系列都是在运行时动态解释的。
如何解决这个问题呢?我们可以使用 phpdoc 来缓解这个问题,PHPStorm 对此提供了良好的支持。
相关的 doc 介绍:
魔术方法
https://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.method.pkg.html

/**
 * show off @method
 *
 * @method int borp() borp(int $int1, int $int2) multiply two integers
 */
class Magician
{
    function __call($method, $params)
    {
        if ($method == 'borp') {
            if (count($params) == 2) {
                return $params[0] * $params[1];
            }}}}

魔术属性
https://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.property.pkg.html

/**
 * show off @property, @property-read, @property-write
 *
 * @property mixed $regular regular read/write property
 * @property-read int $foo the foo prop
 * @property-write string $bar the bar prop
 */
class Magician
{
    private $_thingy;
    private $_bar;

    function __get($var)
    {
        switch ($var) {
            case 'foo' :
                return 45;
            case 'regular' :
                return $this->_thingy;
        }}

    function __set($var, $val)
    {
        switch ($var) {
            case 'bar' :
                $this->_bar = $val;
                break;
            case 'regular' :
                if (is_string($val)) {
                    $this->_thingy = $val;
                }}}
}

怎么用呢?很简单,在你的类的注释上打上 @method 注释,然后你的IDE就可以完美支持代码补全了。

posted @ 2021-06-07 10:34  我听不见  阅读(324)  评论(0编辑  收藏  举报