php 函數__autoload與spl_autoload_register理解


理解自:http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html

__autoload的作用:當我們在一個頁面使用其他文件的類方法時候,經常使用的是require ,require_once ,include,include_once,

比如我們有data.php 

<?php
class Data {
    public static function delData() {
        var_dump('del data');
    }
}

當我們想在person.php中使用data.php的內容時,可以這樣

<?php
class Data {
public static function delData() {
var_dump('del data');
}

public static function catchData() {
echo '我就和你嘿嘿嘿';
}
}

但是,如果有100個界面時,我們還都要一個個的require_once進來嗎?

__autoload的作用就出來,當我們調用一個從未定義的類時,就會加載__autoload方法,你可以使用__autoload方法加載文件

比如.

auto.php

<?php
function __autoload($className){
    $className = $className.'.php';
    if(is_file($className)){
        require_once "$className";
    }
}

person.php

<?php
require_once 'auto.php';
Data::delData();

那 spl_auto_register()有什么作用呢?

他可以加載自己寫的函數來覆蓋__autoload()函數

auto_register.php

<?php
function load($className){
    $fileName = $className.'.php';
    if(is_file($fileName)){
        require_once "$fileName";
    }
}
spl_autoload_register('load');

person.php

<?php
//require_once 'auto.php';
require_once 'spl_auto_register.php';
Data::delData();
Data::catchData();

輸出

string

 'del data' (length=8)

我就和你嘿嘿嘿


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM