chengren-成人-php系列3
2010年最新PHP類的精縮歸納
chengren-成人-php系列3
?
十:類型提示:
注意,類型提示功能只能用于參數為對象的提示,而無法用于為整數,字串,浮點等類型提示。有些類的方法需要傳入的參數為所期望的對象類型,可以用下面的方法達到強制實施此替則。要達到類型提示,只要在方法的對象型參數前加一個已存在的類的名稱,如:function funname(OtherClassName $otherclassINSName,$c....),注意,OtherClassName必須是存在的類。如下:
| class em{ var $k=56; } class test{ function __construct() { echo $this->addab(new em(),2); } function addab(em $j,$c) //這個方法,即可以在內部調用,也可以在外部調用。只要作用域許可。 { return $j->k+$c; } } $a = new test(); $b = new em(); echo $a->addab($b,2); //或 $a->addab(new em(),2); |
十一、類的管理:
1、instanceof關鍵字:用于分析一個對象是否是某一個類的實例或子類或是實現了某個特定的接口:如下例,但要注意: 類名沒有任何引號等定界符,否則會出錯。如test不能用'test'
| class test2{} class test{} class testChilern Extends test{} $a = new test2(); $m = new test(); $i = ($m instanceof test); if($i)echo '$m是類test的實例!<br />'; // get this value switch ($a instanceof test){ case true : echo 'YES<br />'; break; case false : echo 'No<br />'; //get this value break; } $d=new testChilern(); if($d instanceof test)echo '$d是類test的子類!<br />'; // get this value |
2、確定類是否存在:boolean class_exists(string class_name): class_exists('test');
3、返回類名:string get_class(object),成功時返回實例的類名,失敗則返回FALSE:
| $a = new test2(); echo get_class($a); //返回 test2 |
4、了解類的公用屬性:array get_class_vars('className') ,返回關鍵數組:包含所有定義的public屬性名及其相應的值。這個函數不能用實例名做變量
5、返回類方法:get_class_methods('test'); //或: get_class_methods($a);可用實例名做參數,返回包括構造函數在內的所有非私有方法。
6、print_r(get_declared_classes())了解當前PHP版本中所有的類名。PHP5有149個。
7、get_object_vars($a)返回實例中所有公用的屬性及其值的關聯數組。注意它和get_class_vars()的區別:
| /* (1) get_object_vars($a)是用實例名做參數,而get_class_vars('test')是用類名做參數。 * (2) get_object_vars($a)獲得的屬性值是實例運行后的值,而get_class_vars('test')獲得的屬性值是類中的初始定義。 * (3) 兩者均返回關聯數組,且均對未賦值的屬性返回NULL的值。如類test中有定義了public $q;則返回Array ( [v] => 5 [q]=>) , */ |
8、返回父類的名稱:get_parent_class($b);//或get_parent_class('test2'); 返回test
9、確定接口是否存在:boolean interface_exists($string interface[,boolean autoload])
10、確定對象類型: boolean is_a($obj,'className'),當$obj屬于CLASSNAME類時,或屬于其子類時,返回TRUE,如果$obj與class類型無關則返回FALSE。如:is_a($a,'test')
11、確定是否是某類的子對象:當$b是繼承自TEST類時,返回TRUE,否則FALSE。boolean is_subclass_of($b,'test');
12、確定類或實例中,是否存在某方法。method_exists($a,'getv') //或用method_exists('test','getv'),此函數適用于非public定義的作用域的方法。
以上函數實例:
| class test{ public $v=2; private $c=5; function __construct(){ $this->v=5; } private function getv(){ return $this->v; } } class test2 extends test{} $a=new test(); $b=new test2(); print_r( get_class_methods('test')); //或:print_r( get_class_methods($a)); 均返回:Array ( [0] => __construct [1] => getv ) echo '<br />'; print_r( get_class_vars('test')); //返回:Array ( [v] => 2 ),和上面不一樣,不能用print_r( get_class_methods($a)); echo '<br />'; echo get_parent_class($b);//或get_parent_class('test2'); 返回test echo '<br />'; echo is_a($b,'test');// 返回1 echo '<br />'; if(is_subclass_of('test2','test'))echo '是子類!'; //或(is_subclass_of($b,'test')),返回1,當參數1為$a時則返回false, echo '<br />'; echo method_exists($a,'getv') //或用method_exists('test','getv')返回1,本函數也適用于用private等定義域的方法。 |
十一、自動加載類庫文件:
當類多了以后,比如要在一個文件中載入3個類庫文件:a.class.php,b.class.php,c.class.php要用三個require_once
| require_once('classes/a.class.php); require_once('classes/b.class.php); require_once('classes/c.class.php); |
可以用PHP5自動加載的功能來處理:在全局應用配置文件中,定義一個特殊的函數__autoload($class)函數(__autoload并不是一個類的方法,只是單獨的函數,和類沒有關系):
| function __autoload($class){ require_once("classes/$class) } |
該函數放哪沒有關系,在創建類實例時,也不必去調用這個autoload函數。PHP會自動完成。但務必注意一點:“在調用頁面上創建實例所使用的類名稱”、和“被調用的文件名”、以及“該文件中的類的名稱”3個必須是一樣的。這樣就不需要去調用__autoload();如果不一樣則必須單獨調用__autoload('c');并給它一個文件名前綴。如:
c.class.php文件的代碼是:
| <?php class c{ public $m=7; } ?>這里代碼的類名稱是c,而文件名也是c, 現在要在index.php調用: <?php function __autoload($class){ require_once "$class.class.php"; } $m = new c(); //創建實例調用的類也是c echo $m->m; ?> |
此時PHP會自動調用根目錄下的c.class.php中的類C。
但如果c.class.php中的代碼是:
| <?php class mm{ public $m=7; } ?> 而調用頁index.php代碼是: <?php function __autoload($class){ require_once "$class.class.php"; } # __autoload('c'); //如果不加這一行就會出錯。 $m = new mm(); echo $m->m; ?> |
會出錯,提示找不到mm.class.php文件。這時可以加一行__autoload('c');但這樣就達不到簡化代碼的目的。
轉載于:https://www.cnblogs.com/chengren/archive/2010/03/30/1700386.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的chengren-成人-php系列3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何取消网商银行
- 下一篇: php.ini 配置详解