亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是自動加載;如何使用spl_autoload,__ autoload和spl_autoload

什么是自動加載;如何使用spl_autoload,__ autoload和spl_autoload

PHP
翻閱古今 2019-10-23 15:24:59
我正在學習高級PHP標準,并嘗試實現新的有用方法。之前,我__autoload只是為了避免在每個頁面上包含多個文件而逃脫,但是最近我看到了一個提示__autoload manualspl_autoload_register()為自動加載類提供了更靈活的替代方法。因此,不建議使用__autoload(),以后可能不建議使用或將其刪除。但我真的不知道如何實施spl_autoload和spl_autoload_register
查看完整描述

3 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

spl_autoload_register() 允許您注冊PHP將放入堆棧/隊列中的多個函數(或您自己的Autoload類中的靜態方法),并在聲明“新類”時順序調用。


因此,例如:


spl_autoload_register('myAutoloader');


function myAutoloader($className)

{

    $path = '/path/to/class/';


    include $path.$className.'.php';

}


//-------------------------------------


$myClass = new MyClass();

在上面的示例中,“ MyClass”是您要實例化的類的名稱,PHP將該名稱作為字符串傳遞給spl_autoload_register(),從而允許您選擇變量并將其用于“包含”適當的類/文件。因此,您不需要特別通過include / require語句來包含該類。


就像上面的示例一樣,只需簡單地調用您想要實例化的類,并且由于您已經注冊了spl_autoload_register()自己的函數(通過),該函數可以確定所有類的位置,因此PHP將使用該函數。


使用的好處spl_autoload_register()是,與__autoload()您不同的是,您不需要在創建的每個文件中實現自動加載功能。spl_autoload_register()還可以讓您注冊多個自動加載功能,以加快自動加載速度并使其變得更加容易。


例:


spl_autoload_register('MyAutoloader::ClassLoader');

spl_autoload_register('MyAutoloader::LibraryLoader');

spl_autoload_register('MyAutoloader::HelperLoader');

spl_autoload_register('MyAutoloader::DatabaseLoader');


class MyAutoloader

{

    public static function ClassLoader($className)

    {

         //your loading logic here

    }



    public static function LibraryLoader($className)

    {

         //your loading logic here

    }

關于spl_autoload,手冊指出:


此功能旨在用作的默認實現__autoload()。如果未指定其他內容且spl_autoload_register()沒有任何參數調用該函數,則此函數將用于以后對的任何調用__autoload()。


實際上,如果所有文件都位于一個目錄中,并且您的應用程序不僅使用.php文件,而且還使用擴展名為.inc的自定義配置文件,那么您可以使用的一種策略是添加包含所有內容的目錄文件到PHP的包含路徑(通過set_include_path())。

而且,由于還需要配置文件,因此將用于spl_autoload_extensions()列出要PHP查找的擴展名。


例:


set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');

spl_autoload_extensions('.php, .inc');

spl_autoload_register();

由于spl_autoload是__autoload()magic方法的默認實現,因此當您嘗試實例化新類時,PHP將調用spl_autoload。


希望這可以幫助...


查看完整回答
反對 回復 2019-10-23
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

從PHP 5.3開始,您可以使用spl_autoload_register()名稱空間,這意味著您可以組織項目并自動加載php類,而無需任何要求或包含,也無需重新定義__autoload()函數。


為了演示這種行為,只需創建一個名為index.php的文件:


<?php

spl_autoload_register();

var_dump(new Main\Application);

然后在index.php文件旁邊創建一個名為Main的文件夾。最后,在Main中創建一個名為Application.php的文件,并將以下代碼粘貼到其中:


<?php namespace Main;

class Application{}


查看完整回答
反對 回復 2019-10-23
  • 3 回答
  • 0 關注
  • 696 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號