PHP面向对象笔记
一、构造函数、析构函数
(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面向对象笔记的更多相关文章
- JS面向对象笔记二
菜单导航,<JS面向对象笔记一>, 参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...
- PHP面向对象笔记解析
PHP的面向对象是很重要的内容,也是很常用的内容.所以现在就把PHP面向对象进行整理了一下. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百 ...
- Python 面向对象笔记
Python 面向对象课程笔记 前言 Python 面向对象 正文 基本概念 什么是对象: 万物皆对象 对象是具体物体: 拥有属性 拥有行为 封装零散为整体 OOP(Object Oriented P ...
- js面向对象笔记
JavaScript 私有成员实现 到此为止,如果您任然对 JavaScript 面向对象持怀疑态度,那么这个怀疑一定是,JavaScript 没有实现面向对象中的信息隐藏,即私有和公有.与其他类式面 ...
- python 面向对象-笔记
1.如何创建类 class 类名: pass class bar: pass 2.创建方法 构造方法,__init__(self,arg) obj = 类('a1') 普通方法 obj = 类(‘xx ...
- [52PJ] Java面向对象笔记(转自52 1510988116)
面向对象概念 面向对象三大特征:封装,继承,多态 面向对象编程(OOP,Object Oriented Programing)是相对于面向过程编程说的,之前写的代码基本都是纯的面向过程编程的,当项目复 ...
- 2019/1.7 js面向对象笔记
面向对象 1.构造函数里的属性怎么看?看this,谁前面有this谁就是属性. num不是属性,是私有作用域下的私有变量. 2.如何查找面向对象中的this 1.构造函数的this指向实例对象 2.如 ...
- Java面向对象笔记(五分钟秒懂)
面向对象概念 面向对象三大特征:封装,继承,多态 面向对象编程(OOP,Object Oriented Programing)是相对于面向过程编程说的,之前写的代码基本都是纯的面向过程编程的,当项目复 ...
- C#面向对象笔记
1.面向对象核心概念 (1)类是抽象,对象是实例,new一个对象会分配一块堆空间,对象指向该空间的地址,将对象赋值给另一个对象,只是将地址赋给它,指向的是同一块空间. e.g. class Car { ...
- JavaScript高级特征之面向对象笔记
Javascript面向对象 函数 * Arguments对象: * Arguments对象是数组对象 * Arguments对象的length属性可以获取参数的个数 * 利用Arguments对象模 ...
随机推荐
- React News Site 新闻站
Learn React & Webpack by building the Hacker News front page from https://github.com/theJian/bui ...
- Hdu4311 || 4312Meeting point-1/-2 n个点中任意选一个点使得其余点到该点曼哈顿距离之和最小
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- 2016-1-30 Servlet中Session管理(Sesssion追踪)
Session管理(Sesssion追踪)是Web应用程序开发中非常重要的一个主题.这是因为HTTP是无状态的,在默认情况下,Web服务器不知道一个HTTP请求是来自初次用户,还是来自之前已经访问过的 ...
- javascript常识
substring和substr的区别 substring() 方法用于提取字符串中介于两个指定下标之间的字符. stringObject.substring(start,stop)例子: <s ...
- 洛谷 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers Label:ExWater
题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人.然而,在任何一群朋友中 ...
- .net core Jwt 添加
Jwt 已经成为跨平台身份验证通用方案,如不了解请关注:https://jwt.io/. 为了和微软其他验证模块有个比较好的衔接,项目中采用了微软开发的jwt组件: System.IdentityMo ...
- _MSC_VER详细介绍
_MSC_VER详细介绍 转自:http://www.cnblogs.com/braver/articles/2064817.html _MSC_VER是微软的预编译控制. _MSC_VER可以分解为 ...
- git回滚错误提交
git log //找到你要回滚的那次提交 比如:43596f6b1f57157e627c25ae7a843f60157ac52d git reset --hard HEAD~43596f6b1f57 ...
- java-String Date Calendar之间的转换
1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...
- python 之 Django 小案例
一, F Q # F 使用查询条件的值 # # from django.db.models import F # models.Tb1.objects.update(num=F('num')+1) ...