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; //实现对象复制,变成值相同的两个对象
时间: 2024-12-09 08:29:11

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

JS面向对象笔记二

菜单导航,<JS面向对象笔记一>,  参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函数和new命令 五.构造函数和new命令 六.构造函数和new命令 七.构造函数和new命令 八.构造函数和new命令 一.构造函数和new命令 1.构造函数 JavaScript语言的对象体系,不是基于"类"的,而是基于构造函数(constructor)和原型链(prototype) 为

Java面向对象笔记3

Java类必须包含一个或一个以上的构造器,使用构造器最大的好处就是在创建对象时,对类的Field进行初始化(当创 建一个对象的时候,系统为这个对象的Field进行默认初始化,如果是基本类型如数值型赋值为0,如果是引用类型的 Field赋值为null),如以下代码: public class Teacher { private String name; private int age; public Teacher(){ } public Teacher(String name,int age){

Java面向对象笔记5

封装.继承.多态是面向对象的三大特征,继承是实现类重用的重要手段,但是继承会带来一个最大的坏处,那就是破坏 封装.因此接下来介绍组合,组合是实现类重用的重要方式,能提供更好的封装性. 子类扩展父类的时候,可以从父类那里继承得到Field和方法,假设现在我们有足够的权限,那么子类就可以直接复用父 类的Field和方法,但继承在带来高度复用的同时,也带来了一个严重的问题,继承严重的破坏了父类的封装性.在封装 时,我们应该遵守这个原则:每个类都应该封装它内部信息和实现细节,而只暴露必要的方法给其他类使

PHP面向对象笔记解析

PHP的面向对象是很重要的内容,也是很常用的内容.所以现在就把PHP面向对象进行整理了一下. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2 一.面向对象的基本概念 1.什么是面向对象? 对象 面向 由于目前都还没有一个统一的概念,所以所能理解的就是一个物体被抽象出来,每个物品都是一

面向对象笔记基础

面向对象基础笔记 面向过程 面向对象 类的初步理解 __init__方法的理解 区分类的属性与对象的属性 继承:派生 组合 抽象类 多态与多态性 封装: 类和对象的隐藏属性 面向过程 核心是过程,即解决问题的步骤,比如设计一条流水线, 是机械的思维方式. 优点: 将复杂的问题流程化,进而简单化; 缺点: 可扩展性差; 面向对象 对象就是属性与方法的结合体. 优点: 可扩展性强; 缺点: 编程复杂度高; 应用场景:应对客户不停变化的需求,尤其是互联网应用,游戏和企业内部的应用. 类的初步理解 类是

Java面向对象笔记8

如果将一个类放在另一个类内部,那这个类就被称为内部类,内部类的主要作用如下: 1.内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类. 2.内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相 访问.但外部类不能访问内部类的实现细节,例如内部类的成员变量. 3.匿名内部类适合用于创建那些仅需要一次使用的类. 成员内部类被分为两种:静态内部类和非静态内部类,使用static修饰的成员内部类是静态内部类,没有使用stat

Java面向对象笔记4

封装.继承.多态是面向对象的三大特征,在Java中什么是多态? Java引用变量有两种类型,分别是编译时类型和运行时类型.何为编译时类型,编译时类型就是由声明该变量时使用的类型决定,而运行时类型是由实际赋给该变量的对象决定 的,也就是说如果编译时类型和运行时类型不一致时,就可能出现上面提到的多态. 我们看下下面的程序: class BaseClass { public String name = "BaseClass"; public void base() { System.out.

java面向对象笔记

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.面向对象时一种思想,将功能封装进对象,强调具备了功能的对象 2.面向对象三个特征: 封装.继承.多态.  找对象,建立对象,使用对象,维护对象之间的关系 3.类和对象的关系: 类就是对现实生活中事物的描述,是对具体的抽象 对象是这类事物实实在在的个体,具体对象是对应java在堆内存中用new建立的实体 属性对应类中的变量,行为对应类中的函数(方法),共同成为类中的成员(成员变量,成员方法)

面向对象笔记

类的特性: a.封装 1.防止数据被随意修改  2.使外部程序不需要关注对象内部的构造,只需要通过对象,对外提供的接口进行直接访问即可 b.继承 1.子类通过继承父类的方式,以最小代码量的方式,实现不同角色的共同点,和不同点 2.多继承时,继承顺序的区别  其中python2 就是深度查询,python3就是广度查询 C.多态 pass 什么是类? 其实类就是一个函数的集合即 class 类: def 函数1(): pass def 函数2(): pass 对象=类() #这就是实例化的过程 对

面向对象笔记一

js 面向对象的基本概念和基本使用方法 -> js 是不是一个面向对象的语言(众说纷纭)? 不是:与传统面向对象的理论语言有矛盾.C#,Java. 是:js里面到处都是对象,数组,时间,正则... 和 DOM.也可以像传统面向对象的语言那样用 new 的方式创建对象 -> js是一个基于对象的多范式编程语言. 面向过程的方式 面向对象的方式 函数式 递归与链式 例: Jquery 链式编程 比如: 给 div 标签添加样式 $( 'div' ).css( 'border', '1px soli