PHP 面向对象技术(全面讲解)

Ø 主要内容

v 1.面向对象的概念

v 2.什么是类,什么是对象,类和对象之间的关系

v 3.什么是面向对象编程呢?

v 4.如何抽象出一个类?

v 5.如何实例化对象?

v 6.如何去使用对象中的成员?

v 7.特殊的引用“$this”的使用

v 8.构造方法与析构方法

v 9.封装性

v 10.__set()、__get()、__isset()、__unset()四个方法的应用

v 11.类的继承

v 12.多态的应用

v 13.重载新的方法

v 14.访问类型

v 15.静态成员的使用

v 16.final 关键字的应用

v 17.__toString()方法

v 18.克隆对象

v 19.__call 处理调用错误

v 20.自动加载类

v 21.把对象串行化

v 22.抽象方法和抽象类

v 23.php5 接口技术

Ø 内容笔记

面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三个目标:重用性、灵活性和扩展性。

类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。

对象概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。

关系:类的实例化结果就是对象,而对一类对象的抽象就是类。

类的定义:

class 类名{

}

成员从定义的角度分两部分,一是从静态上描述,二是从动态上描述。

class 人{

成员属性:姓名、性别、年龄、身高、体重、电话、家庭住址

成员方法:可以开车, 会说英语, 可以使用电脑

}

使用new 关键字生成一个对象。

$对象名称= new 类名称();

内存大体上分为4 段,栈空间段、堆空间段、代码段、初始化静态段。

使用一个特殊的操作符“->”来完成对象成员的访问:

对象->属性 $p1->name;  $p2->age;  $p3->sex;

对象->方法 $p1->say();  $p2->run();

提供了一个本对象的引用$this,$this 就是对象内部代表这个对象的引用。

在对象内部和调用本对象的成员和对象外部调用对象的成员所使用的方式是一样的

$this->属性 $this->name;  $this->age;  $this->sex;

$this->方法 $this->say();  $this->run();

构造函数:当创建一个对象时,使用new 关键字来实例化对象的时候自动调用的方法。

格式:function __construct ( [参数] ) { ... ... }

析构函数:允许在销毁一个类之前执行的一些操作或完成一些功能。

格式:function __destruct ( ) { ... ... }

封装性是面向对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。

包含两个含义:

1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位。

2. 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系。

使用private 这个关键字来对属性和方法进行封装。

私有的成员是不能被外部访问的,因为私有成员只能在本对象内部自己访问。

注:总是把类的属性定义为private,这更符合现实的逻辑

继承作为面向对象的三个重要特性的一个方面,继承性是子类自动共享父类的数据结构和方法的机制,这是类之间的一种关系。

类的继承性使所建立的软件具有开放性、可扩充性。

类通过使用“extends”关键字把父类里的所有成员属性和成员方法都继承过来。

重载新的方法就是子类覆盖父类的已有的方法。

子类方法中调用父类被覆盖的方式:

一种是使用父类的“类名::”来调用父类中被覆盖的方法;

一种是使用“parent::”的方试来调用父类中被覆盖的方法;

类型的访问修饰符允许开发人员对类成员的访问进行限制,支持如下访问修饰符:

public(公有的、默认的),private(私有的)和protected(受保护的)三种。

final这个关键字只能用来定义类和定义方法,不能使用final这个关键字来定义成员属性,因为final是常量的意思,所以不能使用final 来定义成员属性。

使用final 关键标记的类不能被继承。

Static 关键字是在类中描述成员属性和成员方法是静态的。

static 成员能够限制外部的访问,因为static 的成员是属于类的,是不属于对象实例。

在类的外部不需要对象而使用类名就可以访问的到静态的成员; 类名::成员属性

类里面的静态方法只能访问类的静态的属性.

在静态方法中访其它静态成员我们使用的是一个特殊的类“self”.

self 和$this 相似,只不过self 是代表这个静态方法所在的类。 self::成员属性

