簡體   English   中英

spl_autoload_register不工作

[英]spl_autoload_register not working

我在主目錄中創建了5個包含5個類(Ad_Class,Blocked_Class,Friend_Class,Image_Class,Profile_Class)的文件夾。 我還在所提到的文件夾中創建了相應的類,並使用確切的名稱作為文件夾。 即,如果文件夾名稱是Ad_Class,則文件夾中的類也與“類Ad_Class”中的文件夾名稱相同。

在index.php文件中,我編寫了以下代碼:

function Ad_Class($name)
{
    include "Ad_Class/$name.php";
}
function Blocked_Class($name)
{
    include "Blocked_Class/$name.php";
}
function Friend_Class($name)
{
    include "Friend_Class/$name.php";
}
function Image_Class($name)
{
    include "Image_Class/$name.php";
}
function Profile_Class($name)
{
    include "Profile_Class/$name.php";
}

spl_autoload_register("Ad_Class");
spl_autoload_register("Blocked_Class");
spl_autoload_register("Friend_Class");
spl_autoload_register("Image_Class");
spl_autoload_register("Profile_Class");

$a = new Ad_Class;
$b = new Blocked_Class;
$c = new Blocked_Class;
$d = new Image_Class;
$e = new Profile_Class;

執行上面的代碼后,我收到以下警告:

Warning: include(Ad_Class/Blocked_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 4

Warning: include(): Failed opening 'Ad_Class/Blocked_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 4

Warning: include(Ad_Class/Image_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 4

Warning: include(): Failed opening 'Ad_Class/Image_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 4

Warning: include(Blocked_Class/Image_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 8

Warning: include(): Failed opening 'Blocked_Class/Image_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 8

Warning: include(Friend_Class/Image_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 12

Warning: include(): Failed opening 'Friend_Class/Image_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 12

Warning: include(Ad_Class/Profile_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 4

Warning: include(): Failed opening 'Ad_Class/Profile_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 4

Warning: include(Blocked_Class/Profile_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 8

Warning: include(): Failed opening 'Blocked_Class/Profile_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 8

Warning: include(Friend_Class/Profile_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 12

Warning: include(): Failed opening 'Friend_Class/Profile_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 12

Warning: include(Image_Class/Profile_Class.php): failed to open stream: No such file or directory in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 16

Warning: include(): Failed opening 'Image_Class/Profile_Class.php' for inclusion (include_path='.;C:\Users\Robert\Documents\web development\xampp\php\PEAR') in C:\Users\Robert\Documents\web development\xampp\htdocs\xampp\web_development\development.php on line 16

為什么會這樣? 誰能解釋一下?

更新:我發現以下代碼可以正常工作。 如果您有任何建議,請隨時分享!

function ad_class($class)
{
    if(!class_exists($class) && $class == "Ad_Class")
    {
        include "Ad_Class/$class" . ".php";
    }
    elseif(!class_exists($class))
    {
        return;
    }
}

function blocked_class($class)
{
    if(!class_exists($class) && $class == "Blocked_Class")
    {
        include "Blocked_Class/$class" . ".php";
    }
    elseif(!class_exists($class))
    {
        return;
    }
}

function friend_class($class)
{
    if(!class_exists($class) && $class == "Friend_Class")
        {
        include "Friend_Class/$class" . ".php";
    }
    elseif(!class_exists($class))
    {
        return;
    }
}

function image_class($class)
{
    if(!class_exists($class) && $class == "Image_Class")
    {
        include "Image_Class/$class" . ".php";
    }
    elseif(!class_exists($class))
    {
        return;
    }
}

function profile_class($class)
{
        if(!class_exists($class) && $class == "Profile_Class")
    {
        include "Profile_Class/$class" . ".php";
    }
    elseif(!class_exists($class))
    {
        return;
    }
}
spl_autoload_register("ad_class");
spl_autoload_register("blocked_class");
spl_autoload_register("friend_class");
spl_autoload_register("image_class");
spl_autoload_register("profile_class");

$a = new Ad_Class;
$a->ad();

$b = new Blocked_Class;
$b->block();

$c = new Friend_Class;
$c->fr();

$d = new Image_Class;
$d->image();

它產生以下內容:廣告被阻止的朋友形象

這只不過是顯示實例化對象的類名,以查看代碼在加載類時是否正常工作。

spl_autoload_register()堆棧,因此它將為您嘗試創建的每個類運行已定義的所有五個函數, 無論它是哪個類 以此為例,重新設計以滿足您的需求:

spl_autoload_register( function($name) {
    if (is_file('/classes/'.$name.'.class.php')) {
        require_once('/classes/'.$name.'.class.php');
    }
});

使用is_file()檢查文件將避免所有那些沒有此類文件或目錄警告的頭痛。 根據您的文件路徑布局,您可能需要展開我使用switch()語句或類似內容給出的匿名函數示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM