1、什么是构造函数?
构造函数:在创建对象时初始化对象(类), 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
class Boy{
public $age ;
public $height;
public $sex;
}
$boy = new Boy();
$boy->age = 18;
$boy->height = '180';
$boy->sex = '男';
如果变量很多的话,工作量就会很多,所有引入了构造方法。该方法可以无参数,也可以有多个参数。
class Boy{
public $age ;
public $height;
public $sex;
public function __construct($age,$height,$sex){
$this->age = $age;
$this->height= $height;
$this->sex= $sex;
}
public function pelope(){
if($this->age<35 && $this->heighe >180){
echo "体检考核通过";
}else{
echo "考核不通过。";
}
}
}
$pe = new Boy(18,195);
echo $pe->pelope();
体检考核通过
构造方法: (1)构造出来一个类的实例 (2)对构造出来个一个类的实例(对象)初始化。
2、__construct()和_initialize()的区别?
__construct():是PHP内置的函数 __initialize():是php框架自定义的函数(ThinkPHP)。
3、父类和子类__construct()的继承关系
1、子类没有构造行数,继承了父类
class Father{
public function __construct(){
echo "父亲";
}
}
class Son extends Father{
}
$son = new Son();
echo $son;
父亲
2、子类定义了构造函数,则不会被继承父类。
class Father{
public function __construct(){
echo "父亲";
}
}
class Son extends Father{
public function __construct(){
echo "儿子";
}
}
$son = new Son();
echo $son;
儿子
3、子类定义了构造函数,父类定义了构造函数,调用父类的的方法。
class Father{
public function __construct(){
echo "父亲";
}
}
class Son extends Father{
public function __construct(){
parent::__construct();
echo "儿子";
}
}
$son = new Son();
echo $son;
父亲儿子
4、父类和子类__initialize()的继承关系
1、父类自定义构造函数,子类调用了父类的构造函数,而没有调用子类的_initialize()方法
class Father{
public function __construct(){
echo "父亲";
}
}
class Son extends Father{
public function __initialize(){
echo "儿子";
}
}
$son = new Son();
echo $son;
父亲
总结
1、当Thinkphp的父类有构造行数而子类没有时,Thinkphp不会去执行子类的__initialize()。
2、当Thinkphp的父类子类都有构造函数,要调用父类的构造函数,子类必须使用 parent::__construct();__initialize()也同理一样。
3、当Thinkphp的子类存在__construct()构造函数和__initialize(),只会执行子类的__construct()构造函数。
|