php软件开发--oop(面向对象)

面向过程和面向对象:

什么是面向过程的编程思想
    1、面向过程概述:
        面向过程是一种编程思想、以过程(步骤)为中心、一种习惯
什么是面向对象的编程思想?
    1、面向对象概述:
        面向对象也是一种编程思想、以事物(对象)为中心、以功能来划分问题
        面向过程,就是着重于做什么;面向对象,就是着重于谁去做

类和对象关系:

类是抽象的,几乎不占用内存,而对象是具体的,占用存储空间。
在现实中,先有对象,再有类。
在电脑中,先有类,再有对象。

类定义和成员属性、方法定义及操作:

类的定义
    1、类的定义语法格式:
        同函数一样,是代码的封装方式。
类的成员属性定义
    1、成员属性介绍:
        成员属性,类具有的公共的特征、特性
        类中变量,就是类的成员属性
        类的成员属性和普通变量的区别:权限修饰符
    2、权限修饰符
        成员属性必须要加权限修改符
类的成员方法定义
    1、成员方法介绍:
        成员方法:类的公共的的行为或动作;
        有返回值和参数,默认访问权限是public
创建类的实例对象
    1、实例化对象的含义:
        对象实例化:从一个类上来生产对象过程,就是类的实例化
    2、语法格式:
        使用new关键字来创建对象。
对象属性操作
    1、如何访问对象的属性和方法?
        访问对象属性和方法,是通过"->"来访问的
        对象方法的操作:方法定义、方法调用、传递参数、方法返回值。

对象方法:

1、伪变量$this的使用
    1、伪变量$this的含义:
        $this表示当前对象引用(指针),如:$this->name = '张三'
        创建对象后,存在。
    2、举例说明
2、类常量的定义
    1、类常量介绍:
        类常量是一个定值,不能修改,也不能删除,与类相关与对象无关。对象共享、内存只有一份
    2、类常量定义和调用格式
        类常量没有权限,只有属性和方法才会有权限
        使用const来定义类的常量(局部常量),只能在局部作用域下使用;define()定义常量是全局常量
3、构造方法
    1、什么是构造方法:
        new对象,第1个调用的方法, __construct ()
        有参、无参:自定义,成员方法。作用:对象初始化、自动调用
4、析构方法
    1、什么是析构方法
        对象销毁前自动调用的方法,__destruct
        无参、成员方法、作用垃圾回收
    2、对象何时销毁
        网页执行完毕时,对象会自动销毁;
        使用unset()函数手动销毁对象
静态属性和静态方法:
static修饰属性,静态属性,static修饰方法,静态方法;
静态属性,方法:就是类的属性,方法,与类相关,与对象无关,通过"类名::"来调用;
内存中只有一份,被所有对象去共享;
静态属性或静态方法的好处:就是为了节省内存
静态属性和静态方法,都可以加权限控制符,而类常量没有权限。
$this当前对象的指针,self是指向当前类的指针;
$this关键字用来调用对象的属性和方法;
self用来调用类常量、静态属性、静态方法;
$this关键字只能在成员方法中使用;
self关键字可以在成员方法和静态方法中使用;
提示:对象可以调用:成员属性、成员方法、静态方法
提示:self可以调用:类常量、静态属性、静态方法、成员方法
OOP中内存的分配情况:
OOP中内存的分配情况
    栈、堆内存空间、代码空间、静态空间区
值传递?
    变量之间没有任何关系
    值传递的数据类型有:字符串型、整型、浮点型、布尔型、数组型、NULL。
引用传递:
    变量指向“同一个地址”,相互影响
    引用传递的数据类型有:对象和资源。
    对于海量数据,使用“引用传地址”,要比“传值”速度快。
其它类型变量使用引用传递:
    如果其它类型变量使用引用传递,只需要在引用的变量前加“&”符号即可。
类的特性(继承、封装、多态):
类的三大特性:封装性、继承性、多态性;
类的封装性
    封装性:将敏感的数据保护起来,不被外界访问;还可以理解为,将一个功能的方方面面,封装成一个整体,即类;
    类的封装性通过访问权限修饰符来实现的;
    实际中,属性基本都是私有的。通过公有的方法,对私有的属性进行赋值和取值。
        public(默认)、protected、private
