40

我想知道你是否可以帮助我..

我有两个类,一个扩展另一个.. 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;
   }
}
4

3 回答 3

101

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

class a extends b { 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();

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

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();
于 2010-08-13T14:01:34.967 回答
13

我不确定我是否完全理解您的要求,但是您可以从孩子的构造函数中调用父母构造方法

parent::__construct();

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

于 2010-08-13T13:29:04.477 回答
5

来电:parent::__construct()_a::__construct()

class a extends b
{
   public function __construct()
   {
       parent::__construct();
   }   

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

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

于 2010-08-13T13:29:36.100 回答