1.php的构造函数是 .,PHP构造函数

我通过枚举各种可能,得出结论,类实例化对象时是不是一定执行构造函数的问题根本不重要。下面是我的测试:

一、类中要么不提供构造函数,要么只提供一个构造函数

实例一:没有提供构造函数

class Site{

var $url;

var $title;

function setUrl($par){$this->url = $par;}

function getUrl(){echo $this->url . PHP_EOL;}

function setTitle($par){$this->title = $par;}

function getTitle(){echo $this->title . PHP_EOL;}

}

$runoob = new Site;//也可写成$runoob = new Site();

$runoob->setUrl( 'www.runoob.com' );

$runoob->setTitle( "菜鸟教程" );

$runoob->getUrl();

$runoob->getTitle();

?>

实例二:提供无参构造函数

class Site {

var $url;

var $title;

function __construct(){echo"调用无参构造函数
";}

function setUrl($par){$this->url = $par;}

function getUrl(){echo $this->url . PHP_EOL;}

function setTitle($par){$this->title = $par;}

function getTitle(){echo $this->title . PHP_EOL;}

}

$runoob = new Site;//也可写成$runoob = new Site();

$runoob->setUrl( 'www.runoob.com' );

$runoob->setTitle( "菜鸟教程" );

$runoob->getUrl();

$runoob->getTitle();

?>

实例三:提供有参构造函数

class Site{

var $url;

var $title;

function __construct( $par1, $par2 ){

echo"调用有参构造函数
";

$this->url = $par1;

$this->title = $par2;

}

function setUrl($par){$this->url = $par;}

function getUrl(){echo $this->url . PHP_EOL;}

function setTitle($par){$this->title = $par;}

function getTitle(){echo $this->title . PHP_EOL;}

}

$runoob = new Site('www.runoob.com',"菜鸟教程");

$runoob->getUrl();

$runoob->getTitle();

?>

二、继承父类的构造函数

实例:

class Site{

var $url;

var $title;

function __construct( $par1, $par2 ){

echo"调用有参构造函数
";

$this->url = $par1;

$this->title = $par2;

}

function setUrl($par){$this->url = $par;}

function getUrl(){echo $this->url . PHP_EOL;}

function setTitle($par){$this->title = $par;}

function getTitle(){echo $this->title . PHP_EOL;}

}

class B extends Site{}

$runoob = new B('www.runoob.com',"菜鸟教程");

$runoob->getUrl();

$runoob->getTitle();

?>

三、重写父类的构造函数

实例一:没有执行父类的构造函数

class Site{

var $url="null";

var $title="空的";

function __construct( $par1, $par2 ){

echo"调用有参构造函数
";

$this->url = $par1;

$this->title = $par2;

}

function setUrl($par){$this->url = $par;}

function getUrl(){echo $this->url . PHP_EOL;}

function setTitle($par){$this->title = $par;}

function getTitle(){echo $this->title . PHP_EOL;}

}

class B extends Site{

function __construct($par1, $par2){

echo "B::构造函数
";

}

}

$runoob = new B('www.runoob.com',"菜鸟教程");

$runoob->getUrl();

$runoob->getTitle();

?>

实例二:执行父类的构造函数

class Site{

var $url="null";

var $title="空的";

function __construct( $par1, $par2 ){

echo"调用有参构造函数
";

$this->url = $par1;

$this->title = $par2;

}

function setUrl($par){$this->url = $par;}

function getUrl(){echo $this->url . PHP_EOL;}

function setTitle($par){$this->title = $par;}

function getTitle(){echo $this->title . PHP_EOL;}

}

class B extends Site{

function __construct($par1, $par2){

parent::__construct( $par1, $par2 );

echo "B::构造函数
";

}

}

$runoob = new B('www.runoob.com',"菜鸟教程");

$runoob->getUrl();

$runoob->getTitle();

?>

实例三:执行父类的构造函数

class Site{

var $url="null";

var $title="空的";

function __construct( $par1, $par2 ){

echo"调用有参构造函数
";

$this->url = $par1;

$this->title = $par2;

}

function setUrl($par){$this->url = $par;}

function getUrl(){echo $this->url . PHP_EOL;}

function setTitle($par){$this->title = $par;}

function getTitle(){echo $this->title . PHP_EOL;}

}

class B extends Site{

function __construct($par1, $par2){

Site::__construct( $par1, $par2 );

echo "B::构造函数
";

}

}

$runoob = new B('www.runoob.com',"菜鸟教程");

$runoob->getUrl();

$runoob->getTitle();

?>

四、构造函数访问权限

实例一:

class A{

function __construct(){echo "correct ";}

}

new A;

?>

实例二:

class A{

public function __construct(){echo "correct ";}

}

new A;

?>

实例三:

class A{

protected function __construct(){echo "correct ";}

}

//new A;//error

?>

实例四:

class A{

//private function __construct(){echo "correct ";}//error

}

new A;

?>

实例五:

class A{

protected function __construct(){echo "correct ";}

}

class B extends A{

function __construct(){

A::__construct();

parent::__construct();

}

}

new B;

?>

注:将protected删除或改为public都一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值