类的继承性
    sub extends parent
    父类:基础类(最顶层的类)、父类、上层类。
    子类:最终类(最终的类)、子类、下层类。
    类的继承是为了实现功能的升级和扩展。
    功能的升级扩展:在子类进行完善(升级),在子类增加新功能(扩展)。
    php只支持单继承。
    self代表当前类,parent代表父类。存在所有方法
    self和parent可以存在于所有方法(成员方法和静态方法)中。
    parent(self)::类常量 | 静态属性 | 静态方法 | 成员方法
类的多态
    类的多态是类的多种形态,方法重载(php不支持)或方法重写(子类重写)。
    子类权限大于等于父类权限值(构造比较特殊、形参个数)

最终类(方法)和抽象类(方法)、接口:

最终类和最终方法
    Final修饰的类,方法,就是最终类,方法;
    最终类:该类只能实例化,不能被继承
    最终方法:该方法可以被继承,但不能重写。

抽象类和抽象方法
    abstract修饰的类,方法,就是抽象类,方法;
    抽象类:该类不能直接实例化,必须先继承后再实例化。常用在基础类。
    类中有抽象方法,该类必须是抽象类。
    所有的抽象方法都必须重写(继承),少一个都不行,没有方法体,必须在子类重写后,再定义方法体。
    不能是private,无法重写,抽象方法就是方法的命名规范、命名规则、方法大纲。
    php7抽象类中,可以包含其它成员:常量、成员属性、成员方法、静态属性、静态方法。

接口
    特殊的抽象类,多继承、interface\implement、方法默认public,abstract,不需要添加。

自动加载:

按需要加载类文件,而不是把所有类全部包含进来。命名格式:className.class.php
spl_autoload_register()、__autoload()
file_exists、require_once
何时调用?
    使用new关键字创建不存在类的对象时,
    当使用静态化方式访问一个不存在的类时,
    当继承一个不存在的类时,
    当实现一个不存在的接口时

对象克隆、对象遍历、常用魔术方法、面向对象设计模式:

对象克隆
    创建新对象(引用地址不一致)有两种方式:a. 使用new关键字; b. 使用 clone 关键字
    魔术方法__clone()
对象遍历:
    foreach既可以遍历数组元素,也可以遍历对象属性。
常用魔术方法
    obj = new object()
    1、__toString()=>obj
        将对象转成字符串时,__toString()会自动调用。
    2、__invoke()=>obj()
        当把一个对象当成函数调用时,__invoke()会自动调用。
面向对象的设计模式
    1、什么是对象设计模式?:
        使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
    2、常用的设计模式有哪些?:
        单例设计模式:一个类只能创建一个实例对象,不管用什么办法都无法创建第2个对象;
        工厂设计模式:生产不同类对象的工厂
    3、单例设计模式的要求(三私一公)
        一私:私有的静态的保存对象的属性。
        一私:私有的构造方法,阻止类外new对象。
        一私:私有的克隆方法,阻止类外clone对象。
        一公:公共的静态的创建对象的方法。

工厂设计模式:

公共的静态的方法,传递不同的类名参数,返回不同类的对象;
在类的外部我们无法控制类的行为,但在类内部自己可以控制类的行为。
该方法功能:就是根据传递的不同参数,去创建不同的类实例;

重载:

1、什么是重载
    PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。
    当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
    所有的重载方法都必须被声明为 public。
2、属性重载
    (1)__get()魔术方法:读取不可访问属性的值时
    (2)__set()魔术方法:给不可访问属性赋值时
    (3)__isset()魔术方法:对不可访问属性调用 isset() 或 empty()
    (4)__unset()魔术方法:当对不可访问属性调用 unset()
3、方法重载
    (1)__call()魔术方法:调用一个不可访问方法时
    (2)__callStatic()魔术方法:静态方式调用一个不可访问方法

变量序列化:

1、什么是变量序列化
    序列化是将变量转换为可保存或传输的字符串的过程;
    反序列化就是在适当的时候把这个字符串再转化成原来的变量使用;
2、序列化函数serialize()
    $value可以是任何类型,除了资源外
3、反序列化函数unserialize()
    从已存储的表示中创建 PHP 的值
4、对象反序列化
    unserialize()函数会检查类中是否存在一个__wakeup()方法。
    预先准备对象需要的资源。
     __wakeup() 经常用在反序列化操作中,进行一些初始化操作,例如重新建立数据库连接,或执行其它初始化操作。

常用魔术常量:

__LINE__:当前行号
__FILE__:当前文件
__DIR__:当前目录
__FUNCTION__:当前函数
__CLASS__:当前类
__METHOD__:当前方法
__NAMESPACE__:当前命名空间
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值