类的声明:

权限修饰符 class 类名{   //权限修士符号:public,protected,private 或者省略3者.

//类体;        //class 是建类关键字

}             //类名必须跟在class 后面,且跟上{}.{}之间放类的成员.

?>

//ps:在class关键字前可以加权限修饰符外,还可以加static,abstract等关键字.一个类,即一对大括号之间的全部内容都要在一段代码段中,不允许将类中的内容分割成对块.

class ConnDB{

//....

?>

//...

};

?>

成员属性:

在类中直接声明的变量称为成员属性/变量.其类型可以为php中的标量类型和复合类型,使用资源类型和空类型是无效的.

此外,成员属性的声明时,必须要有关键字来修饰:有特定意义的关键字:public,protected,private ;不需要特定意义:var.声明成员属性时,没有必要赋初始值.

成员常量:

以const常量修饰,例如:const PI = 3.1415926;

常量的输出不需要实例化,直接由类名+常量名调用即可,格式为: 类名::常量名

ps. 特殊的访问方法:--------"$this" 和 "::"

1) $"this" 存在于每个成员方法当中,它是一个特殊的对象以用方法.成员方法属于那个对象,$this应用就代表那个对象,其作用就是专门完成对象内部成员之间的访问.

2) "::"成为作用域操作符,使用这个操作符可以在不创建对象的情况下调用类中的常量,变量和方法. 其语法格式如下:

关键字::变量名/常量名/方法名

关键字:parent,可以调用父类成员中的成员变量,成员方法和常量;

self,可以调用当前类中的静态成员和常量;

类名,可以调用类中的常量,变量和方法;

成员方法:

在类中声明的函数成为成员方法,在一个类中可以声明多个函数,即对象可以拥有多个成员方法.成员方法的声明和函数的声明相同,唯一特殊之处就是成员方法可以有关键字对它进行修饰,从而控制其访问权限.

类的实例化

创建对象:

$变量名 = new 类名称([参数]); //类的实例化.

访问类成员:

$变量名 -> 成员属性 = 值;

构造方法和析构方法

构造方法是对象创建完成后第一个呗对象自动调用的方法.它存在每个类的声明当中,是一个特殊的成员方法,一般用来完成一些初始化操作.如果类中没有构造方法,系统会默认自动生成一个没有参数的构造方法.

格式:

function _construct(形参列表){

//方法体

};

析构方法则如构造方法相反,它是在对象被销毁前最后一个调用的方法.它将完成一个特定的操作,如关闭文件和释放内存.

格式:

function _destruct(){

//方法体

};

面向对象特点:封装性,抽象性,多态性.

封装:

将类中的成员属性和方法结合成一个独立的相同单位,并且尽可能的隐藏对象的内容细节.其目的是确保类以外的部分不能随意存取类的内部数据(成员属性和成员方法),从而避免外部错误对内部数据的影响.

类的封装是通过关键字public,private,protected,static和final实现的.各关键字的作用请查看php相关文档.

继承性:

使一个类继承并拥有另一个已存在的类的成员属性和成员方法,其中被继承的类成为父类,继承的类成为子类.通过继承能够提高代码的重用性和可维护性.类的继承用 extends 关键字.

格式:

class 子类名称 extends 父类名称{

//子类方法体.

}

通过parent::关键字也可以在子类方法中调用父类的成员方法,格式如下:

parent::父类的成员方法(参数);

覆盖父类的方法:

所谓的覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写.重写的关键就在与子类中创建与父类中相同的方法,g包括方法名称,参数和返回类型.

多态性:

多态性是指一段程序能够处理多种类型对象的能力.php多态有两种实现方法,即通过继承实现多态和通过接口实现多态.

通过继承实现多态,即通过重写继承的成员方法来达到多态的效果.

abstract class ParentClass{

abstract function printMessage();

}

class SubClassA extends ParentClass{

function printMessage(){

echo "i am message from class A";

}

}

class SubClassB extends ParentClass{

function printMessage(){

echo "i am message from class B";

}

}

function printMSG($object){

if( $object instanceof ParentClass){

$object->printMessage();

}else{

echo "error!";

}

}

$objectA=new SubClassA();

printMSG($objectA);

$objectB=new SubClassB();

printMSG($objectB);

?>

通过接口实现多态,通过定义接口,与空方法.然后类继承接口.

interface interfaceInfo{

function printMessage();

}

class ClassA implements interfaceInfo{

function printMessage(){

echo "message form class A";

}

}

class ClassB implements interfaceInfo{

function printMessage(){

echo "message form class B";

}

}

function printMSG($object){

if($object instanceof interfaceInfo){

$object -> printMessage();

}else{

echo "error !";

}

}

$objectA =new ClassA();

printMSG($objectA);

$objectB =new ClassB();

printMSG($objectB);

?>

ps. 抽象类和接口.

抽象类和接口都是不能被实例化的特殊类.他们都是能够配合面向对象多态性一起使用.

