构造函数 __construct()
<?php
header('Content-type:text/html;charset=utf-8');
class Human
{
public $name = "lisi";
public $gender = "male";
}
$a = new Human();
$b = new Human();
$c = new Human();
echo "{$a->name}","<br/>";
echo "{$b->name}","<br/>";
echo "{$c->name}","<br/>";
echo "{$a->gender}","<br/>";
echo "{$b->gender}","<br/>";
echo "{$c->gender}","<br/>";
?>
在上面的例子中,体现出类是模板,对象根据模板造出来的实例
但是,模板是固定的
因此,导致造出来的对象,属性值都一样,
这显然与现实生活的逻辑不符
比如:新生儿
性别,姓名,体重,这些都不一样。
同一个模板,不同的实例,这就是一对矛盾?
答:
想一下:为什么新生儿有的是男,有的是女?
答:因为,染色体不一样,
x,y->男
x,x->女
造对象时,传x染色体,还是y染色体,都有可能
这就说明创建对象时,可以传参
在类中,有一个构造函数,
就是用来初始化对象用的,
利用构造函数,你有机会操作对象,并改变他的值
构造函数 __construct() 的作用时机
每当new一个对象,就会自动自动更新new出来的对象,发挥作用。
new ClassName($args), $args参数自动传给构造方法;然后构造方法,用参数来影响新创建的对象。
当然: new className()时也可以不传参
但注意:$args要与构造方法里的参数一致。
不一致,也可以,给__construct()参数设置默认值
<?php
class Human
{
function __construct($name="lisi",$gender="male")
{
$this->name = $name;
$this->gender = $gender;
}
public $name = null;
public $gender = null;
}
$a = new Human("lisi","male");
$b = new Human("iwen","male");
$c = new Human("ime","female");
$d = new Human();
echo "{$a->name}<br/>";//lisi
echo "{$b->name}<br/>";//iwen
echo "{$c->name}<br/>";//ime
echo "{$d->name}<br/>";//lisi
?>