一、构造函数、析构函数
(1)构造函数:__construct()
说明:对象被实例化时调用,可带参数
例:

$obj = new A($a,$b);

(2)析构函数:_destruct()
说明:页面执行结束调用。用于清理程序资源

二、对象的引用
(1)不同的引用,同一个对象:

$a = new A;
$b = $c = $a;//就像a、b、c(对象别名)共住一个房子(对象)
unset($a);//对象未销毁
unset($a,$b,$c);//对象销毁

(2)同一个引用,共用一个变量,只是名字不同:

$a = new A;
$d = &$a;
unset($a);//对象销毁
unset($b);//对象销毁

(3)复制对象,不同的对象:

$a = new A;
$b = clone $a;

三、继承:extends
说明:
(1)单继承,extends后面只能接一个父类
(2)重写的方法必须与原方法(参数,类型)完全相同
优点:子类成员不用重复定义
例:

class Zi extends Fu{
protected function cry(){
parent::cry();
}
}

四、访问控制,三种访问权限:
(1)public :公有的,可以在任何地方被访问
(2)protected :受保护的,可以被自身及子类访问
(3)private :私有的,只能被自身访问

五、静态成员:static
(1)静态属性用于保存类的共有数据
(2)和类存储在一起,而不是和对象,因此可以不用实例化直接调用。
(3)静态方法里面只能访问静态属性,不能使用this。
self::也能访问自身非静态成员
例:

class A {
public static $a=1;
const STR = 'str';//常量,不允许修改
}

在类中调用:self::$a(自身、父类) 或 static::$a(自身)
在类外调用:A::$a

$AC = new A;
$BC = new A;
$AC::$a=2;
echo $BC::$a;

六、final关键字
(1)子类中编写跟父类方法名完全一致的方法可以完成对父类方法的重写(有参数也不影响)。
(2)父类方法前添加final关键字,无法在子类里重写。
(3)对于不想被任何类继承的父类可以在父类class之前添加final关键字。
(4)添加final关键字的类/方法,只是不能被重写/继承,但可以调用
例:

final class A {
final public function a(){}
}

七、接口:interface
(1)只能为public
(2)只能声明常量
(3)全部为抽象方法
(4)类必须实现接口全部的方法
(5)接口可extends(继承)多接口
(6)类可implements(实现)多接口
(7)可以用$a instanceof A判断对象时候实现了接口
(8)重写的方法必须与原方法(参数,类型)完全相同
优点:功能自由组合。如,用户:登录,发消息,传图片等,放在一个类中太庞大不灵活,可做成接口,用的时候再调;注册:验证邮箱,加密。
例:

interface a {
public function saya();
} interface b {
public function sayb();
} interface c {
public function sayc();
} interface d extends a,b {
public function sayd();
} class fu implements d,c{
public function saya(){}
public function sayb(){}
public function sayc(){}
public function sayd(){}
}

八、抽象类:abstract
(1)abstract关键字用于定义抽象类
(2)在抽象方法前面添加abstract关键字,不需要具体的实现
(3)抽象类中可以包含普通的方法,有方法的具体实现
(4)继承抽象类的子类需要实现抽象类中定义的抽象方法
优点:定义类规范。如,定义短信规范连接不同的服务商,定义数据库规范连接不同数据库

例:

abstract class A {
abstract public function a();
public b(){}
}

九、魔术方法
(1)__tostring() :当对象被当做string使用时方法自动调用

例:

echo $obj;
public function __tostring(){
return '__tostring';
}

(2)__invoke() :当对象被当成方法被调用时方法自动调用
例:

$obj(4);

方法的重载:
(3)__call($a,$arr) :对象调用不存在的方法自动调用
(4)__callstatic($a,$arr) :对象调用不存在的静态方法自动调用,方法必须加关键字static
例:function static __callstatic(){}

属性的重载
(5)__set() :在给不可访问属性赋值时,__set()会被调用 例:function __set($name,$value)
(6)__get():读取不可访问属性的值时,__get()会被调用 例:function __get($name)
(7)__isset():当对不可访问属性调用isset()或empty()时,__isset()会被调用
(8)__unset():当对不可访问的属性调用unset()时,__unset()会被调用
所谓不可访问属性,实际上就是在调用某个属性时发现这个属性没有被定义,这时候不同的操作会触发不同的魔术方法

(9)__clone():对象被clone时自动调用
优点:自定义复制哪些属性,使被复制的对象的一些属性不被复制过去。
例:

obj1 = clone $obj; //实现对象复制,变成值相同的两个对象