在非静态方法里也可以访问静态成员,但是也不能使用“$this”引用,而要使用类名或是“self::成员属性的形式”。

const 是一个定义类常量的关键字,用“const”修饰的成员属性的访问方式和“static”修饰的成员访问的方式差不多,也是使用“类名”,在方法里面使用“self”关键字。但是不用使用“$”符号,也不能使用对象来访问。

__toString()方法 是在直接输出对象引用时自动调用的。

__clone()方法,是在对象克隆时自动调用的方法,__clone()方法可以没有参数,它自动包含$this 指针,$this 指向复本。

__call()对象调用对象内部方法时候,调用的这个方法不存在时程序自动调用的方法。

在OOP 语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口。

在类里面定义的没有方法体的方法就是抽象方法,所谓的没有方法体指的是,在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰。

一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类,抽象类也要使用“abstract”关键字来修饰。

抽象类不能产生实例对象,所以也不能直接使用,子类必须把父类中的抽象方法全部都实现后才可以使用。

接口的思想是指定了一个实现了该接口的类必须实现的一系列方法。接口是一种特殊的抽象类,抽象类又是一种特殊的类,所以接口也是一种特殊的类。

抽象类里面的所有的方法都是抽象方法,就称盖类为“接口”;也就是说接口里面所有的方法必须都是声明为抽象方法,另外接口里面不能声明变量,而且接口里面所有的成员都是public 权限的。所以子类在实现的时候也一定要使用public 权限实限(子类权限大于等于父类属性的权限)。

使用的关键字是“interface”来申明一个接口。

类的定义:class 类名{ … }, 接口的声明:interface 接口名{ … }

可以使用“extends”关键字让一个接口去继承另一个接口;

可以使用“implements”关键字让接口的子类去实现接口中全部抽象方法。

PHP 是单继承的,一个类只能有一父类,但是一个类可以实现多个接口;

也可以在继承一个类的同时实现多个接口, 一定要先继承类再去实现接口;

多态是除封装和继承之外的另一个面向对象的特性之一,PHP 中虽然可以实现多态,但和其他面向对象的语言相比,多态性并不是那么突出,因为PHP 本身就是一种弱类型的语言,不存在父类对象转化为子类对象或者是子类对象转化为父类对象的问题,所以多态的应用并不是那么的明显;

所谓多态性是指一段程序能够处理多种类型对象的能力。

有两种情况我们必须把对象串行化

第一种情况就是把一个对象在网络中传输的时候要将对象串行化;

第二种情况就是把对象写入文件或是数据库的时候用到串行化。

串行化有两个过程,一个是串行化,就是把对象转化为二进制的字符串,我们使用serialize()函数来串行化一个对象,另一个是反串行化,就是把对象转化的二进制字符串再转化为对象, 我们使用unserialize()函数来反串行化一个对象.

在对象串行化的时候,会调用一个__sleep()方法来完成一些睡前的事情;而在重新醒来,即由二进制串重新组成一个对象的时候,则会自动调用PHP 的另一个函数__wakeup(),做一些对象醒来就要做的动作。

很多开发者写面向对象的应用程序时,对每个类的定义建立一个PHP 源文件代码。

function __autoload($classname){  // 自动加载类文件

require_once $classname . '.php';

}

还有一种自动加载类的方法

spl_autoload_register('myloader');

function myloader($classname) {

return @include str_replace('_', DIRECTORY_SEPARATOR, $classname).'.php';

}

可以回调函数来处理加载文件类机制,速度比__auroload快。

