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()的实现 <div class="codetitle"><a style="CURSOR: pointer" data="50927" class="copybut" id="copybut50927" onclick="doCopy('code50927')"> 代码如下:<div class="codebody" id="code50927"> 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>使用字符串动态引用类 <div class="codetitle"><a style="CURSOR: pointer" data="42641" class="copybut" id="copybut42641" onclick="doCopy('code42641')"> 代码如下:<div class="codebody" id="code42641"> $classname="Task"; require_once("tasks/{$classname}.php); $myObj= new $classname(); $method="getTitle"; $myObj->$method(); //动态方法 15>类函数和对象函数 <div class="codetitle"><a style="CURSOR: pointer" data="20615" class="copybut" id="copybut20615" onclick="doCopy('code20615')"> 代码如下:<div class="codebody" id="code20615"> 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 由一系列可以分析属性、方法、类和参数的内置类构成,可以动态获取信息,动态调用方法. (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|