PHP面向对象笔记的更多相关文章

  1. JS面向对象笔记二

    菜单导航,<JS面向对象笔记一>,  参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...

  2. PHP面向对象笔记解析

    PHP的面向对象是很重要的内容,也是很常用的内容.所以现在就把PHP面向对象进行整理了一下. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百 ...

  3. Python 面向对象笔记

    Python 面向对象课程笔记 前言 Python 面向对象 正文 基本概念 什么是对象: 万物皆对象 对象是具体物体: 拥有属性 拥有行为 封装零散为整体 OOP(Object Oriented P ...

  4. js面向对象笔记

    JavaScript 私有成员实现 到此为止,如果您任然对 JavaScript 面向对象持怀疑态度,那么这个怀疑一定是,JavaScript 没有实现面向对象中的信息隐藏,即私有和公有.与其他类式面 ...

  5. python 面向对象-笔记

    1.如何创建类 class 类名: pass class bar: pass 2.创建方法 构造方法,__init__(self,arg) obj = 类('a1') 普通方法 obj = 类(‘xx ...

  6. [52PJ] Java面向对象笔记(转自52 1510988116)

    面向对象概念 面向对象三大特征:封装,继承,多态 面向对象编程(OOP,Object Oriented Programing)是相对于面向过程编程说的,之前写的代码基本都是纯的面向过程编程的,当项目复 ...

  7. 2019/1.7 js面向对象笔记

    面向对象 1.构造函数里的属性怎么看?看this,谁前面有this谁就是属性. num不是属性,是私有作用域下的私有变量. 2.如何查找面向对象中的this 1.构造函数的this指向实例对象 2.如 ...

  8. Java面向对象笔记(五分钟秒懂)

    面向对象概念 面向对象三大特征:封装,继承,多态 面向对象编程(OOP,Object Oriented Programing)是相对于面向过程编程说的,之前写的代码基本都是纯的面向过程编程的,当项目复 ...

  9. C#面向对象笔记

    1.面向对象核心概念 (1)类是抽象,对象是实例,new一个对象会分配一块堆空间,对象指向该空间的地址,将对象赋值给另一个对象,只是将地址赋给它,指向的是同一块空间. e.g. class Car { ...

  10. JavaScript高级特征之面向对象笔记

    Javascript面向对象 函数 * Arguments对象: * Arguments对象是数组对象 * Arguments对象的length属性可以获取参数的个数 * 利用Arguments对象模 ...

随机推荐

  1. 2016多校联合训练4 F - Substring 后缀数组

    Description ?? is practicing his program skill, and now he is given a string, he has to calculate th ...

  2. 将一个字符串中的大写字母转换成小写字母,小写字母转换成大写字母(java)

    背景:刚刚学到java的String和StringBuffer类,遇到如标题所示的题. 要求:必须要用到String类的toUpperCase方法和toLowerCase方法 思路:用到StringB ...

  3. 【SAP BO】处理掉BOE打开Xcelsius报表时,外围出现的外边框(转)

    原帖地址:http://blog.csdn.net/liyi199488/article/details/8943286 通过BOE打开Xcelsius报表时,总是出现一个外边框. 处理办法: Xce ...

  4. 洛谷 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers Label:ExWater

    题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人.然而,在任何一群朋友中 ...

  5. underscorejs 源码走读笔记

    Underscore 简介 Underscore 是一个JavaScript实用库,提供了类似Prototype.js的一些功能,但是没有继承任何JavaScript内置对象.它弥补了部分jQuery ...

  6. JavaFX 教程资料收集

    1. JavaFX中文资料 http://www.javafxchina.net/blog/docs/tutorial1/ 2. JavaFX入门教程 http://www.xrpmoon.com/c ...

  7. 使用 pod install 还是 pod update ?

    翻译自:https://guides.cocoapods.org/using/pod-install-vs-update.html 介绍: 许多人开始使用CocodPods的时候认为pod insta ...

  8. Cannot connect to the Docker daemon. Is the docker daemon running on this host?

    解决方案 docker-machine restart&&eval "$(docker-machine env default)"&&docker- ...

  9. 简单谈谈如何利用h5实现音频的播放

    作者:白狼 出处:http://www.manks.top/article/h5_audio本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律 ...

  10. mysql安装流程

    一.配置MySQL数据库 1.解压绿色版mysql,如下图 二.安装服务 1.运行cmd(管理员版本,否则没有权限),如下图 2.运行命令mysqld –install安装服务,如下图: 如果不需要m ...