我在网上寻找了parent :: init();的含义。 。我只能找到init()来初始化一些设置,这些设置每次在应用程序运行时都会出现。
任何人都可以准确地解释parent :: init()的含义,就像两个词的含义一样吗?
在此先谢谢您。(如果太简单,对不起!)
最佳答案
当使用parent::init()
时,我们只是在当前类的方法内调用父方法(在本例中为init()
)。
关于父母:
例如,假设我们有一个名为MyClass
的类。这个类有一个很棒的方法,可以运行很多东西:
class MyClass
{
public function runStuffs()
{
// trigger events, configure external stuff, adding default values to properties.
}
}
现在,经过一段时间,我们决定创建一个从第一个类开始的新类。我们称为
MySecondClass
:class MySecondClass extends MyClass
{
}
它已经有方法
runStuffs()
,但是,对于第二个类,我们需要在该方法中做更多的事情,但要保持它的作用。当然,我们可以重写整个方法,只需复制并粘贴
MyClass
中的内容,然后添加新内容。但这不是一个优雅的方法,甚至不是一个好的做法。如果以后我们在MyClass
中更改方法怎么办,您可能希望MysecondClass
也进行更改。因此,要解决该问题,我们可以在编写新内容之前调用父方法:
class MySecondClass extends MyClass
{
public function runStuffs()
{
parent::runStuffs();
// do more things!
}
}
现在,
MySecondClass->runStuffs()
将始终执行其父级所做的事情,之后,还会做更多的事情。关于init()方法。
init()是Yii2框架的几乎所有类中使用的方法(因为大多数在某个时候从
yii\base\Object
扩展),并且其作用方式与__constructor()方法(来自PHP
的本机)类似。但是有一些区别,您可以阅读更多here。实际上,
init()
方法是在__constructor()
内部调用的,框架使我们尽可能使用init()
代替__construct()
。现在,如果两者几乎是同一件事,为什么要创建此方法?该here有一个答案。 (看看来自开发团队的qiang的回答):
init()的原因之一是关于对象(或确切地说是组件)的生命周期。
使用init()方法,可以在实例化对象之后而完全初始化之前对其进行配置。例如,可以使用app config配置应用程序组件。如果覆盖其init()方法,则将确保已应用配置,并且可以安全地检查一切是否就绪。小部件和其他可配置组件也会发生类似的情况。
即使init()是在构造函数中而不是在另一个对象中调用的,它也具有含义。例如,在CApplication中,有preInit()和init()。它们设置了应用程序的生命周期,并且可能会被覆盖,因此自定义仅在预期的生命周期内发生。
结论
因此,当您使用
init()
方法并调用parent::init()
时,您只是在说要向该方法添加更多内容而不删除它已经在做的事情。关于php - yii2-有人可以解释parent::init();的含义吗?声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37559386/