国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php自動加載機制的深入分析

php自動加載機制的深入分析

2020-04-09 15:38PHP教程網 PHP教程

本篇文章是對php自動加載機制進行了詳細的分析介紹,需要的朋友參考下

一、php中實現自動加載的方法
1.使用require,include,require_once,include_once手工進行加載。
2.使用__autoload來進行自動加載
3.使用spl的autoload來實現自動加載
手工加載的實現:

當需要加載的文件很少的時候我們可以使用第一個來完成。這樣做很簡單也沒問題。

復制代碼 代碼如下:

require_once 'a.php';
require_once 'b.php';
require_once 'c.php';


但是當需要加載文件很多的時候這樣做還行嗎?需要寫十個,二十個require_once 或者更多的時候我們該怎么辦?

 

這個時候我們可以使用__autoload方法來簡化我們的代碼。

__autoload加載的實現:
我們在test目錄下創建一個in.php文件,內容如下。

復制代碼 代碼如下:

echo '我是test下面的in.php<br />';


然后在test目錄下創建一個loader.php,內容如下。

復制代碼 代碼如下:

// 需要重載__autoload方法,自定義包含類文件的路徑 
function __autoload($classname) 

 $class_file = strtolower($classname).".php"; 
 if (file_exists($class_file)){ 
  require_once($class_file); 
 } 
}
@$test = new in(); // 執行到這里會輸出 <SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">我是test下面的in.php</SPAN>


沒問題,成功了!我們還可以創建其他的文件來進行加載,但是當需要的文件很多需要區分目錄的時候怎么辦?

 

這時我們需要修改loader.php可以使用映射來找到要加載的文件。

復制代碼 代碼如下:


function __autoload($class_name) {
 $map = array(
  'index' => './include/index.php',
  'in' => './in.php'
 );

 

    if (file_exists($map[$class_name]) && isset($map[$class_name])) {
        require_once $map[$class_name];
    }
}
new index();


這種方法的好處就是類名和文件路徑只是用一個映射來維護,所以當文件結構改變的時候,不需要修改類名,只需要將映射中對應的項修改就好了。

 

但是__autoload在一個項目中只能使用一次,當你的項目引用了別人的一個項目,你的項目中有一個__autoload,別人的項目也有一個__autoload,這樣兩個__autoload就沖突了.解決的辦法就是修改__autoload成為一個,這無疑是非常繁瑣的,應用場景單一。

spl的autoload加載實現:
spl的autoload系列函數使用一個autoload調用堆棧,你可以使用spl_autoload_register注冊多個自定義的autoload函數,應用場景廣泛

php自動加載機制的深入分析

•在test目錄下建立in.php,內容如下  

復制代碼 代碼如下:

<?php
class in {
 public function index() {
  echo '我是test下面的in.php';
 }
}
?>


在test目錄下建立loader.php,內容如下

復制代碼 代碼如下:

<?php
set_include_path("/var/www/test/"); //這里需要將路徑放入include
spl_autoload("in"); //尋找/var/www/test/in.php
$in = new in();
$in->index();


•spl_autoload_register將函數注冊到SPL __autoload函數棧中,修改loader.php

復制代碼 代碼如下:

function AutoLoad($class){
    if($class == 'in'){
        require_once("/var/www/test/in.php");
    }
}
spl_autoload_register('AutoLoad');
$a = new in();
$a->index();


•spl_autoload_register注冊多個自定義的autoload函數的應用
首先在test目錄下建立mods文件夾并建立inmod.mod.php內容如下:

復制代碼 代碼如下:

<?php
class inmod
{
 function __construct()
 {
  echo '我是mods下的in';
 }
}


然后在test目錄下建立libs文件夾并建立inlib.lib.php內容如下:

復制代碼 代碼如下:

<?php
class inlib
{
 function __construct()
 {
  echo '我是libs下的in';
 }
}


最后在test目錄下建立loader.php內容如下

復制代碼 代碼如下:

<?php
class Loader {
    /**
    * 自動加載類
    * @param $class 類名
    */
    public static function mods($class) {
        if($class){
   set_include_path( "/var/www/test/mods/" );
   spl_autoload_extensions( ".mod.php" );
   spl_autoload( strtolower($class) );
        }
    }
    public static function libs($class) {
  if($class){
   set_include_path( "/var/www/test/libs/" );
   spl_autoload_extensions( ".lib.php" );
   spl_autoload( strtolower($class) );
        }
    }
}
spl_autoload_register(array('Loader', 'mods'));
spl_autoload_register(array('Loader', 'libs'));
new inmod();//輸出<SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是mods下的in</SPAN>
new inlib();//<SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">輸出</SPAN><SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是libs下的in</SPAN>

 

 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 不卡一区在线观看 | 在线成人亚洲 | 91国在线产 | 日韩欧美在线观看 | 青青草中文字幕 | 国产视频一二区 | 激情免费视频 | 美女一区二区三区 | 久草国产视频 | www国产亚洲精品久久网站 | 久久精品亚洲精品国产欧美kt∨ | 色.com | 成人午夜精品久久久久久久3d | 在线视频 亚洲 | 黄毛片免费看 | 精品中文字幕一区 | 久久精品91久久久久久再现 | 亚洲欧美在线精品 | 91麻豆蜜桃一区二区三区 | 日韩欧美a级v片免费播放 | 亚洲一区免费观看 | 成人在线观看免费爱爱 | 亚洲精品成人av | 午夜在线 | 亚洲品质自拍视频网站 | 天堂av资源 | 日韩一区二区三区福利视频 | 日本在线中文 | 欧州一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 中文字幕国产一区 | 精品一区二区久久久久久久网站 | 极品国产粉嫩av免费观看 | 亚洲成人第一 | 国产精品美女久久久久久久网站 | 久久久亚洲精品中文字幕 | 日韩一区二区三区在线看 | 欧美日韩国产精品一区 | 日韩视频免费看 | 一级黄色片欧美 | 日韩欧美在线视频 |