当前位置:  开发笔记 > 编程语言 > 正文

为什么有些php类有一个空的init()方法?

如何解决《为什么有些php类有一个空的init()方法?》经验,为你挑选了1个好方法。

例如,在Yii2框架中,yii\filters\AccessControl该类init()从其父类重写一个函数yii\base\Object.这个Object类又有一个像这样的构造方法:

    Class Object implements Configurable {
        public function __construct($config = [])
        {
            if (!empty($config)) {
                Yii::configure($this, $config);
        }
        $this->init(); // calls the method defined below
        }
    }
// and the definition of this init function ... 
    public function init()
    {
    }

现在没有明显的使用编写这样一个空函数,除非你想用它来初始化他/她将来可能需要的一些属性.

但是那个__construct()方法的用法完全一样!我需要了解这种init()方法是如何有用的.



1> Machavity..:

原因很简单:他们期待你扩展课程

所以你会做这样的事情

class Bob extends Object {
    public function init() {
        $this->setup_something();
    }
}

因此Bob扩展Object方法Bob就是被调用的方法.如果您不需要初始化某些内容,则跳过定义,基类将调用空方法.

这使您不必做一些可能更混乱的事情:覆盖构造函数

class Bob extends Object {
    public function __construct($config = []) {
         $this->setup_something();
    }
}

现在,这很混乱,因为有很多人会错过一些关键的东西(我故意省略了这个例子):不会调用父构造函数(你可以通过拥有它来实现parent::__construct($config)).因此,通过单独设置,init()您可以完全避免混乱.有一个明确的方法来进行自己的设置.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有