面向工具是一种打算机编程架构,比面向过程编辑具有更强的灵巧性和扩展性。这里想提醒一下初学者:要想在编程这条路上走得比别人远,就一定要节制面向工具编程技能。
public 公有的:本类,子类,外部工具都可以调用
protected 受保护的:本类 子类,可以实行,外部工具不可以调用
private 私有的:只能本类实行,子类与外部工具都不可调用
面向工具编程的三大特点
1)封闭性
封闭性,也可以称为信息隐蔽。便是将一个类的利用和实现分开,只保留有限的接口(方法)与外部联系。对付用到该类的开拓职员,只要知道这个类如何利用即可,而不用去关心这个类是如何实现的。这样做可以让开发职员更好地把精力集中起来专注别的事情,同时也避免了程序之间的相互依赖而带来的不便。
2)继续性
继续性便是派生类(子类)自动继续一个或多个基类(父类)中的属性与方法,并可以重写或添加新的属性和方法。继续这个特性简化了工具和类的创建,增加了代码的可重性。继续分单继续和多继续,PHP所支持的是单继续,也便是说,一个子类有且只有一个父类。
3)多态性
多态性是指同一个类的不同工具,利用同一个方法可以得到不同的结果,这种技能称为多态性。多态性增强了软件的灵巧性和重用性。
类的定义
一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。
和很多面向工具的措辞一样,PHP也是通过class关键字加类名来定义类的。类的格式如下:
复制代码代码如下:
1
2
3
4
5
<?php
Class myobject{
//……
}
?>
定义:物以类聚,把具有相似特性的工具归到一个类中,类定义了这些相似工具拥有的相同属性和方法。类是相似工具的描述,称为类的定义,是该类工具的蓝图或原型。
类的工具称为类的一个实例。要创建一个类的实例,必须利用 new 关键字。
001ZpQGYty6MeYnSNUh25&690
复制代码代码如下:
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
<?php
//类的定义以关键字class开始,类的命名常日以每个单词第一个字母大写
classNbaPlayer{
public$name=\公众Jordan\公众;//定义属性
public$height=\"大众198cm\公众;
public$team=\公众Bull\"大众;
public$playerNumber=\"大众23\"大众;
//定义方法
publicfunctionrun(){
echo\公众Running\n\公众;
}
publicfunctiondribblr(){
echo\"大众Dribbling\n\公众;
}
publicfunctionpass(){
echo\"大众Passing\n\"大众;
}
}
//类到工具的实例化
//类的实例化为工具时利用关键字new,new之后紧跟类的名称和一对括号
$jordan=newNbaPlayer();
//工具中的属性成员可以通过\公众->\公众符号来访问
echo$jordan->name.\"大众\n\"大众;
//工具中的成员方法可以通过\"大众->\"大众符号来访问
$jordan->dribble();
$jordan->run();
?>
成员方法
类中的函数被称为成员方法。函数和成员方法唯一的差异便是,函数实现的是某个独立的功能,而成员方法是实现类中的一个行为,是类的一部分。
下面就来扩充上面的myobject类,为它添加一个成员方法,代码如下:
复制代码代码如下:
1
2
3
4
5
6
7
<?php
classmyobject{
functiongetobjectname($name){
echo\公众商品名称为:\公众.$name;
}
}
?>
该方法的浸染是输出商品名称,商品名称是通过方法的参数传进来的。
类是一个抽象的描述,是功能相似的一组工具的凑集。如果想用到类中的方法和变量,首先就要把它详细落实到一个实体,也便是工具上。
类常量
既然有变量,当然也会有常量了。常量便是不会改变的量,是一个恒值。众所周知的一个常量便是圆周率Pi。定义常量利用关键字const如:
ConstPI=3.14159;
布局函数
PHP 5 允行开拓者在一个类中定义一个方法作为布局函数。具有布局函数的类会在每次创建新工具时先调用此方法,以是非常适宜在利用工具之前做一些初始化事情。
复制代码代码如下:
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
<?php
//类的定义以关键字class开始,类的命名常日以每个单词第一个字母大写
classNbaPlayer{
public$name=\公众Jordan\公众;//定义属性
public$height=\公众198cm\"大众;
public$team=\"大众Bull\公众;
public$playerNumber=\"大众23\"大众;
//布局函数,在工具被实例化的时候自动调用
function__construct($name,$height,$weight,$team){
echo\公众It is an NbaPlayer constructor\n\"大众;
$this->name =$name;
//$this是PHP里面的伪变量,表示工具自身。可以通过$this->的办法访问工具的属性和方法
$this->height =$height;
$this->weight =$weight;
$this->team =$team;
}
//定义方法
publicfunctionrun(){
echo\"大众Running\n\"大众;
}
publicfunctiondribblr(){
echo\"大众Dribbling\n\"大众;
}
publicfunctionpass(){
echo\"大众Passing\n\"大众;
}
}
//类到工具的实例化
//类的实例化为工具时利用关键字new,new之后紧跟类的名称和一对括号
$jordan=newNbaPlayer(\公众Jordan\"大众,\公众198cm\公众,\"大众98kg\"大众,\"大众Bull\"大众);
//工具中的属性成员可以通过\"大众->\公众符号来访问
echo$jordan->name.\"大众\n\"大众;
//工具中的成员方法可以通过\公众->\"大众符号来访问
$jordan->dribble();
$jordan->run();
//每一次用new实例化工具的时候,都会用类名后面的参数列表调用布局函数
$james=newNbaPlayer(\"大众James\"大众,\公众203cm\"大众,\"大众120kg\"大众,\公众Heat\公众)
echo$james->name.\"大众\n\"大众;
?>
析构函数
复制代码代码如下:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
//类的定义以关键字class开始,类的命名常日以每个单词第一个字母大写
classNbaPlayer{
public$name=\"大众Jordan\"大众;//定义属性
public$height=\"大众198cm\"大众;
public$team=\"大众Bull\"大众;
public$playerNumber=\"大众23\"大众;
//布局函数,在工具被实例化的时候自动调用
function__construct($name,$height,$weight,$team){
echo\"大众It is an NbaPlayer constructor\n\"大众;
$this->name =$name;
//$this是PHP里面的伪变量,表示工具自身。可以通过$this->的办法访问工具的属性和方法
$this->height =$height;
$this->weight =$weight;
$this->team =$team;
}
//析构函数,在程序实行结束的时候会自动调用
//析构函数常日被用于清理程序利用的资源。比如程序利用了打印机,那么可以再析构函数里面开释打印机资源
function__destruct(){
echo\"大众Destroying\"大众.$this->name.\公众\n\公众;
}
//定义方法
publicfunctionrun(){
echo\"大众Running\n\"大众;
}
publicfunctiondribblr(){
echo\"大众Dribbling\n\"大众;
}
publicfunctionpass(){
echo\"大众Passing\n\"大众;
}
}
//类到工具的实例化
//类的实例化为工具时利用关键字new,new之后紧跟类的名称和一对括号
$jordan=newNbaPlayer(\"大众Jordan\公众,\"大众198cm\公众,\"大众98kg\公众,\"大众Bull\公众);
//工具中的属性成员可以通过\"大众->\公众符号来访问
echo$jordan->name.\公众\n\"大众;
//工具中的成员方法可以通过\"大众->\"大众符号来访问
$jordan->dribble();
$jordan->run();
//每一次用new实例化工具的时候,都会用类名后面的参数列表调用布局函数
$james=newNbaPlayer(\"大众James\"大众,\"大众203cm\"大众,\"大众120kg\"大众,\"大众Heat\"大众)
echo$james->name.\"大众\n\"大众;
//通过把变量设为null,可以触发析构函数的调用
//当工具不再利用的时候会触发析构函数
$james= null;
echo\公众from now on James will not be used.\n\公众
?>
析构函数会在到某个工具的所有引用都被删除或者当工具被显式销毁时实行。
工具的引用
复制代码代码如下:
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
43
44
45
46
47
48
49
50
51
<?php
//类的定义以关键字class开始,类的命名常日以每个单词第一个字母大写
classNbaPlayer{
public$name=\公众Jordan\"大众;//定义属性
public$height=\公众198cm\"大众;
public$team=\公众Bull\"大众;
public$playerNumber=\"大众23\"大众;
//布局函数,在工具被实例化的时候自动调用
function__construct($name,$height,$weight,$team){
echo\"大众It is an NbaPlayer constructor\n\"大众;
$this->name =$name;
//$this是PHP里面的伪变量,表示工具自身。可以通过$this->的办法访问工具的属性和方法
$this->height =$height;
$this->weight =$weight;
$this->team =$team;
}
//析构函数,在程序实行结束的时候会自动调用
//析构函数常日被用于清理程序利用的资源。比如程序利用了打印机,那么可以再析构函数里面开释打印机资源
function__destruct(){
echo\"大众Destroying\"大众.$this->name.\公众\n\"大众;
}
//定义方法
publicfunctionrun(){
echo\"大众Running\n\"大众;
}
publicfunctiondribblr(){
echo\"大众Dribbling\n\"大众;
}
publicfunctionpass(){
echo\"大众Passing\n\"大众;
}
}
//类到工具的实例化
//类的实例化为工具时利用关键字new,new之后紧跟类的名称和一对括号
$jordan=newNbaPlayer(\公众Jordan\"大众,\公众198cm\"大众,\"大众98kg\"大众,\公众Bull\"大众);
//工具中的属性成员可以通过\"大众->\公众符号来访问
echo$jordan->name.\"大众\n\"大众;
//工具中的成员方法可以通过\"大众->\"大众符号来访问
$jordan->dribble();
$jordan->run();
//每一次用new实例化工具的时候,都会用类名后面的参数列表调用布局函数
$james=newNbaPlayer(\"大众James\公众,\"大众203cm\公众,\"大众120kg\"大众,\"大众Heat\"大众)
echo$james->name.\"大众\n\"大众;
//工具的引用用于访问工具的属性和方法,$james,$james1和$james2都是工具的引用
//$james和$james1是工具的两个独立引用
//$james2是$james的影子,利用工具的同一个引用,任何一个赋值为null相称于删除了同一个引用
$james1=$james;
$james2= &$james
$james= null;
echo\"大众from now on James will not be used.\n\"大众
?>