构造函数
void __construct ([ mixed $args [, $... ]] )
- 构造函数可以接受参数,能够在创建对象时赋值给对象属性
- 构造函数可以调用类方法或其他函数
- 构造函数可以调用其他类的构造函数
PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
Note:
如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。
如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。
构造函数特点:
①类的构造方法函数,它是一个魔法方法
②自动的被调用
③它可以不用声明,相当于默认隐含一个没有任何执行语句的构造函数
④它会自动返回一个当前类的对象
⑤一个类中有且只有一个构造函数 (可以是无参构造函数或是有参构造函数,但只能是有且只有一个构造函数)
⑥构造函数可以带参数,这些参数通常是用来给类的属性进行初始化赋值
⑦构造函数可以被其他方法显示调用
1、当实例化子类度对象时,那么将调用子类自己的构造
2、实例化子类对象,而且知子类没有构道造,那么将调用父类回的构造
3、实例化子类对象,但子父类都没构造,那么将什么也不答执行
如想与java一样 在php某类中定义一个无参,一个有参的构造函数。结果运行时报错了。
因为PHP不能像Java一样, 在一个类里面有同名不同参数的函数,即php 没有重载。
//如下示例非php类中定义多个构造函数,
//构造函数名必须是__construct,而后面的三个函数都不是的,
//可以借用此方法实例化不同的实例对象
class A
{
function __construct()
{
$a = func_get_args();
$i = func_num_args();
if (method_exists($this,$f='__construct'.$i)) {
call_user_func_array(array($this,$f),$a);
}
}
function __construct1($a1)
{
echo('__construct with 1 param called: '.$a1.PHP_EOL);
}
function __construct2($a1,$a2)
{
echo('__construct with 2 params called: '.$a1.','.$a2.PHP_EOL);
}
function __construct3($a1,$a2,$a3)
{
echo('__construct with 3 params called: '.$a1.','.$a2.','.$a3.PHP_EOL);
}
}
$o = new A('sheep');
$o = new A('sheep','cat');
$o = new A('sheep','cat','dog');