面向对象的概念(OOP)
    OOP(Object-Programming, 面向对象的编程) 技术为编
    程人员敞开了一扇大门,使其编程的代码更简洁、更易于 维护,并且具有更强的可重用性。
    OOP达到了软件工程的三个目标: 重用性、灵活性、扩展性
    OOP面向对象编程的特点: 封装、继承、多态
    建议学习PHP面向对象的两个方向: 面向对象技术的语 面向对象的编程思想

    什么是面向对象
    面向对象 对象的概念是面向对象技术的核心。
    在现实世界里,我们面 对的所有事物都是对象,如计算机、电视机、自行车等在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
    面向对象的三个主要特性:
    对象的行为:可以对对象施加哪些操作;如电视机的开、关、转换频道等。
    对象的状态:当施加那些方法时,对象如何响应;如电视机的外形、尺寸、颜色等;
    对象的标识如何区分具有相同行为与状态的不同对象。

    类和对象之间的关系
    类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对对象的抽象就是类.类描述了一组有相同特性 (属性)和相同行为(方法)的对象。
    什么是类:
    具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也以说类的实例是对象,类实际上就是一种数据类型。
    类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
    类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。 什么是对象: 在客观世界里,所有的事务都是由对象和对象之间的联系组成的。对象是系统中用来描述客观事物的一个实体,他是构成系统的一个基本单位。

    类的声明

    简单格式:
    [修饰符] class 类名 //使用class关键字加空格后加上类名
    { [成员属性] //也叫成员变量
    [成员方法] //也叫成员函数
    }
    完整格式:
    [修饰符] class 类名 [extends 父类] [implements 接口1[,接口 2…]]
    { [成员属性] //也叫成员变量
    [成员方法] //也叫成员函数
    }

    成员属性
    格式: 修饰符 $变量名[=默认值]; //如:public $name=”zhangsan”; 注意:成员属性不可以是带运算符的表达式、变量、方法或函数调用
    常用属性修饰符:public、protected、private、static、var(过时)
    public $var6 = 100; //普通数值(4个标量:整数、浮点数、布尔、字串)
    public $var6 = myConstant; //常量
    public $var7 = self::classConstant; //静态属性
    public $var8 = array(true, false); //数组
    image.png
    image.png

    通过类实例化对象

    实例化对象
    对象类型在内存中的分配
    对象中成员的访问
    特殊的对象引用”$this”
    构造方法与析构方法

    实例化对象
    当定义好类后,我们使用new关键字来生成一个对象。
    $对象名称 = new 类名称();
    $对象名称 = new 类名称([参数列表]);
    由于对象资料封装的特性,对象属性(类中定义的变量)是无法由主程序区块直接来访问的,必须通过对象来调用类中所定义的属性和行为函数,间接地达成存取控制类中资料的目的。

    对象类型在内存中的分配
    对象是实际存在的,占有动态资源。
    类是对象的蓝图,可能占有静态资源。
    对象属性占有动态资源 类(静态)属性实际上是有类名字空间上的“全局变量” 性能考虑:
    每个对象要单独占用数据空间
    增加的调用层次可能消耗执行时间

    对象中成员的访问

    类中包含成员属性与成员方法两个部分,我们可以使用“new”关键字来创建一个对象,即:$引用名 = new 类名(构造参数);那么我们可以使用特殊运算符“->”来访问对象中的成员属性或成员方法。如:
    $引用名 = new 类名(构造参数);
    $引用名->成员属性=赋值; //对象属性赋值
    echo $引用名->成员属性; //输出对象的属性
    $引用名->成员方法(参数);//调用对象的方法
    如果对象中的成员不是静态的,那么这是唯一的访问方式。

    特殊的对象引用”$this”
    特殊对象的引用$this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问。**
    image.png
    image.png

    image.png
    image.png

    构造方法与析构方法
    构造函数:
    大多数类都有一种称为构造函数的特殊方法。当创建一个对象 时,它将自动调用构造函数,通常用它执行一些有用的初始化任务。
    构造函数的声明与其它操作的声明一样,只是其名称必须是两 个下划线construct( )。这是PHP5中的变化;PHP4的版本中, 构造函数的名称必须与类名相同。为了向下兼容,如果一个类 中没有名为construct( )的方法,PHP将搜索一个与类名相 同的方法。
    格式: [修饰符] function __construct ( [参数] )
    { … …
    }

    image.png
    image.png
    析构函数**:
    与构造函数相对的就是析构函数。析构函数是PHP5新添加的内容,在PHP4中没有析构函数。析构函数是在对象被销毁之前自动调用的方法,主要执行一些特定的操作,例如关闭文件,释放结果集等。 与构造函数的名称类似,一个类的析构函数名称必须是两个下划线 _ _destruct( )。析构函数不能带有任何参数。 例如:
    image.png

    封装性
    设置私用成员
    私有成员的访问
    set()、get()、isset()和unset()四个方法

    封装性是面向对象编程中的三大特性之一,封装就是把对象中的成员属性和成员方法加上访问修饰符,使其尽可能隐藏对象的内部细节,以达到对成员的访问控制(切记不是拒绝访问)。 这是PHP5的新特性,但却是OOP语言的一个好的特性。而且大多数OOP语言都已支持此特性。
    PHP5支持如下3种访问修饰符:
    public (公有的 默认的)
    private (私有的)
    protected (受保护的)
    **

    set()get()isset()和unset()
    魔术方法:
    __set(): 用于替代通用的set赋值方法
    __get(): 用于替代通用的get取值方法
    __isset(): 检测对象中成员属性是否存在
    __unset(): 销毁对象中成员属性方法
    **

    __set( )方法:
    格式
    [修饰符] function __set(string $name,mixed $value){
    … }
    当我们直接为一个对象中非公有属性赋值时会自动调用此方法,并将属性名以第一个参数(string),值作为第二参数(mixed)传进此方法中。
    __get( )方法:
    格式:
    [修饰符] function __get(string $name){
    … }
    当我们直接输出一个对象中非公有属性时会自动调用此方法,并将属性名以第一个参数传进去。
    image.png
    __isset( )方法:
    格式:
    [修饰符] function __isset(string $name){
    … }
    当使用isset()或empty()判断一个对象的私有或受保护的属性是否存在时,会自动调用此方法。参数name表示被判断的属性名。
    __unset( )方法:
    格式:
    [修饰符] function __unset(string $name){
    … }
    当使用unset( )销毁一个对象的私有或受保护的属性时,自动调用此方法,并将属性名以第一个参数传进去。
    image.png

    异常处理
    异常(Exception)处理用于在指定的错误发生时改变脚本的正常流程。是PHP5中的一个新的重要特性。异常处理是一种可扩展、易维护的错误处理统一机制,并提供了一种新的面向对象的错误处理方式。
    异常处理格式:
    try{ 使用try去包含可能会发生异常的代码. 一旦出现异常try进行捕获异常,交给catch处理。 抛出异常语句:throw 异常对象。 }
    catch(异常对象参数){ 在这里做异常处理。
    }[catch(。,,){ .. .. .. }]

    PHP中类与对象的相关函数**

    1. class_exists — 检查类是否已定义
      格式: bool class_exists ( string $class_name [, bool $autoload ] )
      —如果由 class_name 所指的类已经定义,此函数返回 TRUE,否则返回 FALSE。
      默认将会尝试调用 autoload,如果不想让 class_exists() 调用 autoload,可以将 autoload 参数设为 FALSE。
    2. get_class_methods — 返回由类的方法名组成的数组
      格式:array get_class_methods ( mixed $class_name )
      返回由 class_name 指定的类中定义的方法名所组成的数组。如果出错,则返回 NULL。
      从 PHP 4.0.6 开始,可以指定对象本身来代替 class_name
    3. get_class — 返回对象的类名

    格式: string get_class ([ object $obj ] )
    返回对象实例 obj 所属类的名字。如果 obj 不是一个对象则返回 FALSE。
    4. get_object_vars — 返回由对象属性组成的关联数组
    格式:array get_object_vars ( object $obj )
    返回由 obj 指定的对象中定义的属性组成的关联数组。
    5. get_parent_class — 返回对象或类的父类名
    格式:string get_parent_class ([ mixed $obj ] )
    如果 obj 是对象,则返回对象实例 obj 所属类的父类名。
    6. is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE
    格式:bool is_a ( object $object , string $class_name )
    我们可以使用运算符: instanceof代替上面的is_a操作

    1. method_exists — 检查类的方法是否存在
      格式:bool method_exists ( object $object , string $method_name )
      如果 method_name 所指的方法在 object 所指的对象类中已定义,则返回 TRUE,否则返回 FALSE。
    2. property_exists — 检查对象或类是否具有该属性
      格式:bool property_exists ( mixed $class , string $property )
      本函数检查给出的 property 是否存在于指定的类中(以及是否能在当前范围内访问)。