php的spl

WBOY
WBOY原創
2016-06-06 19:45:161240瀏覽

在php5中的标准库方法spl_autoload相当于实现自己的__autoload ? php function __autoload( $classname ){ if ( is_file ( $classname .'.php' ){ include $classname .'.php' ; } elseif ( is_file ( $classname .'.inc' ){ include $classname .'.inc' ; }

在php5中的标准库方法spl_autoload相当于实现自己的__autoload

<span>php
    </span><span>function</span> __autoload(<span>$classname</span><span>){
        </span><span>if</span>(<span>is_file</span>(<span>$classname</span>.'.php'<span>){
            </span><span>include</span> <span>$classname</span>.'.php'<span>;
        } </span><span>elseif</span>(<span>is_file</span>(<span>$classname</span>.'.inc'<span>){
            </span><span>include</span> <span>$classname</span>.'.inc'<span>;
        }
    }</span>

它会在注册目录下自动寻找与$classname同名的.php/.inc文件。当然,你也可以指定特定类型的文件,方法是注册扩展名

<span>php
    spl_autoload_extensions(</span>'.php,.inc,.some');

这样,它也会搜索.some文件。默认,php是不会启动spl_autoload的,那么怎样才能自动让spl_autoload生效呢呢?方法是

<span>php
    spl_autoload_register();</span>

spl_autoload_register有一个$callback参数,如果不指定,它就会自动注册spl_autoload,为了能搜寻更多的自动加载目录,可以在这些代码前面设置自动加载目录

<span>php
    </span><span>set_include_path</span>(<span>get_include_path</span>() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);

这样,当php找不到指定的类时,就会在set_include_path指定的目录下寻找。

这些方法常用在php框架中。比如把上面的介绍串连起来:

<span>set_include_path</span>(<span>get_include_path</span>() . PATH_SEPARATOR . 'some/path' .<span> DIRECTORY_SEPARATOR); spl_autoload_extensions(</span>'.php,.inc,.some'<span>); spl_autoload_register();</span></p> <p>当你要加载some/path下面的classA类时,它会在目录下寻找classa.php或classa.inc或classa.some,这样你就可以放心地运用new classA或extends classA</p> <p></p> <pre class="brush:php;toolbar:false"><span>php ClassB </span><span>extends</span><span> ClassA { </span><span>//</span><span> code..</span> <span> } </span><span>$a</span> = <span>new</span><span> ClassA; </span><span>$b</span> = <span>new</span> ClassB;

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn