国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP命名空間和自動加載初探

2020-03-22 18:23:07
字體:
來源:轉載
供稿:網友
  • 參考資料:PHP手冊-語言參考:http://php.net/manual/zh/language.namespaces.php概要:1. 聲明了命名空間之后,下面的const, function, html' target='_blank'>class都會劃歸到該命名空間。2. 只有聲明過命名空間的PHP 文件才能加載有命名空間的PHP文件。3. PHP 5.3 及以上才能使用命名空間名詞: 關鍵字:namespace 用來聲明 本PHP文件的命名空間 常量:__NAMESPACE__ 用來返回當前命名空間的名稱 默認為空字符串
    操作符: use 默認以最后一個/后的字符串為別名,配合 as 則為 as后的字符串,與MySQL的字段別名一致。實際操作如下:在apache目錄下建立如下文件:index.php,Order.php,User.phpOrder.php 的內容為
     1 <?php 2 /** 3  * @Author: Martin 4  * @Support: Martin 5  * @Last Modified by:   Martin 6  */ 7 namespace Order; 8  9 const STR = 'order list<br />';10 11 function detail()12 {13     return 'order detail<br />';14 }15 function call_by_self()16 {17     return 'call by self<br />';18 }19 /**20  *21  */22 class Orderlist23 {24 25     public function __construct()26     {27         echo 'Class NameSpace is "', __NAMESPACE__, '"';28     }29     public function show_list()30     {31         for ($i = 0; $i < 5; $i++) {32             echo "<ul><li>this is order$i<br />";33             //內部直接訪問34             echo detail();35             echo "</li></ul>";36         }37     }38 }39 //內部通過命名空間訪問40 echo /Order/call_by_self();

    index.php 內容為:

     1 <?php 2 /** 3  * @Author: Martin 4  * @Support: Martin 5  * @Last Modified by:   Martin 6  */ 7 namespace index; 8 include_once('Order.php'); 9 10 //外部訪問class 實例化即可使用11 use Order/Orderlist;12 $orderlist = new orderlist;13 $orderlist->show_list();14 15 //外部訪問靜態變量和function 直接訪問16 use Order;17 echo Order/STR;18 echo Order/detail();

    打印結果為:

    以上內容包含了:通過命名空間來訪問文件和直接實例化訪問,以及本空間直接訪問。命名空間的存在是為了防止兩個同名的class都被載入,使用命名空間在加載第三方的類時能避免同名沖突。下面來說一下自動加載SZ喎?http://www.it165.net/pro/pkqt/" target="_blank" class="keylink">QTCC1xMirs8bKx6O6U3RhbmRhcmQgUEhQIExpYnJhcnkgUEhQserXvL/io6zU2lBIUDXS1Lrz0tG+rcTa1sPU2lBIUNbQo6zO3tDowe3N4rCy17ChowpTUEyw/LqswcvSu8zX1eu21Mr9vt294bm5oaK1/LT6xvehotLss6Ohos7EvP60psDttci1xLqvyv2/4qGjCiZuYnNwOwo8c3Ryb25nPtfUtq/XsNTYv+LT0NLUz8K6r8r9PC9zdHJvbmc+CjxzdHJvbmc+c3BsX2F1dG9sb2FkX2NhbGw8L3N0cm9uZz6jurOiytS199PDy/nT0NLR16Ky4bXEX19hdXRvbG9hZCgpuq/K/cC017DU2Mfrx/PA4AoKPHA+VXNlci5waHAgxNrI3c6qo7o8L3A+Cgo8cHJlIGNsYXNzPQ=="brush:java;">1 namespace User;2 //直接載入Order3 #include('Order.php');4 //自動載入5 spl_autoload_register(function($className) {6 var_dump($className);7 });8 spl_autoload_call('Order');

    打印結果為:

    SPL自動載入函數包含如下:

    spl_autoload_extensions: 注冊并返回spl_autoload函數使用的默認文件擴展名。
    get_include_path: 設置默認引用的文件夾
    spl_autoload_register: 自動引入文件
    實際操作如下:我們重新調整目錄結構和并復制order 到 lib下面 如下:

    修改User.php 如下:

     1 namespace User; 2  3 //直接載入Order 4 #include('Order.php'); 5 //自動載入 6 define('LIB_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR); 7 spl_autoload_register(function ($class) { 8     $path = LIB_DIR . $class . '.lib.php'; 9     include ($path);10 });11 12 spl_autoload_call('Order');13 use Order;14 15 $orderList = new /Order/Orderlist();16 $orderList->show_list();

    打印結果為:

    注意:當采用SPL載入文件時,use并不能觸發spl_autoload_register函數,他會被new觸發,這樣就會提示找不到文件,所有采用spl_autoload_call 來提前觸發自動載入。本文地址:http://www.cnblogs.com/martin-tan/p/4864539.html問題:使用get_include_path,spl_autoload_extensions并且spl_autoload_register默認為空的情況下并不能直接載入目錄下的文件,原因如上。(?)PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 九江市| 鲁山县| 邵阳县| 乌拉特中旗| SHOW| 华阴市| 乌兰察布市| 大同县| 容城县| 宾阳县| 苏尼特左旗| 汤阴县| 宜宾县| 保山市| 墨竹工卡县| 西贡区| 昌都县| 凤凰县| 温州市| 广西| 吉首市| 鞍山市| 鄂州市| 修文县| 伊春市| 衡山县| 乃东县| 兰州市| 稻城县| 伊金霍洛旗| 台山市| 高安市| 南康市| 平泉县| 福贡县| 灵宝市| 武隆县| 宁阳县| 驻马店市| 华阴市| 浦北县|