php自动加载autoload机制示例分享


Posted in PHP onFebruary 20, 2014

1,自定义函数

2,spl_autoload_register()

liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ ll ./*
-rw-rw-r-- 1 liuyuan liuyuan  800 Feb 19 11:39 ./func_autoload.php
-rw-rw-r-- 1 liuyuan liuyuan  906 Feb 19 11:28 ./spl_autoload.php./include:
total 16
drwxrwxr-x 2 liuyuan liuyuan 4096 Feb 19 11:42 ./
drwxrwxr-x 3 liuyuan liuyuan 4096 Feb 19 11:43 ../
-rw-rw-r-- 1 liuyuan liuyuan  142 Feb 19 11:42 aClass.php
-rw-rw-r-- 1 liuyuan liuyuan  143 Feb 19 11:42 bClass.php

首先看自定义函数方式:

<?php
    define('EOL', (PHP_SAPI == 'cli') ? PHP_EOL : '</ br>');
    print_r(get_included_files());
    echo EOL;
    print get_include_path();
    echo EOL;
    //set_include_path(get_include_path().PATH_SEPARATOR.'/var/www/ly_php/php_spl/include/');
    //set_include_path(dirname(__FILE__).'/include');
    //set_include_path(dirname(__FILE__).'/include/');    function __autoload($className){
        $filename = './include/'.$className.'.php';
        //$filename = './include/'.$className.'.php';
        //$filename = '/var/www/ly_php/php_spl/include/'.$className.'.php';
        if(file_exists($filename)){
            include_once $filename;
        }else{
            exit('no file');
        }
    }
    $a = new aClass();
    $b = new bClass();
    print_r(get_included_files());
?>

运行结果如下:

liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ php func_autoload.php 
Array
(
    [0] => /var/www/phpgcs/php_autoload/func_autoload.php
).:/usr/share/php:/usr/share/pear
aClass is loaded
bClass is loaded
Array
(
    [0] => /var/www/phpgcs/php_autoload/func_autoload.php
    [1] => /var/www/phpgcs/php_autoload/include/aClass.php
    [2] => /var/www/phpgcs/php_autoload/include/bClass.php
)

第二种方式:

<?php
    class myLoader{
        public static function autoload($className){
            $filename = './include/'.$className.'.php';
            if(file_exists($filename)){
                include_once $filename;
            }else{
                exit('no file');
            }
        }
    }    define('EOL', (PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
    spl_autoload_register(array('myLoader', 'autoload'));
    /**
    *__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
    * 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list
    */
    //spl_autoload_register( '__autoload' );
 
    error_reporting(E_ALL^E_NOTICE^E_WARNING^E_ERROR);
    error_reporting(E_NOTICE | E_WARNING );
    $a = new aClass();
    print_r(get_included_files());
    echo EOL;
    $b = new bClass();
    echo EOL;
?>

运行结果如下:

liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ php spl_autoload.php 
aClass is loaded
Array
(
    [0] => /var/www/phpgcs/php_autoload/spl_autoload.php
    [1] => /var/www/phpgcs/php_autoload/include/aClass.php
)bClass is loaded
PHP 相关文章推荐
用PHP读取IMAP邮件
Oct 09 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 PHP
php语言的7种基本的排序方法
Dec 28 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
php修改数组键名的方法示例
Apr 15 PHP
PHP通过curl获取接口URL的数据方法
May 31 PHP
PHP生成zip压缩包的常用方法示例
Aug 22 PHP
php输出反斜杠的实例方法
Sep 19 PHP
php多文件上传下载示例分享
Feb 20 #PHP
php分页代码学习示例分享
Feb 20 #PHP
php多文件上传实现代码
Feb 20 #PHP
php图片缩放实现方法
Feb 20 #PHP
php跨域cookie共享使用方法
Feb 20 #PHP
PHP中redis的用法深入解析
Feb 20 #PHP
MongoDB在PHP中的常用操作小结
Feb 20 #PHP
You might like
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Django中url的反向查询的方法
2018/03/14 Python
python 操作excel表格的方法
2020/12/05 Python
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
婚礼证婚人演讲稿
2014/09/13 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
党员自我评价范文2015
2015/03/03 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
跑吧孩子观后感
2015/06/10 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS