为什么在Cakephp 3.x中使用parent::initialize

为什么在Cakephp 3.x中使用parent::initialize,php,cakephp,Php,Cakephp,为什么我需要在控制器的初始化方法上使用parent::initialize(),尽管它在没有此选项的情况下工作 使用:cakephp3 谢谢 这些是php OOP的基础知识: 您可能会发现自己编写的代码引用了基类中的变量和函数。如果派生类是基类中代码的细化或专门化,则这一点尤其正确 您不应该在代码中使用基类的文字名称,而应该使用特殊名称parent,它引用在类的extends声明中给定的基类名称。通过这样做,可以避免在多个位置使用基类的名称。如果您的继承树在实现过程中发生更改,那么只需更改类的e

为什么我需要在控制器的初始化方法上使用
parent::initialize()
,尽管它在没有此选项的情况下工作

使用:cakephp3

谢谢
这些是php OOP的基础知识:

您可能会发现自己编写的代码引用了基类中的变量和函数。如果派生类是基类中代码的细化或专门化,则这一点尤其正确

您不应该在代码中使用基类的文字名称,而应该使用特殊名称parent,它引用在类的extends声明中给定的基类名称。通过这样做,可以避免在多个位置使用基类的名称。如果您的继承树在实现过程中发生更改,那么只需更改类的extends声明即可轻松地进行更改

A类{
函数示例(){
echo“我是一个::example()并提供基本功能。
\n”; } } B类扩展了A类{ 函数示例(){ 回显“I am B::example(),并提供附加功能。
\n”; 父::示例(); } } $b=新b; //这将调用B::example(),后者将依次调用A::example()。 $b->example();

是否需要调用取决于您的实现。然而,在框架中,大多数情况下,在重写方法时调用父方法是一个好主意,以确保调用链中的逻辑。阅读php手册,它附带了一些示例。

这些是php OOP的基础知识:

您可能会发现自己编写的代码引用了基类中的变量和函数。如果派生类是基类中代码的细化或专门化,则这一点尤其正确

您不应该在代码中使用基类的文字名称,而应该使用特殊名称parent,它引用在类的extends声明中给定的基类名称。通过这样做,可以避免在多个位置使用基类的名称。如果您的继承树在实现过程中发生更改,那么只需更改类的extends声明即可轻松地进行更改

A类{
函数示例(){
echo“我是一个::example()并提供基本功能。
\n”; } } B类扩展了A类{ 函数示例(){ 回显“I am B::example(),并提供附加功能。
\n”; 父::示例(); } } $b=新b; //这将调用B::example(),后者将依次调用A::example()。 $b->example();

是否需要调用取决于您的实现。然而,在框架中,大多数情况下,在重写方法时调用父方法是一个好主意,以确保调用链中的逻辑。阅读php手册,它附带了一些示例。

parent只是从Override方法运行parent方法。请注意,您正在重写
initialize()
方法,但是父方法中可能有一些“东西”是必不可少的,因此,由于现在无法访问它(因为重写),您可以使用
parent::method()
访问它,然后在那里运行代码需要注意的是,有时调用父方法的顺序很重要,例如
您的代码
parent::method()
父::方法()
你的代码
如果父级中存在
您的代码取决于您必须首先调用父级的内容,这似乎是显而易见的。但是很容易忽略它,因为代码“位”可能存在于两个单独的文件中。parent只是从Override方法运行parent方法。请注意,您正在重写
initialize()
方法,但是父方法中可能有一些“东西”是必不可少的,因此,由于现在无法访问它(因为重写),您可以使用
parent::method()
访问它,然后在那里运行代码需要注意的是,有时调用父方法的顺序很重要,例如
您的代码
parent::method()
父::方法()
你的代码
如果父级中存在
您的代码取决于您必须首先调用父级的内容,这似乎是显而易见的。但很容易忽略它,因为代码“位”可能存在于两个单独的文件中。实际上,它只是文档链接的复制和粘贴。甚至连这个例子都是从那里得到的。现在人们不再看文档了(实际上,这只是文档链接的复制和粘贴。甚至示例也取自此。现在人们不再阅读文档了。)(
class A {
    function example() {
        echo "I am A::example() and provide basic functionality.<br />\n";
    }
}

class B extends A {
    function example() {
        echo "I am B::example() and provide additional functionality.<br />\n";
        parent::example();
    }
}

$b = new B;

// This will call B::example(), which will in turn call A::example().
$b->example();