• PHP Cookbook读书笔记 – 第07章类和对象


    虽说在PHP5之前,php就有对面向对象编程方面的支持,但对对象和类的处理不是那么的理想,直到PHP5通过使用Zend Engine2(ZE2)才使PHP得以包含高级的面向对象特性。本章就是介绍PHP5的面向对象特性,目前,很多的公司在招聘PHPer时都会提出对这部分的要求。需要稍微注意一下的地方是本书中文版在new一个对象的时候(Instantiating Objects)翻译为技巧化一个对象,而在博主阅读的资料里都将这一行为描述为“实例化”一个对象。

    在学习完本章节需要掌握面向对象的3个特性的使用:继承、封装、多态

    封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

    继承,实现方式有三类:实现继承、接口继承和可视继承。

    1. 实现继承是指使用基类的属性和方法而无需额外编码的能力;
    2. 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
    3. 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

    多态,有二种方式,覆盖,重载。

    1. 覆盖,是指子类重新定义父类的虚函数的做法。
    2. 重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

    类里面的几个特殊方法名

    __construct:构造器,执行类时首先运行

    __destruct:析构器,类结束前运行

    __toString:字符串化,这个方法在PHP5早期版本和PHP5.2之后存在差异,使用需注意

    public, protected, private :访问控制,分别代表公共、保护、私有

    final :方法不可被继承的子类修改或类不可继承

    interface:定义一个接口

    abstract :定义一个抽象类

    clone :复制一个对象的副本

    $adam = new user;
    //两个变量指向的是一个对象
    $dave = $adam;
    //指向的是两个不同搜对象
    $john= clone $adam ;

    __get($property)和__set($property, $value):属性访问

    __isset( ) 和 __unset( ) :判断是否设置或是否销毁,只对PHP5.1之后版本有效

    __call($method, $arguments):简单点说就是在调用类中未定义的方法时就调用这个

    parent::方法名():在子类中调用父类的方法

    const :定义类常量,通过[类名]::[常量名]来调用

    static:定义静态方法或属性,有.NET变成经验的同学需要注意,PHP中的静态方法只在本次请求过程中有效而不是像.NET中的静态方法一次调用后会长期驻留内存。

    __sleep( ) 和 __wakeUp( ):在序列号和反序列化一个类时调用,常用来保存一些外部资源的连接等

    通过反射获得一个类的信息:

    Reflection::export(new ReflectionClass('car'));

    ReflectionMethodReflectionFunction:分别是反射一个类方法和反射一个函数

    instanceof :检测一个对象是否是指定类的实例

    __autoload:在实例化一个为定义的类时,会执行此方法

    function __autoload($class_name) {
        include "$class_name.php";
    }
    
    $person = new Person;

    很蛋疼的PHP语法规则

    //合法
    $class_name = 'Net_Ping';
    $class = new $class_name;               // new Net_Ping
    //下面的非法
    $partial_class_name = 'Ping';
    $class = new "Net_$partial_class_name"; // new Net_Ping
    //合法
    $partial_class_name = 'Ping';
    $class_prefix = 'Net_';
    
    $class_name = "$class_prefix$partial_class_name";
    $class = new $class_name;               // new Net_Ping
  • 相关阅读:
    IntlliJ IDEA 注册码获取或离线破解
    selenium元素定位
    appium元素定位
    django模型之meta使用
    django 之admin使用
    django之models模块使用
    Django的httprequest对象和httpresponse对象
    parameterized之unittest参数化
    HTMLTestRunner不生成报告
    collections之python基本应用
  • 原文地址:https://www.cnblogs.com/Excellent/p/2288718.html
Copyright © 2020-2023  润新知