• 技术文章 >php教程 >php手册

    PHP面向对象学习笔记之一 基础概念

    2016-06-13 11:57:39原创435
    1> if( "false" ) 等效于 if( true), 因为非空字符串是true
    2> 检查数据类型:
    is_array();
    is_object();
    is_string();
    is_null();
    is_integer();
    3> PHP5 引入类的类型提示(type hint),用来约束一个方法的参数类型(不是基本数据类型,而是类):将类名放在需要约束的方法参数之前.
    例如: function write( ShopProduct $shopProduct){}

    4> instanceof 操作符: 如果左边操作数的对象是右边操作数所示的类型,结果为true
    例如: if( $shopProduct instanceof BookProduct ) {}

    5> 继承 class son extends parent{}
    要调用父类的方法, 比如构造函数,用 parent::__construct();

    6> 静态方法和属性
    class StaticExample{
    static public $a;
    static public function hello(){}
    }
    外部访问使用::
    例如: print StaticExample::$a;
    内部访问使用self::
    例如: self::$a;

    7> 抽象类, 抽象方法
    abstract class xxx{
    ...
    abstract function write(); //没有{}
    }

    抽象类的子类要重新声明方法并实现之. 新实现的方法的访问控制不能比抽象方法的访问控制更严格.

    8>接口 interface
    只定义功能,不包含实现. 接口中可以包含属性和方法声明,但方法体为空;
    例如: interface a{
    public function b();
    }
    任何实现接口的类都要实现接口中定义的所有方法,否则就必须是抽象类.
    类在声明中使用implements来实现某个接口.
    class Shop implements a{
    public function b(){
    ...
    }
    }

    9> 异常 exception
    PHP5引入异常类

    10>拦截器 interceptor
    __get($property); 访问未定义的属性时被调用
    __set($property,$value); 给未定义的属性赋值时被调用
    __isset($property); 对未定义的属性使用isset()时被调用;
    __unset($property);对未定义的属性调用unset()时被调用;
    __call($method, $arg_array); 调用未定义的方法时候被调用
    例: __get()的实现

    复制代码 代码如下:


    function __get($property){
    $method="get{$property}";
    if(method_exists($this,$method)){
    return $this->$method();
    }
    }

    function getName(){ return "Bob";}

    function __isset($property){
    $method="get{$porperty}";
    return(method_exists($this, $method));
    }

    function __set($property, $value){
    $method="set{$property}";
    if( method_exists($this,$method)){
    return $this->$method($value);
    }
    }



    11> 析构方法 __destruct()

    12> __clone(); 与clone关键字的区别
    class CopyMe();
    $first= new CopyMe();
    $second=$first;
    // PHP4 : $first和$second是两个完全不同的对象;
    // PHP5: $first和$second指向同一个对象
    PHP5中, 对象的赋值和传递都是引用.
    如果要拷贝,就要用: $second= clone $first; //现在$first和$second是两个完全不同的对象,(by_value copy)
    如果要想控制复制, 要通过实现一个特殊方法__clone()

    13> 自动加载: __autoload()
    PHP5引入__autoload()拦截器方法来自动包含类文件.当PHP遇到试图实例化一个未知类的操作时,会尝试调用__autoload()方法,并将类名当作字符串参数传递给它.
    例如一个很简单的自动定位和包含策略:
    function __autoload( $classname){
    includ_once "$classname.php";
    }

    ====================
    14>使用字符串动态引用类

    复制代码 代码如下:


    $classname="Task";
    require_once("tasks/{$classname}.php);
    $myObj= new $classname();
    $method="getTitle";
    $myObj->$method(); //动态方法


    15>类函数和对象函数

    复制代码 代码如下:


    class_exist(); //检查类是否存在
    get_declared_classes(); //获得当前脚本进程中定义的所有类(array形式返回)
    get_class_methods();//类中所有的public方法列表(array)
    method_exist($objname,$method); //对象或类的方法是否存在
    is_callable();//对象或类的方法不仅存在,且能访问
    get_class_vars(); // 属性
    get_parent_class(类或对象名称); //父类
    is_subclass_of(); //是否子类,不管接口,接口用 instanceof操作符


    16>反射API
    由一系列可以分析属性、方法、类和参数的内置类构成,可以动态获取信息,动态调用方法.
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:域名和cookie问题(域名后缀) 下一篇:PHP中file_exists与is_file,is_dir的区别介绍
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• php批量添加数据与批量更新数据的实现方法,php添加数据• PHP防注入之程序里的敏感信息• PHP辅攻_[学习资料收集]PHP连接SQLServer2005方法• php如何删除多级目录• BluePage通用分页类助开发者提高开发效率
    1/1

    PHP中文网