php spl

    技术2022-05-19  54

    spl_autoload_register

    (PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数

     

    说明

    bool spl_autoload_register ([ callback $autoload_function ] )

    将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。 如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为 spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或spl_autoload_call()。

     

    注:SPL是Standard PHP Library(标准PHP库)的缩写。它是PHP5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种Iterator接口或类。SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。

     

    参数

     

    autoload_function

    欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数spl_autoload()

     

    返回值

    成功时返回 TRUE, 或者在失败时返回 FALSE.

     

    当PHP找不到类文件会调用这个方法,当注册了自己的函数或方法时,PHP不会调用__autoload()函数,而会调用自定义的函数

    通过该函数实现自动加载,很多框架就用这种方法自动加载类

    范例:

    <?php spl_autoload_register(function($class) { $file = $_SERVER['DOCUMENT_ROOT'].'/predis/lib/'.strtr($class, '//', '/').'.php'; if (file_exists($file)) { require $file; return true; } }); $single_server = array( 'host' => '192.168.131.169', 'port' => 6379, 'database' => 0 ); // 自动加载Client类及所依赖的类 $redis = new Predis/Client($single_server); $category1 = json_encode(array("id" => "1000211","category" => "国内新闻")); $category2 = json_encode(array("id" => "1000212","category" => "国际新闻")); $category3 = json_encode(array("id" => "1000213","category" => "娱乐新闻")); $category4 = json_encode(array("id" => "1000214","category" => "娱乐新闻")); $category5 = json_encode(array("id" => "1000215","category" => "娱乐新闻")); echo $redis->zadd('news.category',1000211,$category1).'<br>'; echo $redis->zadd('news.category',1000215,$category5).'<br>'; echo $redis->zadd('news.category',1000212,$category2).'<br>'; echo $redis->zadd('news.category',1000214,$category4).'<br>'; echo $redis->zadd('news.category',1000213,$category3).'<br>'; //$category = $redis->zcount('news.category',1000212,1000214); $category = $redis->zrangebyscore('news.category',1000212,1000214); foreach($category as $value) { var_dump(json_decode($value)).'<br>'; } var_dump($redis->zcard('news.category')); var_dump($redis->zscore('news.category',$category3)); var_dump($redis->zrangebyscore('news.category',1000214,1000214)); ?>

     


    最新回复(0)