抽象类:

抽象类是一种不能实例化的类,只能作为其他类的父类来使用.抽象类使用abstract 关键字来声明,其格式如下:

abstract class 抽象类名{

abstract function 成员方法(参数);//

}

抽象类和普通类相似,包含成员变量,成员方法.两者区别在于抽象类至少要包含一个抽象方法.抽象方法没有方法体,其功能的实现只能在子类中完成.抽象方法也使用关键字 abstract 来修饰.

接口:

继承特性简化了对象和类的创建,增强了代码的可重用性.但php只支持单继承,如果想实现多重继承,就要使用接口.

接口的声明:通过interface 关键字来实现,接口中声明的方法必须是抽象方法,接口中不能声明变量,只能使用const 关键字声明为常量的成员属性,并且接口中所有成员都必须具备puclic 的访问权限.ainterface 声明接口格式如下:

inerface 接口名称{

//常量成员;//成员只能是常量.

//抽象方法;

}

由于接口不能实现实例化操作,因此只能借助子类继承接口的形式来实现.实现的格式是:

Class 子类名 implements 接口名1[,接口名2,接口名3,.....]{

//子类方法体.

}

常用关键字:

1)  final:final之意为最终的,最后的.这就以为着通过final 关键字修饰的类和方法都为最终版本.不能被继承,也不能有子类.不能重写,也不能被覆盖.

2)  static: 通过static 关键字修饰的成员属性和成员方法称为静态属性和静态方法.静态成员属性和方法不需要被实例化就能直接使用.

静态属性:它属于类本身,而不属于类的任何实例.它相当于存储在类中的全局变量,可以在任何位置通过类来访问.访问格式为:

类名称::$静态属性名称;

如果你要在类内部的成员方法中访问静态属性,那么在静态属性的名称前加上操作符: "self::" 即可.

静态方法:由于其不受任何对象限制,因此可以不通过类的实例化而直接引用类中的静态方法.引用格式如下:

类名称::静态方法名(参数);

如果你要在类内部的成员方法中调用静态方法,那么在静态方法的名称前加上操作符: "self::" 即可.在静态方法中只能调用静态变量,而不能调用普通变量;而普通方法中则可以调用静态变量.

使用静态成员除了不需要实例化外,另一个作用是在对象被销毁后,仍然保留呗修改的静态数据,以便下次调用.

3) clone.对象的克隆可以通过关键字来实现.使用clone对象与原对象没有任何关系,即克隆对象会重新申请一份存储空间来存放原对象内容.格式如下:

$克隆对象 = clone $原克隆对象名称;

克隆成功后,他们的n成员方法,属性以及值完全相等.如果要对副本重新初始化,就要用到 _clone().

魔术方法_clone()可以对克隆后的副本对象重新初始化.它不需要任何参数,其中自动包含$this (副本对象)和 $that (原对象) 对象的引用.

对象的比较:

"==" 表示比较两个对象的内容,"==="表示比较两个对象的引用地址相等.

对象类型的检测: instanceof 操作符可以检测当前对象属于那个对象.

面向对象---常用魔术方法:

以上我们已经了解的常用魔术方法有:_construct(),_destruct(),_clone.下面我们再接着介绍几个常用魔术方法.

_get(),_set();

以上两个方法用于对私有成员精细复制或者获取值的操作.

_set()在程序运行中为私有的成员属性设置值,它不需要任何返回值._set()方法包括两个不可省略的参数:变量名和变量值.这个方法不需要主动调用,可在方法钱加上prive关键字.

_get():在程序运行中,在对象的外部获取私有成员的属性的值.他有一个参数:私有成员属性名称.他返回一个允许对象在外部使用的值.此方法同样不许主动调用.

_isset(),_unset():

isset()函数用于检测变量是否存在.而在面向对象中可以通过isset()函数对公有的成员属性进行检测,但对私有成员属性,此函数则不起作用.因此,_isset()函数正是为了起到此作用而创建.格式如下:

bool _isset(string name);

_unset()则同样为了删除制定的变量和对象的私有成员属性.格式如下:

void _unset(string name);//

_call():

_call()方法的作用是当程序试图调用不存在或不可见的成员方法时,php会先调用_call()方法来存储方法名及其参数(方法名和方法参数).其中方法参数是以数组的形式存在.

_toString()方法:

其作用是当使用echo 或者print输出对象时,将对象转化为字符串.

如果没有_toString()方法,直接输出对象时将会发生致命错误.

输出对象时应注意的是,echo 或print 语句后面直接跟要输出的对象,中间不要加多余的字符,否则_toSting()将不会被执行.

_autoload()方法:

将一个独立的,完整的类保存到一个php页中,并且文件名和类名保持一致,这是每个开发人员都需要养成的良好习惯.这样下次在使用的时候就能够轻松的找到它.但有一种情况:如果要在一个页面中引进很多的类,就需要使用include_once()函数或者require_once()函数一个个地引入.php5中引入_autoload()方法可以自动实例化需要使用的类.当一个类还没实例化时,_autoload()会自动到指定的路径下面自动查找和类名相同的文件.找到则继续执行,否则报错.

