2012-02-24 117 views
0

一个简单的问题,下面是否有意义?PHP超类和子类

类B扩展A类

类的构造函数:

function __construct(){ 
    //do something 
} 

B类的构造函数:

function __construct(){ 
    parent::__construct(); 
} 

是否有显著优势可言在落实儿童的构造函数这个案例?

我只能想:

  • B类的整个代码会在结构上更加“完整”

很想知道是否有在编码任何显著的优势或在构建等

+1

如果你的类'A'有100个已定义的方法,你想在你的类'B'中使用,你是否在类'B'中重新实现它们全部......? :) – deceze 2012-02-24 09:14:31

+1

我认为这是一个味道的问题。对我来说这没有意义。为了保持一致性,您必须为每种方法执行此操作。 – 2012-02-24 09:14:40

+1

在这种情况下,您不需要类b中的构造函数,因为类a的构造函数是自动使用的。但是如果你需要在类b中做一些特殊的事情,你需要调用父类来获得类a的构造器。 – Rufinus 2012-02-24 09:19:25

回答

4

您想要从您的子类(子类)调用父构造函数的唯一时间是您想在构造函数中添加自定义代码的时间。

在您的例子,你可以在B级完全离开了__construct()方法

然而,你可能想要做这样的事情:

class A { 

    function __construct() { 
    run_a_function(); 
    $this->set = "a variable"; 
    } 

} 

class B { 

    function __construct() { 
    run_a_function_specific_to_class_b(); 
    $this->set = "a variable specific to class b"; 

    // now call the parent constructor 
    parent::__construct(); 
    } 

} 
0

号如果你的所有构造函数(或任何为此事方法)所做的就是调用同一个名字的parent方法,那么就没有广告无论如何。只是更多的代码行。

0

局部构造覆盖其父:

<?php 
class Blog extends CI_Controller { 

     public function __construct() 
     { 
      parent::__construct(); 
      // Your own constructor code 
     } 
} 
?> 

如果在子类中有__construct()方法,则必须明确调用父构造函数。

如果您不希望在子构造函数中运行任何内容,请不要在子项中指定构造函数方法,并且会自动调用父构造函数。