<?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.调重写方法