PHP面向对象

面向对象:Object Oriented
对象:Object
面向:Oriented
时间万物皆对象;包括抽象对象
对象包含两部分:
  1.对象的组成元素
    是对象的数据模型,用于面向对象的数据
    又被称为对象的属性,或者对象的成员变量
  2.对象的行为
    是对象的行为模型,用于描述对象能够做什么事情
    又被称为对象的方法
对象的特点
  1.每一个对象都是独一无二的
  2.对象是一个特定事物,他的职能是完成特定功能
  3.对象是可以重复使用的
基本概念
  1.什么是面向对象
    面向就是已对象为中心
    面向对象编程就是在编程的时候数据结构(数据组织方式)都通过对象的结构进行存储
  2.为什么要使用面向对象
    对象的描述方式更加贴合真实的世界,有利于大型业务的理解
    在程序设计的过程中用对象的视角分析世界的时候能够拉近程序设计和真是世界的距离
面向对象的实质
  1.面向对象就是把生活中要解决的问题用对象的方式存储
    属性
    方法
  2.对象与对象之间通过方法的调用完成互动
    方法调用:对象跟自身和其他对象之间的交互
面向对象基本思路
  1. 识别对象
    任何实体都可以被识别为一个对象
  2.识别对象的属性
    对象里面存储的数据被识别为属性
    对于不同的业务逻辑,关注的数据不同,对象里面存储的属性也不同
  3.识别对象的行为
    对象自己属性数据的改变
    对象和外部交互
面向对象的基本原则
  1.对象内部是高内聚的
    对象只负责一项特定的职能(职能可大可小)
  2.所有对象相关的内容都封装到对象内部
    对象对外是低耦合的
  1.外部世界可以看到对象的一些属性(并非全部)
  2.外部世界可以看到对象可以做某些事情(并非全部)
基本实践
  1.类的概念
    物以类聚,把具有相似特性的对象归类到一个类中
    类定义了这些相似对象拥有的相同的属性和方法
    类是相似对象的描述,称为类的定义,是该类对象的蓝图或者原型
    类的对象称为类的一个实例
    类的属性和方法统称为类成员
    类的实例化(instantiate)
  1.类的实例化就是通过类定义创建一个类的对象
    类的的定义里面属性值都是空的,而对象的属性都具有具体的值
  2.构造函数
    __construct()函数在对象被实例化的时候自动调用
  3.析构函数
    __destruct()函数在程序执行结束的时候会自动调用
    当对象不会再被使用的时候可以触发析构函数的调用
    析构函数通常被用于清理程序使用的资源
  4.对象引用赋值
    对象的引用用于访问对象的属性和方法;
高级实践
  1.继承
    拥有部分相同的属性和方法时
  2.继承的好处
    父类里面定义的类成员可以不用再子类中重复定义,节约了编程时间和代价
    同一个父类的子类用于相同的父类定义的类成员,因此外部代码调用它们的时候可以一视同仁
    子类可以修改和调整父类定义的类成员(重写overwrite),子类修改后按照子类修改之后的执行
    子类对象可以直接访问父类的属性和方法
    extends关键字类的继承,单继承;
  3.访问控制
    public公有的类成员,任何地方
    protected 受保护的类成员,可以被其自身以及其子类访问
    private私有的类成员,只能被自身访问
  4.静态成员
    静态属性定义是在访问控制关键字后面添加static关键字(静态方法同理)public static $abc; public static fucntion (){}
    在类定义中使用静态成员的时候,用self(static)关键字后面::操作符即可(self::$abc)
    类定义外部访问静态属性,类名::属性(方法);
    子类访问 parent::属性(方法)
  总结:1.静态属性用于保存类的公有数据
    2.静态方法里面只能访问静态属性
    3.静态成员不需要实例化对象就可以访问
    4.类的内部可以通过self或者static关键字访问自身静态成员
    5.可以通过parent关键字访问父类的静态成员
    6.可以通过类的名称在类定义外部访问静态成员
  5.Final成员
    子类无法修改 final public function(){}
  6.数据访问
    用parent关键字可以访问父类中被子类重写的方法
    self访问自身的成员方法,也可以访问自身的静态成员和类常量;但不能访问类自身的非静态属性;使用常量时不需要再常量名称前面添加$符
  7.接口
    把不同类的共同行为定义,在不同类里面实现不同的功能
    定义:interface 名字
    接口里面的方法不需要有方法的实现
    实现:class 类名 implements 接口名
    interface 关键字用于定义接口
    implements 关键字用于表示类实现某个接口
    不能实例化接口
    instanceof判断某个对象是否实现了某个接口($obj instanceof abc)
    interface 接口 extends 接口 接口继承接口
    某个类实现了某个接口和继承某个类的区别
    实现接口跟继承类很类似,但是接口不能直接创建自己的对象
    继承的父类必须有该方法的具体实现,子类可以重写父类的方法,也可以不重写
    接口里面的方法是不需要具体实现的,只要定义了方法的名称和参数就可以了,具体的实现必须在实现类中定义
  8.多态
    因为接口的实现可以有很多,所以对于接口里面定义的方法的具体实现是多种多样的,这种方法我们称为多态
  9.抽象类
    接口里面的方法是没有实现的,而类里面的方法都是有实现的
    abstract关键字用于定义抽象类
    在抽象方法前面添加abstract 关键字可以标明这个方法是抽象方法不需要具体的实现
    抽象类中可以包含普通的方法,有方法的具体实现
    继承抽象类的关键字是extends
    继承抽象类的子类需要实现抽象类中定义的抽象方法
  10.魔术方法
    __tostring()当对象被当做string使用时,这个方法会被自动调用
    __invoke()当对象被当成方法调用时,这个方法会被自动调用
    __call()当对象访问不存在的方法名称是,__call($name,$arguments)方法会被自动调用(overloading)第一个参数是调用方法的名称,第二个参数是方法调用的参数组成的数组
    __callStatic()当对象访问不存在的方法名称时,__callStatic()方法会被自动调用(overloading)
    --set()在给不可访问属性赋值时,__set()被调用(属性重载的魔术方法)
    __get()读取不可访问属性的值时,__get()被调用(属性重载的魔术方法)
    __isset()当对不可访问属性调用isset()或empty()时,__isset()被调用(属性重载的魔术方法)
    __unset()党对不可访问属性调用unset()时,__unset()被调用(属性重载的魔术方法)
    所谓不可访问属性,实际上就是在调用某个属性时发现这个属性没有被定义,这时候不同的操纵会触发不同的魔术方法
    __clone()复制;对原本的没有影响

原文地址:https://www.cnblogs.com/sw-3/p/10543375.html