封装
<?php //封装 //目的:为了使一个类更加安全 /*class Ren { public $code;//人员代号 public $name;//人员名称 private $sex;//人员性别 public $age;//人员年龄.2,人员条件年龄必须在18-50岁之间 //构架方法,用来初始化性别 function __construct($s)//传一个性别参数 { $this->sex = $s;//变量接受性别参数 } } //2造对象 $r = new Ren("男"); $r->age = 100;//年龄 var_dump($r);*/ /*//做法: //1.将成员变量变为私有的 //2.在类里面做方法来间接访问成员变量 //3.在方法里面加控制 class Ren { public $code;//人员代号 public $name;//人员名称 public $sex;//人员性别 private $age;//人员年龄.2,人员条件年龄必须在18-50岁之间 //构架方法,用来初始化性别 function __construct($s)//传一个性别参数 { $this->sex = $s;//变量接受性别参数 } //造一个修改年龄的方法 function SetAge($a)//function它在外界可以访问。SetAge名字。($a)给的值 { //加个控制年龄大于18小于50 if($a>18 && $a<50) { $this->age = $a; } } //造一个获取age值的方法 function GetAge() { return $this->age; } } */ //3简单的魔术方法 /*class Ren { public $code;//人员代号 private $name;//人员名称 public $sex;//人员性别 private $age;//人员年龄 //构架方法,用来初始化性别 function __construct($s) { $this->sex = $s; } //用面向对象做 遇到这个类————set魔术方法解决的方案1先看看有没有限制条件,里头的类 //给变量赋值的魔术方法,提到魔术方法都是双下划线打头————set function __set($n,$v)//这个方法里面需要两个参数1变量名称2变量值($name,$value)这是形参必须给2个值 { if($n=="age")//判断变量名age { if($v>18 && $v<50)//age限制条件 { $this->$n = $v;//满足上面条件走这条 } } else//不等于age就是没有限制条件 { $this->$n = $v;//没有限制条件走这条 } } } //2造对象 $r = new Ren("男"); //$r->SetAge(30); //$r->__set("age",30); $r->age = 49;//自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数. //$r->name = "张三";//名称那加private要是没有魔术方法提示汇报错误,有魔术方法就不会错误 var_dump($r);//输出 */ class Ren { public $code;//人员代号 private $name;//人员名称 private $sex;//人员性别 private $age;//人员年龄 //构架方法,用来初始化性别 function __construct($s) { $this->sex = $s; } function __set($n,$v) { if($n=="age") { if($v>18 && $v<50) { $this->$n = $v; } } else { $this->$n = $v; } } //__get魔术方法,用来取变量值的 function __get($n) { return $this->$n; } } //造对象 $r = new Ren("男"); $r->age = 30; //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数 $r->name = "张三"; echo $r->sex;//没有封装的写法调出最上面的男 var_dump($r); ?>
1 //另一个知识点 2 3 class Dog 4 { 5 public $name; 6 function Jiao() 7 { 8 echo $this->name."囧"; //注意 9 } 10 function Setname($n) 11 { 12 $this->name=$n; 13 return $this; //返回新的对象 14 } 15 } 16 $d=new Dog(); 17 $d->Setname("1")->Jiao(); //连续调对象
1 2.继承 2 3 父类 4 子类:可以继承父类的一切 5 重写的关键字override,子类对父类的方法 6 7 特点:单继承:一个子类只能有一个父类,一个父类可以有多 8 例子: 9 10 class Ren 11 { 12 public $name; 13 function Say() 14 { 15 echo $this->name."正在说话"; 16 } 17 18 } 19 class China extends Ren //关键字 extend 20 { 21 //子类对父类的方法进行重写 22 function Say() 23 { 24 parent::Say(); //在子类中调用父类的成员:找父类中的这个方法,把方法中的内容全部拿过来 25 echo "你好"; 26 } 27 } 28 29 $c=new China(); 30 $c->Say(); 31 var_dump($c);
1 子类对父类的方法重写后,父类的方法还有,另外加了一个方法,所以输出时是:正在说话你好 2 3 overlord 重载 4 5 重载:它可以是类中的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑;重载是多态中的一种:编译多态 6 7 8 9 3.多态 10 当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法时表现出的不同,称为多态:运行多态 11 12 条件有4个: 13 1.要有继承 14 2.父类引用指向子类实例 15 3.要有重写 16 4.调重写方法