zoukankan      html  css  js  c++  java
  • PHP面向对象的一些深入理解

    1.$this就是这个对象的地址,$this不能在类外部使用.
    2.构造函数 __construct 和析构函数都没有返回值;一旦一个对象成为垃圾对象(没有任何变量引用的对象,或者=null),析构函数 __destruct就会立即调用。析构函数不能传参数。
    3.全局变量 global $a 在程序中都可以使用的变量(非面向对象)。
    4.静态变量 public static $a 一个类的所有对象共享的变量(面向对象)。[类外访问] 类名::$a; [类内访问] 类名::$a 或者 self::$a
    5.静态方法 public static function static_func_name(){ } 属于所有对象实例,静态方法只能操作静态变量;非静态方法既可以操作静态变量,也可以操作非静态变量。[类外访问] 类名:: static_func_name(); 或者 对象名-> static_func_name(); [类内访问] 类名:: static_func_name() 或者 self:: static_func_name()
    6.关于访问修饰符:public(全局、继承类、本类);protected(继承类、本类);private(本类)。
    7.继承 extends:子类默认不会调用父类的构造函数。[子类访问父类的方法(包括构造函数)] 父类::方法名(); 或者 parent::方法名(); 如果子类的方法和父类方法相同,称为 方法重写(或者叫:方法覆盖)。多态的体现:当子类没有覆盖父类的方法则调用父类的方法,当子类覆盖了父类的方法,则调用自己的方法。
    8. 方法重载 overload(定义多个同名函数,我认为没这个必要),php5 默认不直接支持方法重载,使用__call魔术方法,模拟方法重载的效果。
    9. 抽象类(可以是public/protected/private)和抽象方法是当父类的一些方法不能确定时会用到。抽象类 abstract class Obj{}; 抽象方法不能有方法体 abstract public function func_name(param1,...); 抽象类中可以没有抽象方法,但是抽象方法必须存在于抽象类中!如果A1类继承了一个抽象类 A,则要求A1类实现从A类继承的所有抽象方法
    10.接口(更加抽象的抽象类,接口的方法都不能有方法体且必须是public,不能去实例化接口)。interface iJK{},class 类名 implements iJK,iJK2{}。接口中可以有属性,但是必须是常量,并且是public。 interface iUsb{ const A=90; //如果是 $a=90; 就会出错 } //要取到属性:iUsb::A; 一个接口不能继承其他的类,但是可以继承别的接口。一个接口可以继承多个其它的接口.当一个类去实现了某些接口,则必须把所有接口的方法都实现。 一个类可以同时继承他的父类,而且实现接口: class A1 extends A implements iUsb2,iUsb3{…}
    11.final关键字:修饰类 或者 方法,不能修饰属性。 ① 希望某个类不能被继承: final class A{} ② 希望某个方法不能被子类重载(改写): class A{final public function func_name(){} }
    12.const关键字:类中的常量。class 类名{const 常量名(大写)= 赋初值; } interface 接口名{const 常量名(大写)= 赋初值;} [调用方法]类名::常量名; 接口名::常量。在类的内部也可以使用 self::常量。
    13.使用instanceof检测当前对象是否属于一个类的实例,返回布尔。get_class() 函数返回对象所属类的名字,如果不是对象则返回false。

    [类的组合与继承]
    1. 继承和多态都是对类进行复用,继承是类级别的复用,多态是方法级别的复用。
    2. 子类继承父类的属性和方法,称为继承。
    3. 在继承中,用parent指代父类,用self指代自身,用“:” 运算符(范围解析操作符)调用父类的方法。
    4. 静态:如果声明类成员或方法为static,就可以不实例化类而直接访问,也不能用“:”访问一个非静态方法,如果这样会导致E_STRICT 级别的错误。php.ini: error_reporting=E_ALL | E_STRICT display_errors=On
    5.继承最大的优点是扩展简单,但是其缺点大于优点。一般继承树不要多于三层。若要禁止被继承,使用final修饰符。

    [接口 interface]
    1. PHP 中接口的语义是有限的,使用接口的地方并不多,可以更多的使用抽象类。
    2. SPL(标准PHP库),实现一些接口,最主要的就是iterator迭代器接口。
    3. toString方法就是接口的一种变相实现;Traits可以被视为一种加强型的接口。
    4. 接口只是一个声明,一旦使用interface关键字,就应该实现它。

    [反射 ReflectionClass]
    1.使用class函数返回对象属性的关联数组:
    ① get_object_vars($obj); //返回对象属性的关联数组
    ② echo get_class($obj); //获取对象属性列表所属的类
    ③ get_class_vars(get_class($obj)); //类属性
    ④ get_class_methods(get_class($obj)); //返回由类的方法名组成的数组
    2. 反射完整的描述了一个类或者对象的原型,不仅可以用于类和对象,还可以用于函数、扩展模块、异常。
    3. 反射的消耗很大,能找到替代方案的情况下就不要滥用。

    【单例模式】

    <?php 
    class demo{
    private static $MyObject ; //保存对象的静态属性
    private function __construct(){} //私有化构造函数
    private function __clone(){} //禁止克隆
    public static function getInstance(){
    if(!(self::$MyObject instanceof self)){
    self::$MyObject = new self;
    }
    return self::$MyObject;
    }
    }
    ?>

    【魔术常量】

    class moshu{
    function __construct(){
    echo "<br>".__LINE__; //当前的行数
    echo "<br>".__FILE__; //当前文件绝对路径及文件名
    echo "<br>".__DIR__; //当前文件绝对路径
    echo "<br>".__CLASS__;//当前的类名
    echo "<br>".__FUNCTION__; //当前的函数(方法)名
    echo "<br>".__METHOD__; //类的方法名
    echo "<br>".__NAMESPACE__; //命名空间[不常用]
    }
    }
    $ms=new moshu();
  • 相关阅读:
    盘点开发中那些常用的MySQL优化
    刚入职!就遇到上亿(MySQL)大表的优化
    面试技巧|“唇枪舌剑”之十大招式
    rpc是什么?php中流行的rpc框架有哪些?
    使用 memory_limit 限制 PHP 进程的内存使用
    swoole查看子进程与主进程关系
    使用SecureCRT连接AWS的EC2(Linux系统)亲测可行
    substitute Simple JavaScript Template :
    git 简单图表
    jquery 队列
  • 原文地址:https://www.cnblogs.com/rxbook/p/6009030.html
Copyright © 2011-2022 走看看