1.封装 ****
目的:为了使一个类更加安全
做法: ****
1.将成员变量变为私有的
2.再类中做方法来间接访问成员变量
3.在方法中加入控制条件
//一个成员变量还是可以的,但是不适用于多个成员变量(即可写也可读)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
class
Ren
{
public
$code
;
//人员代号
public
$name
;
//人员姓名
private
$sex
;
//人员性别
private
$age
;
//人员年龄
//构造函数:用来初始化性别
function
__construct(
$s
)
{
$this
->sex=
$s
;
}
//造一个修改年龄的方法 写
function
SetAge(
$a
)
{
if
(
$a
>18 &&
$a
<50)
//条件满足才往下进行
{
$this
->age=
$a
;
}
}
//造一个获取age值得方法 读
function
GetAge()
{
return
$this
->age;
}
}
//造对象
$r
=
new
Ren(
"男"
);
$r
->SetAge(60); /条件是18-50之间的年龄,60超出了,所以显示的null<br>var_dump(
$r
);
|
//对于多个变量就可以使用下面的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
class
Ren
{
public
$code
;
//人员代号
public
$name
;
//人员姓名
private
$sex
;
//人员性别
private
$age
;
//人员年龄
//构造函数:用来初始化性别
function
__construct(
$s
)
{
$this
->sex=
$s
;
}
//__set()魔术方法,给变量赋值
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=70;
//自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数
$r
->name=
"zha"
;
//自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数
echo
$r
->sex;
//自动调用__get()方法<br>var_dump($r);
|
//另一个知识点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class
Dog
{
public
$name
;
function
Jiao()
{
echo
$this
->name.
"囧"
;
//注意
}
function
Setname(
$n
)
{
$this
->name=
$n
;
return
$this
;
//返回新的对象
}
}
$d
=
new
Dog();
$d
->Setname(
"1"
)->Jiao();
//连续调对象
|
2.继承
父类
子类:可以继承父类的一切
重写的关键字override,子类对父类的方法
特点:单继承:一个子类只能有一个父类,一个父类可以有多
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class
Ren
{
public
$name
;
function
Say()
{
echo
$this
->name.
"正在说话"
;
}
}
class
China
extends
Ren
//关键字 extend
{
//子类对父类的方法进行重写
function
Say()
{
parent::Say();
//在子类中调用父类的成员:找父类中的这个方法,把方法中的内容全部拿过来
echo
"你好"
;
}
}
$c
=
new
China();
$c
->Say();
var_dump(
$c
);
|
子类对父类的方法重写后,父类的方法还有,另外加了一个方法,所以输出时是:正在说话你好
overlord 重载
重载:它可以是类中的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑;重载是多态中的一种:编译多态
3.多态
当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法时表现出的不同,称为多态:运行多态
条件有4个:
1.要有继承
2.父类引用指向子类实例
3.要有重写
4.调重写方法