【问题标题】:PHP - extended __constructPHP - 扩展的 __construct
【发布时间】:2011-03-29 11:30:50
【问题描述】:

我想知道你能不能帮帮我..

我有两个类,一个扩展另一个.. B 类将由各种不同的对象扩展并用于常见的数据库交互.. 现在我希望 B 类在没有来自 A 类或任何方向的情况下处理其连接和断开连接外部输入..

据我了解的问题是扩展类不会自动运行其 __construct 函数。有没有办法解决这个问题?

提前谢谢..

class a extends b
{
   public function __construct()
   {
   }   

   public function validateStuff()
   {
      $this->insert_record();
   }
}

class b
{
   public function __construct()
   {
      $this->connect();
   }

   protected function connect()
   {
      return true;
   }

   public function insert_record()
   {
      return true;
   }
}

【问题讨论】:

    标签: php class constructor extends


    【解决方案1】:

    我不确定我是否完全理解你在问什么,但你可以从孩子的构造函数中调用父母的构造方法

    parent::__construct();
    

    这是我所知道的唯一选择。

    【讨论】:

    • 我根本不想从a类调用构造函数。我希望找到一种方法来应用b类的构造函数来自动运行。
    【解决方案2】:

    a::__construct() 中致电parent::__construct()

    class a extends b
    {
       public function __construct()
       {
           parent::__construct();
       }   
    
       public function validateStuff()
       {
          $this->insert_record();
       }
    }
    

    如果你不做任何特定于 a 的东西,你可以完全省略 a 的构造函数。

    【讨论】:

    • 我根本不想从a类调用构造函数。我希望找到一种方法来应用b类的构造函数来自动运行..
    • 啊,这就是答案.. 通过将构造函数排除在 A 类之外,B 类运行了!谢谢!
    【解决方案3】:

    如果您实例化子类a,则在b类中定义的父__construct()方法将自动运行,除非在a类中定义了__construct()方法。

    class a extends b { 
    } 
    
    class b { 
       public function __construct() 
       { 
          echo 'In B Constructor'; 
       } 
    } 
    
    $x = new a();
    

    如果在 a 类中定义了 __construct() 方法,那么这将覆盖 b 类中 __construct() 方法的使用......它将运行 而不是 b 类 @987654326 @方法

    class a extends b { 
       public function __construct() 
       { 
          echo 'In A Constructor'; 
       } 
    } 
    
    class b { 
       public function __construct() 
       { 
          echo 'In B Constructor'; 
       } 
    } 
    
    $x = new a();
    

    因此,如果您的子类定义了 __construct() 方法,那么如果您也想执行该方法,则需要显式调用父类的构造函数。

    class a extends b { 
       public function __construct() 
       { 
          parent::__construct();
          echo 'In A Constructor'; 
       } 
    } 
    
    class b { 
       public function __construct() 
       { 
          echo 'In B Constructor'; 
       } 
    } 
    
    $x = new a();
    

    【讨论】:

    • 谢谢 :) - stackoverflow 非常擅长拥有和查找相关信息,您可以沉迷于诸如“就像,我知道这一点,但我只是想确保我没有遇到小 PHP 直觉怪癖某处” - 谢谢哈哈!
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2011-10-08
    • 2011-04-22
    相关资源
    最近更新 更多