function _autoload($class_name){

$class_path = $class_name.'.class.php';

if(file_exists($class_path)){

include_once($class_path);

}else{

echo '类不存在或者类路径错误';

}

}

$class = new Class(); //将会自动加载.

echo $class; //输出类内容.如自定义了_toString()方法;则会输出_toString()中定义的内容.

?>

//接口只能被继承不能实例化

//类可以继承多个接口

interface interfaceInfo

{

function printMessage();

};

interface interfaceUserinfo

{

function printUserinfo();

};

class ClassA implements interfaceInfo, interfaceUserinfo

{

public function printUserinfo()

{

echo "ClassA parintUserinfo
";

}

public function printMessage()

{

echo "ClassA parintMessage
";

}

};

class ClassB implements interfaceInfo, interfaceUserinfo

{

public function printUserinfo()

{

echo "ClassB parintUserinfo
";

}

public function printMessage()

{

echo "ClassB parintMessage
";

}

};

function printInterface($obj)

{

if($obj instanceof interfaceUserinfo)

{

$obj->printUserinfo();

}else{

echo "error";

}

}

$classa = new ClassA();

printInterface($classa);

$classb = new classB();

printInterface($classb);

php 面对对象总结,PHP 面向对象总结相关推荐

  1. python面对对象实验_Python面向对象实现方法总结

    总结 类的定义 很久以前,语言都是面向过程的,经过计算机科学家的探索,出现了面向对象.面向对象可以解释生活中很多东西.比如人,人就是个对象,有参数,比如器官,身高啥的,有方法,比如跑步,学习等.不扯那 ...

  2. java面对对象教学_Java面向对象程序设计教与学

    原标题:Java面向对象程序设计教与学 面向对象程序设计(Object Oriented Programming,OOP)主要研究如何从对象的角度出发构建程序单元以及程序开发机制,主要内容包括抽象的技 ...

  3. Java面对对象概念,什么是面向对象

    我们都知道Java是一门面向对象的语言.什么是面向对象,它有什么特性呢,今天我们就来说一下这个"面向对象"到底是什么意思. 面向对象简称 OO(Object Oriented),2 ...

  4. 关于面对对象和正则表达式的处理

    面对对象是软件开发的方法.面对对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.AD技术.人工智能等领域.面向对象是一种对现实世 ...

  5. 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性

    一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...

  6. 学习python第十五天,面对对象

    学习python第十五天,面对对象 面对对象又叫劝退对象,要么劝退你的对象,要么python劝退你,hhhh 开玩笑,但是这块知识点确实比较难 面向对象编 面向对象编程 指令式编程---->面向 ...

  7. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  8. 易语言java类_易语言面对对象编程

    易语言面对对象编程---类的创建与使用 面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多,如:C++.JAVA等等.易语言3.8版推出后,同样紧跟编程语言发展的方向,也开始 ...

  9. Python - 面对对象(基础)

    目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...

最新文章

  1. Java将Long类型转换为时分秒
  2. JavaScript实现轮播图
  3. Python的序列化与反序列化
  4. 前端模拟数据的技术方案(二)
  5. 只有程序员才看得懂的情书
  6. 网页端对接linux发起cc,(cc)实现Linux系统调用劫持
  7. 微信公众开放平台开发01---微信公众平台介绍,以及开发准备
  8. debugging tools for windows 10下载安装问题
  9. Java对Map排序
  10. redis整理の配置
  11. 云南昭通暴雨强度公式_昆明市暴雨强度公式推算与对比
  12. 自建服务器解网络锁,跟断刀学越狱】10分钟掌握iPhone1-4代刷机技巧
  13. 十分钟智商运动 李永乐 第2章 奇妙的物理
  14. java 调用宏_通过java代码实现调用excel当中的宏的操作。
  15. [Python] 微信for PC自动群发消息、图片以及文件
  16. 胡理辉:风电王国里的流程管控人
  17. java kryo 序列化_Kryo序列化
  18. 骑士周游(dfs+greedy)
  19. 首次实战Vue高仿移动端QQ音乐项目解析
  20. 金融知识国民读本(一)

热门文章

  1. Spring Cloud Config 集中式配置
  2. 阿里移动|《蚂蚁金服移动端高可用技术实践》
  3. 去除文件名中的'.'符号
  4. linux清除网卡计数
  5. Python Tkinter小试
  6. textarea 在浏览器中固定大小和禁止拖动
  7. 管理员修改文件的权限
  8. MDX Step by Step 读书笔记(五) - Working with Expressions (MDX 表达式)
  9. 聊聊EIGRP的自动汇总与手工汇总
  10. Qtum 量子链首例太空节点交易完成