一、构造函数、析构函数
(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. BZOJ 4066 简单题 ——KD-Tree套替罪羊树

    [题目分析] 直接x,y二维轮番划分,暴力即可. 套上替罪羊,打碎重构,对于时间复杂度有了保证. 写起来好麻烦,重构的技巧很棒! [代码] #include <cstdio> #inclu ...

  2. orcal 操作

    清空表数据(不清除表结构): truncate table 表名

  3. LeetCode 136. Single Number

    最原始的方法:先排序,然后从头查找.若nums[i] = nums[i] + 1则为一对相同的数,i = i  + 2,继续判断.若nums[i] != nums[i] + 1,则输出nums[i]. ...

  4. 『AngularJS』$location 服务

    项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...

  5. placeholder js简单实现

    window.onload = function() { var input = document.getElementById("input"); input.onblur = ...

  6. Ambari组件黄色预警

    Ambari组件黄色预警 组件上为黄色问号,代表心跳丢失,解决如下: 1.  查看个节点之间是否可以相互通信,若ssh连接不上,有可能是该节点关机了,没有打开,手动开启该节点,再次验证是否可互通. 2 ...

  7. Angularjs ng-if和ng-show的区别

    ng-if:判断条件,为true时向html中插入节点,否则从html中移除节点: ng-show: 简单的显示和隐藏(display) 坑点:ng-if会创建一个新的作用域(scope),如果内部元 ...

  8. 在C#中调用EXE文件

    1. 如果exe文件的返回值是int类型,标识操作执行的结果是否成功,例如: class Program { static int Main(string[] args) { return args. ...

  9. Python之路【第六篇】python基础 之面向对象(一)

    一.三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比 ...

  10. jQuery基础的工厂函数以及定时器的经典案例

    1. jQuery的基本信息:  1.1 定义: jQuery是JavaScript的程序库之一,它是JavaScript对象和实用函数的封装, 1.2 作用: 许多使用JavaScript能实现的交 ...