Php silverstripe init()函数
有人能在Silverstripe中解释一下这段代码吗Php silverstripe init()函数,php,silverstripe,Php,Silverstripe,有人能在Silverstripe中解释一下这段代码吗 public function init() { RSSFeed::linkToFeed($this->Link() . "rss"); parent::init(); } 什么是init函数 什么parent::init() 在php类中,当您覆盖父类的方法时,您仍然可以使用此代码调用父类,这将帮助您在实际方法的开头放置一些代码,而无需删除它 您可以在上找到更多关于它的信息。最高级的init()方法是在Cont
public function init() {
RSSFeed::linkToFeed($this->Link() . "rss");
parent::init();
}
什么是init函数
什么parent::init()代码>
在php类中,当您覆盖父类的方法时,您仍然可以使用此代码调用父类,这将帮助您在实际方法的开头放置一些代码,而无需删除它
您可以在上找到更多关于它的信息。最高级的init()方法是在Controller类中定义的。
然后ContentController扩展控制器,它覆盖控制器类的init()方法,但它也在第一行调用parent::init()。然后,通常您会这样定义所有页面控制器类(对于任何新的页面类型),在下面的示例中为默认页面控制器类定义:
class Page_Controller extends ContentController {
public function init() {
parent::init();
// do your own stuff here
}
}
这是传统的基于PHP的类扩展机制,但Silverstripe还允许您使用扩展和数据扩展,这基本上是扩展现有控制器、数据对象的功能。我不会详细讨论这个。。。您可以在此处了解更多信息:
我的控制器类中通常有类似的内容:
class Page_Controller extends ContentController {
public function init() {
parent::init();
// do your own stuff here
$this->extend('updateInit');
}
}
注意$this->extend('updateInit')代码>上面的行
我可以在YAML配置文件的某个地方为Page_Controller类定义另一个扩展名,然后在该类中定义updateInit()方法。例如:
class Page_Controller_Extension extends Extension {
public function updateInit() {
// do some more stuff here
}
}
…在这种情况下,YAML配置文件中会有类似的内容:
---
Name: siteextensions
After:
- 'framework/*'
- 'cms/*'
---
Page_Controller:
extensions:
- Page_Controller_Extension
请注意,这并不是像在PHP中那样扩展类的传统方式,它更像是为控制器类定义一些装饰器。此外,要引用父对象或正在装饰的对象,不能仅使用$this
,您需要使用$this->owner
。示例如下:
class Page_Controller_Extension extends Extension {
public function updateInit() {
// do some more stuff here
if ($this->owner->IsFeatured) {
// do something here
}
}
}
您通常装饰扩展扩展的控制器
类,如果您想装饰数据对象,您可以扩展数据扩展
类-工作方式与上面解释的相同。它从父类调用静态init()
函数,如果这回答了您的问题?!init()是属于silverstripe还是php知识库?它是来自silverstripe
的一个函数,问题得到了回答?是的,我想知道在哪里阅读这个函数的具体功能。但是我不知道去哪里找。有关于它的教程吗有关于Controller
类的api文档,其中包含init()
函数:这是否意味着init()是父类的方法,我用声明我的函数/public function init()/来覆盖它,但我在名为method parent::init()的函数中从高阶类开始?是的,所以main init()方法可以工作,但是在这之前,我确实建议使用IDE,例如PHPStorm,在Silverstripe核心代码周围移动。只需按住CTRL键并单击父::init()行中的init()方法,它将跳转到IDE中ContentController类的init()方法。。。再次,您可以按住CTRL键并单击父::init()行中的init()方法,它将跳转到控制器类的init()方法。这是一种在不同的类、方法等之间快速切换的方法。。。它还有助于理解Silverstripe中的类层次结构,或者任何PHP项目中的类层次结构。