php面向对象学习笔记的更多相关文章

  1. PHP:面向对象学习笔记,重点模拟Mixin(掺入)

    背景 相对于Python.Node和Ruby来说PHP算是一门容易学习和使用的语言,因为这个特点也使其成为WEB开发领域的佼佼者,本文记录一下我对PHP面向对象部分的学习笔记. 先来一个复杂的例子:M ...

  2. web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记

    hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...

  3. python面向对象学习笔记(一)

    粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了. 1.面向对象的特性 #你写代码时什么使用面向对象 #处理比较复 ...

  4. C#面向对象学习笔记概要

    1.面向对象不是取代面向过程的. 2.面向对象的三个特性:封装.继承.多态. 3.字段.方法.属性(后面讲)都可以叫做类的成员,他们都需要定义访问级别.访问级别的用处在于控制成员在哪些地方可以被访问, ...

  5. js面向对象学习笔记(五):tab切换

    重点是this指向问题 <style> .hide{display: none;} #box div,#box1 div{display: none;} .hover{background ...

  6. JavaScript面向对象学习笔记

    JavaScript 常被描述为一种基于原型的语言 (prototype-based language)--每个对象拥有一个原型对象,对象以其原型为模板.从原型继承方法和属性.原型对象也可能拥有原型, ...

  7. php面向对象学习笔记01-面向对象介绍、构造函数、析构函数

    偶尔翻看以前的笔记.就整理下.方便以后的查阅 类-成员属性 成员属性是从某个事务提取出来的, 可以是基本数据类型,也可以是复合数据类型(数组,对象) //创建一个类 class Cat{ pubic ...

  8. 强哥PHP面向对象学习笔记

    面向对象编程OOP目标:重用性.灵活性.扩展性特点:封装.继承.多态 类的书写方法:class PersionName{} 特征:属性.其实就是变量行为:方法.其实就是函数 1.实例化对象2.对象中成 ...

  9. java面向对象学习笔记

    1.内部类 //外部类HelloWorld public class HelloWorld{ //外部类的私有属性name private String name = "imooc" ...

随机推荐

  1. PARSEC-3.0编译错误

    OS: Ubuntu 14.04 LTS (x86_64) ***error 1 OpenSSL 1.0.1e 与 perl5.18 不兼容 POD document had syntax error ...

  2. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问

    消息 15281,级别 16,状态 1,第 2 行SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/Open ...

  3. mysql数据库的基本操作

    mysql数据库的基本操作dos命令启动mysql服务:net start mysql启动数据库: mysql -uroot -p查看所有的数据库:show databases:新建数据库:creat ...

  4. odoo server命令行以及配置文件

    odoo server 启动时 def main(args): check_root_user() odoo.tools.config.parse_config(args) check_postgre ...

  5. JavaScript高级程序设计-第六章面向对象的程序设计

    创建对象主要的两种形式,创建Object实例和创建对象字面量 对象包含属性和方法 数据 .属性有四个特性,特性是为了描述属性行为的,他们是: Configurable(可配置的)是否能删除或是否能修改 ...

  6. [BCB] C++ BUILDER 绘图 随机生成图形

    由于老师要求要实现一个填充算法,而每次填充都需要一个源图形[不规则],用mspaint自己画太麻烦,于是打算自己动手随机生成. 这里用的是 Polygen()函数,但是注意首尾相接,另外,为了保证规则 ...

  7. UVA 572 (dfs)

    题意:找出一块地有多少油田.'@'表示油田.找到一块就全部标记. #include<cstdio> #define maxn 110 char s[maxn][maxn]; int n,m ...

  8. 2016HUAS_ACM暑假集训4A - 递推

    利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. 杨辉三角+二项式定理,还真是挺有“意思”的一道题.说实话,非原创.见谅... ...

  9. iOS_Swift初识之使用三种回调方式自定义Button

    最近在学习Swift ,发现青玉伏案大神早期用OC写的一篇博客--IOS开发之自定义Button(集成三种回调模式)  很适合用来熟悉Swift的回调方式,于是我就用Swift翻版了一下,具体实现原理 ...

  10. error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

    以前一直用的VC6.0,最近换成VS2010了.哎这几天光折腾VS2010了. 曾经我以为程序没啥头绪忒头疼,现在觉得乱七八糟的编译问题才叫一个头裂=口= 原因:VC6.0中,如果没有直接显示指定的返 ...