Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php silverstripe init()函数_Php_Silverstripe - Fatal编程技术网

Php silverstripe init()函数

Php silverstripe init()函数,php,silverstripe,Php,Silverstripe,有人能在Silverstripe中解释一下这段代码吗 public function init() { RSSFeed::linkToFeed($this->Link() . "rss"); parent::init(); } 什么是init函数 什么parent::init() 在php类中,当您覆盖父类的方法时,您仍然可以使用此代码调用父类,这将帮助您在实际方法的开头放置一些代码,而无需删除它 您可以在上找到更多关于它的信息。最高级的init()方法是在Cont

有人能在Silverstripe中解释一下这段代码吗

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项目中的类层次结构。