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

2 篇文章 0 订阅
2 篇文章 0 订阅
 

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

    由一系列可以分析属性、方法、类和参数的内置类构成,可以动态获取信息,动态调用方法.

    

 

    

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值