PHPクラスClass_LoadClassをバージョンアップしますた。

(PHP4)クラスの動的ロードを支援するクラス - Unknown::Programming

↑の記事書いたときに作ったクラスですが、少し更新しました。

<?php

class Class_LoadClass {
    
    var $_base_ext            = 'class.php';
    var $_load_base_classname = '';
    
    function Class_LoadClass ($base_class=null,$base_ext=null) {
        if ( !is_null($base_class) ) $this->load_base_classname($base_class);
        if ( !is_null($base_ext)   ) $this->base_ext($base_ext);
    }
    
    function load_class ($class) {
        if ( strpos($class,'+') === 0 ) {
            $class = substr($class,1);
        }
        else {
            if ( $this->load_base_classname() ) {
                $class = $this->load_base_classname().'_'.$class;
            }
        }
        
        if ( !class_exists($class) ) {
            if ( !preg_match('/^[\w]+$/',$class) ) {
                return false;
            }
            $this->load( sprintf('%s.%s',str_replace('_','/',$class),$this->base_ext()) );
        }
        
        return $class;
    }
    
    function load ($class) {
        require_once( $class );
    }
    
    // Accessor
    function base_ext () {
        $args = func_get_args();
        if ( count($args) ) $this->_base_ext = $args[0];
        return $this->_base_ext;
    }
    function load_base_classname () {
        $args = func_get_args();
        if ( count($args) ) $this->_load_base_classname = $args[0];
        return $this->_load_base_classname;
    }
}

クラスを読み込む部分をrequire_once使ってましたが、それをloadメソッドに切り出すようにしました。

これでloadメソッドをオーバーライドすれば独自の読み込み処理を書いたりすることが可能になりました。

例えば、現状ではクラスの読み込みにrequire_onceを使用しているので読み込みに失敗した場合に、エラーになり処理が中断されてしまいます。

これを読み込み失敗してもエラーにならないように変更するには、

<?php

require_once 'Class/LoadClass.class.php';

class Hoge extends Class_LoadClass {
    
    function load ($class) {
        @include_once($class);
    }
    
}

こんな感じでオーバーライドしてinclude_onceを使用することで、クラスの読み込みに失敗した場合にエラーにならない、といった具合になります。


ついでに今まで作ったものもリストアップしときます。