PHP的類別的自動載入

不言
發布: 2023-03-24 20:40:01
原創
1619 人瀏覽過

這篇文章介紹的內容是關於PHP的類別的自動加載,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

先寫一個HumanModel.php

class HumanModel {
    public function t() {
        echo &#39;人类<br >&#39;;
    }
}
登入後複製
登入後複製


// =引例= //

require(&#39;./HumanModel.php&#39;);$lisi = new HumanModel();$lisi->t(); // 人类
登入後複製
登入後複製


// =類別的自動載入= //

function __autoload($c) {
    echo &#39;~~~~~~~~~&#39;,$c,&#39;~~~~~~~~&#39;;
}$ming = new Dog();
登入後複製
登入後複製


// ===筆記部分1===

/*
類別的自動載入

如果呼叫某個不存在的類,
在報錯之前,我們還可以用__autoload函數
得到一次介入機會

系統會呼叫__autoload()函數
並且把「類別名稱」自動傳給__autoload函數

我們就可以在__autoload裡載入需要的類別
*/

function __autoload($c) {
    echo &#39;我先自动加载&#39;;    echo &#39;./&#39; . $c . &#39;.php&#39;;    echo &#39;<br >&#39;;    require(&#39;./&#39; . $c . &#39;.php&#39;);
}$lisi = new HumanModel();$lisi->t();// 我先自动加载./HumanModel.php// 人类function test() {
    // 函数内可以写任何合法的PHP代码,包含再声明一个函数/类
    class Bird {
        public static function sing() {
            echo &#39;百灵鸟放声歌唱!<br >&#39;;
        }
    }
}// 必须要调用函数然后才能执行内部test();
Bird::sing(); 


/*
Bird::sing(); 

未定义类
转到上面类的自动加载函数中,于是报错如下:
Warning: require(./Bird.php): failed to open stream: No such file or directory
找不到Bird这个php
*/
登入後複製
登入後複製


// ===筆記部分2===

/*
自動載入只能用__autoload函數嗎?
答:不是的,其實也可以指定一個函數.

例如用zidongjiazai()函數

注意:要通知系統知道我們自己寫了一個自動載入方法
用系統函數spl_autoload_register通知
*/

spl_autoload_register(&#39;zidongjiazai&#39;);function zidongjiazai($c) {
    require(&#39;./&#39; . $c . &#39;.php&#39;);
}$HumanModel = new HumanModel();$HumanModel->t();
登入後複製
登入後複製

// Tips:我們也可以註冊類別的一個靜態方法來當自動載入函數

先寫一個HumanModel.php

class HumanModel {
    public function t() {
        echo &#39;人类<br >&#39;;
    }
}
登入後複製
登入後複製


// =引例= //

require(&#39;./HumanModel.php&#39;);$lisi = new HumanModel();$lisi->t(); // 人类
登入後複製
登入後複製


// =類別的自動載入= //

function __autoload($c) {
    echo &#39;~~~~~~~~~&#39;,$c,&#39;~~~~~~~~&#39;;
}$ming = new Dog();
登入後複製
登入後複製


// ===筆記部分1===

/*
類別的自動載入

如果呼叫某個不存在的類,
在報錯之前,我們還可以用__autoload函數
得到一次介入機會

系統會呼叫__autoload()函數
並且把「類別名稱」自動傳給__autoload函數

我們就可以在__autoload裡載入需要的類別
*/

function __autoload($c) {
    echo &#39;我先自动加载&#39;;    echo &#39;./&#39; . $c . &#39;.php&#39;;    echo &#39;<br >&#39;;    require(&#39;./&#39; . $c . &#39;.php&#39;);
}$lisi = new HumanModel();$lisi->t();// 我先自动加载./HumanModel.php// 人类function test() {
    // 函数内可以写任何合法的PHP代码,包含再声明一个函数/类
    class Bird {
        public static function sing() {
            echo &#39;百灵鸟放声歌唱!<br >&#39;;
        }
    }
}// 必须要调用函数然后才能执行内部test();
Bird::sing(); 


/*
Bird::sing(); 

未定义类
转到上面类的自动加载函数中,于是报错如下:
Warning: require(./Bird.php): failed to open stream: No such file or directory
找不到Bird这个php
*/
登入後複製
登入後複製


// ===筆記部分2===

/*
自動載入只能用__autoload函數嗎?
答:不是的,其實也可以指定一個函數.

例如用zidongjiazai()函數

注意:要通知系統知道我們自己寫了一個自動載入方法
用系統函數spl_autoload_register通知
*/

spl_autoload_register(&#39;zidongjiazai&#39;);function zidongjiazai($c) {
    require(&#39;./&#39; . $c . &#39;.php&#39;);
}$HumanModel = new HumanModel();$HumanModel->t();
登入後複製
登入後複製

// Tips:我們也可以註冊類別的一個靜態方法來當自動載入函數

相關推薦:

PHP的抽象類別

以上是PHP的類別的自動載入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板