PHP基础(010)---类的特性和经典类库
OOP : 面向对象
OOA : 面向对象分析
OOD : 面向对象设计
PHP类的特性:
- 类中的成员/静态类成员
- 访问成员变量 【示例 : “对象名->成员变量”】
- 访问成员方法 【示例:“对象名->成员方法”】
- 调用静态变量 【示例 : ”关键字:: 静态成员 , 关键字如self ; 或用 "类名 :: 静态变量" (不用实例化类)】
- 实例化类 ---【关键字 new】
- 类中的方法
- 构造方法 【function __construct(), 双” _ “ 线】 ---初始化变量
- 析构方法 【function __destruct()】 ---锁毁对象
- 方法的参数/ 方法的返回值
- 类的封装/访问修饰符 : public/private/protected/static/final(为final的类不可以再被继承,也不能再有子类。)
- $this关键字 :调用本类中的成员变量或方法
- 类的继承extends/子类继承父类
- 多态/重写父类中的成员属性
- 访问静态类成员(self::parent::)
- 类常量
- 关键字:const
- 调用常量 :【示例 : “类名 :: 常量名”】; 补充关于操作符【 :: 】使用 : “关键字(parent,self) :: 变量名/常量名/方法名"
- 略...
类的高级特性:
- 类对象的克隆(clone)
- 类接口(interface)/ 实现接口(implements)
- 抽象类与抽象方法abstract
- 对象比较(用"=="表示对象的内容;用"===“表示比较对象的引用地址)
- 对象的类型检测(instanceof)
- 魔术方法
- __get()和__set() ---为私有的变量提供访问途径
- __sleep()和__wakeup()
- __toString() ---作用是当使用echo或print输出对象时,将对象转化为字符串。
- __autoload() ---自动加载类
- 类的异常 try...catch...finally...
类库:
-
图表库
-
pChart - 一个可以创建统计图的库。
-
Libchart - 这也是一个简单的统计图库。
-
JpGraph - 一个面向对象的图片创建类。
-
Open Flash Chart - 这是一个基于Flash的统计图。
-
-
RSS 解析
-
缩略图生成
- phpThumb - 功能很强大,如何强大还是自己去体会吧
-
支付
-
PHP Payment Library - 支持Paypal, Authorize.net 和2Checkout (2CO)
-
-
OpenID
-
PHP-OpenID - 支持OpenID的一个PHP库。OpenID是帮助你使用相同的用户名和口令登录不同的网站的一种解决方案。如果你对OpenID不熟悉的话,你可以到这里看看:http://openid.net.cn/
-
-
数据为抽象/对象关系映射ORM
-
PDF 生成器
-
FPDF - 这量一个可以让你生成PDF的纯PHP类库。
-
-
Excel 相关
-
php-excel - 这是一个非常简单的Excel文件生成类。
-
PHP Excel Reader - 可以解析并读取XLS文件中的数据。
-
-
E-Mail 相关
-
Swift Mailer - 免费的超多功能的PHP邮件库。
-
PHPMailer - 超强大的邮件发送类。
-
-
单元测试
-
SimpleTest - 一个PHP的单元测试和网页测试的框架。
-
PHPUnit - 来自xUnit 家族,提供一个框架可以让你方便地进行单元测试的案例开发。并可非常容易地分析其测试结果。
-
补充=》
在学习完本章节需要掌握面向对象的3个特性的使用:继承、封装、多态。
封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承,实现方式有三类:实现继承、接口继承和可视继承。
- 实现继承是指使用基类的属性和方法而无需额外编码的能力;
- 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
- 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
多态,有二种方式,覆盖,重载。
- 覆盖,是指子类重新定义父类的虚函数的做法。
- 重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
类里面的几个特殊方法名
__construct:构造器,执行类时首先运行
__destruct:析构器,类结束前运行
__toString:字符串化,这个方法在PHP5早期版本和PHP5.2之后存在差异,使用需注意
public, protected, private :访问控制,分别代表公共、保护、私有
final :方法不可被继承的子类修改或类不可继承
interface:定义一个接口
abstract :定义一个抽象类
clone :复制一个对象的副本
1
2
3
4
5
|
$adam = new user; //两个变量指向的是一个对象 $dave = $adam ; //指向的是两个不同搜对象 $john = clone $adam ; |
__get($property)和__set($property, $value):属性访问
__isset( ) 和 __unset( ) :判断是否设置或是否销毁,只对PHP5.1之后版本有效
__call($method, $arguments):简单点说就是在调用类中未定义的方法时就调用这个
parent::方法名():在子类中调用父类的方法
const :定义类常量,通过[类名]::[常量名]来调用
static:定义静态方法或属性,有.NET变成经验的同学需要注意,PHP中的静态方法只在本次请求过程中有效而不是像.NET中的静态方法一次调用后会长期驻留内存。
__sleep( ) 和 __wakeUp( ):在序列号和反序列化一个类时调用,常用来保存一些外部资源的连接等
通过反射获得一个类的信息:
1
|
Reflection::export( new ReflectionClass( 'car' )); |
ReflectionMethod 和 ReflectionFunction:分别是反射一个类方法和反射一个函数
instanceof :检测一个对象是否是指定类的实例
__autoload:在实例化一个为定义的类时,会执行此方法
1
2
3
4
5
|
function __autoload( $class_name ) { include "$class_name.php" ; } $person = new Person; |
很蛋疼的PHP语法规则
1
2
3
4
5
6
7
8
9
10
11
12
|
//合法 $class_name = 'Net_Ping' ; $class = new $class_name ; // new Net_Ping //下面的非法 $partial_class_name = 'Ping' ; $class = new "Net_$partial_class_name" ; // new Net_Ping //合法 $partial_class_name = 'Ping' ; $class_prefix = 'Net_' ; $class_name = "$class_prefix$partial_class_name" ; $class = new $class_name ; // new Net_Ping |