PHP - 扩展__construct

2022-08-30 11:57:17

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

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

答案 1

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

class a extends b { 
} 

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

$x = new a();

如果在类 a 中定义了一个方法,则这将覆盖该方法在类 b....它将代替 b 类方法运行__construct()__construct()__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();

答案 2

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

parent::__construct();

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


推荐