欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP Cookbook读书笔记 – 第07章类和对象

程序员文章站 2022-05-21 14:00:18
...

虽说在PHP5之前,php就有对面向 对象 编程方面的支持,但对 对象 和类的处理不是那么的理想,直到PHP5通过使用Zend Engine2(ZE2)才使PHP得以包含高级的面向 对象 特性。本章就是介绍PHP5的面向 对象 特性,目前,很多的公司在招聘PHPer时都会提出对这部分

PHP Cookbook读书笔记 – 第07章类和对象虽说在PHP5之前,php就有对面向对象编程方面的支持,但对对象和类的处理不是那么的理想,直到PHP5通过使用Zend Engine2(ZE2)才使PHP得以包含高级的面向对象特性。本章就是介绍PHP5的面向对象特性,目前,很多的公司在招聘PHPer时都会提出对这部分的要求。需要稍微注意一下的地方是本书中文版在new一个对象的时候(Instantiating Objects)翻译为技巧化一个对象,而在博主阅读的资料里都将这一行为描述为“实例化”一个对象

在学习完本章节需要掌握面向对象的3个特性的使用:继承、封装、多态

封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承,实现方式有三类:实现继承、接口继承和可视继承。

  1. 实现继承是指使用基类的属性和方法而无需额外编码的能力;
  2. 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
  3. 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

多态,有二种方式,覆盖,重载。

  1. 覆盖,是指子类重新定义父类的虚函数的做法。
  2. 重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

类里面的几个特殊方法名

__construct:构造器,执行类时首先运行

__destruct:析构器,类结束前运行

__toString:字符串化,这个方法在PHP5早期版本和PHP5.2之后存在差异,使用需注意

public, protected, private :访问控制,分别代表公共、保护、私有

final :方法不可被继承的子类修改或类不可继承

interface:定义一个接口

abstract :定义一个抽象类

clone :复制一个对象的副本

$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( ):在序列号和反序列化一个类时调用,常用来保存一些外部资源的连接等

通过反射获得一个类的信息:

Reflection::export(new ReflectionClass('car'));

ReflectionMethod 和 ReflectionFunction:分别是反射一个类方法和反射一个函数

instanceof :检测一个对象是否是指定类的实例

__autoload:在实例化一个为定义的类时,会执行此方法

function __autoload($class_name) {
    include "$class_name.php";
}

$person = new Person;

很蛋疼的PHP语法规则

//合法
$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