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

首頁 > 語言 > PHP > 正文

PHP命名空間與自動加載類詳解

2024-05-05 00:05:14
字體:
來源:轉載
供稿:網友

本文實例講述了PHP命名空間與自動加載類。分享給大家供大家參考,具體如下:

今天我要給大家介紹的是PHP的命名空間 和 自動加載類

我先簡單的分開演示 在放在一起

大家請看:

什么是自動加載類?

想必大家都應該知道__autoload 這個魔術方法

$db = new DB();function __autoload($className){echo $className;exit();//在這個里面引用類}

在運用這個類只能加載一次 ,在很多時候我們要引入的不止一個類這個時候怎么辦呢!

牛逼的php大神們  出了個新方法 來解決 這個問題  請看就是這個函數

spl_autoload_register() 滿足了此類需求。 它實際上創建了 autoload 函數的隊列,按定義時的順序逐個執行。相比之下, __autoload() 只可以定義一次。

這個函數的用法有很多  這里先給大家介紹一種使用方法

如下:

function load1($className){echo 1;require $className . '.php';}spl_autoload_register('load1'); //將load1函數注冊到自動加載隊列中。$db = new DB(); //找不到DB類,就會自動去調用剛注冊的load1函數了//php 5.3之后,也可以像這樣支持匿名函數了。spl_autoload_register(function($className){if (is_file('./lib/' . $className . '.php')) {require './lib/' . $className . '.php';}});

多個spl_autoload_register的使用

判斷是否有此文件

如果有引入 如果沒有 沒有如果了,哪來的如果

function load1($className){  echo 1;  if (is_file($className . '.php')) {    require $className . '.php';  }}function load2($className){  echo 2;  if (is_file('./app/' . $className . '.php')) {    require './app/' . $className . '.php';  }}function __autoload($className){  echo 3;  if (is_file('./lib/' . $className . '.php')) {    require './lib/' . $className . '.php';  }}//注冊了3個spl_autoload_register('load1');spl_autoload_register('load2');spl_autoload_register('__autoload');$db = new DB(); //DB就在本目錄下$info = new Info(); //Info 在/lib/Info.php

我們可以打印spl_autoload_functions()函數,來顯示一共注冊了多少個自動加載:

var_dump(spl_autoload_functions());//數組的形式輸出array (size=3)0 => string 'load1' (length=5)1 => string 'load2' (length=5)2 => string '__autoload' (length=10)

命名空間

一個php文件里 是不支持 new 兩個名字的

這個時候我們就能用的到命名空間了

namespace app;class new{public function ten(){echo "85";}}namespace hii;class new{public function ten(){echo "85";}}

spl_autoload_register自動加載+namespace命名空間 的使用

廢話不多數  看例子

AutoLoading/loading

<?phpnamespace AutoLoading;class loading {public static function autoload($className){    //把 / 轉換層 / , 便于兼容Linux文件找。Windows 下是通用的    //由于namspace 很規格,所以直接很快就能找到    $fileName = str_replace('//', '/', DIR . '//'. $className) . '.php';    if (is_file($fileName)) {    require $fileName;    } else {    echo $fileName . ' is not exist'; die;    }  }}

上面就是一個自動加載的核心思想方法。下面我們就來spl_autoload_register來注冊這個函數:

index.php

<?php//定義當前的目錄絕對路徑define('DIR', dirname(__FILE__));//加載這個文件require DIR . '/loading.php';//采用`命名空間`的方式注冊。php 5.3 加入的//也必須是得是static靜態方法調用,然后就像加載namespace的方式調用,注意:不能使用usespl_autoload_register("//AutoLoading//loading::autoload");// 調用三個namespace類//定位到Lib目錄下的Name.phpLib/Name::test();//定位到App目錄下Android目錄下的Name.phpApp/Android/Name::test();//定位到App目錄下Ios目錄下的Name.phpApp/Ios/Name::test();

由于我們是采用PSR-O方式來定義namespace的命名的,所以很好的定位到這個文件的在哪個目錄下了。很爽。對不對。

APP/Android/Name

namespace App/Android;class Name{public function __construct(){echo __NAMESPACE__ . "<br>";}public static function test(){echo __NAMESPACE__ . ' static function test <br>';}}

所以就會很容易找到文件,并輸出:

Lib static function test
App/Android static function test
App/Ios static function test

好了。基本的東西就講完了.

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 朝阳县| 杨浦区| 丹阳市| 东乡| 固阳县| 景谷| 富阳市| 淅川县| 广灵县| 乐东| 临漳县| 界首市| 繁昌县| 五河县| 绥滨县| 酒泉市| 青浦区| 昌黎县| 汪清县| 金塔县| 珲春市| 太原市| 突泉县| 连州市| 天峻县| 齐齐哈尔市| 清河县| 枣强县| 潞西市| 咸宁市| 吉林省| 兴宁市| 宣恩县| 曲阳县| 渑池县| 福贡县| 二手房| 泉州市| 成武县| 永宁县| 永吉县|