本文不再贅述面向對象的知識,本文着重說明PHP的構造函數。
php類的構造函數可以是魔術魔方__construct() 也可以是和類同名的函數,實例如下:
class A{
public function A(){
echo 'A is constructing...';
}
}
class B{
public function __construct(){
echo 'B is contructing...';
}
}
$a = new A(); // A is constructing...
$b = new B(); // B is constructing...
此外,在繼承時,應該注意的是:
【子類可以不寫構造函數,那麼使用父類的構造函數】
class A{
protected $name;
public function A(){
echo 'A is constructing...<br>';
}
public function set_name($name){
$this->name = $name;
}
public function get_name(){
return $this->name;
}
}
class B extends A{
/*
public function __construct(){
echo 'B is contructing...<br>';
}
*/
}
//$a = new A();
$b = new B(); // A is constructing...
$b->set_name('zhangsan');
echo $b->get_name();
【子類如果寫了構造函數,那麼不會再調用父類的構造函數了】
class A{
protected $name;
public function A(){
echo 'A is constructing...<br>';
}
public function set_name($name){
$this->name = $name;
}
public function get_name(){
return $this->name;
}
}
class B extends A{
public function __construct(){
echo 'B is contructing...<br>';
}
}
//$a = new A();
$b = new B(); // just echo 'B is contructing...'
$b->set_name('zhangsan');
echo $b->get_name(); // zhangsan
【父類的構造函數如果是私有的,可以被繼承,但是子類必須有自己的構造函數,並且明確寫出來】
class A{
protected $name;
private function A(){
echo 'A is constructing...<br>';
}
public function set_name($name){
$this->name = $name;
}
public function get_name(){
return $this->name;
}
}
class B extends A{
public function __construct(){
echo 'B is contructing...<br>';
}
}
//$a = new A();
$b = new B(); // B is contructing...
$b->set_name('zhangsan');
echo $b->get_name(); // zhangsan