zoukankan      html  css  js  c++  java
  • PHP基础之Autoload

    PHP的自动加载autoload机制很重要,这里做2个小练习

    原创文章,转载请注明:http://www.cnblogs.com/phpgcs

    文件结构如下,2种方式实现自动加载

    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
    )
    

      

    原创文章,转载请注明:http://www.cnblogs.com/phpgcs

    第二种方式:

    <?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
    

      

    扩展阅读:

    http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html

  • 相关阅读:
    ajax 同步模式与异步模式
    Ajax -get 请求
    Ajax -post 请求
    Ajax 遵循HTTP协议
    Ajax 发送请求
    宽高自适应案例
    伸缩导航案例
    伸缩属性的 grow与 shrink
    伸缩布局
    hdu-5858 Hard problem(数学)
  • 原文地址:https://www.cnblogs.com/phpgcs/p/php_autoload.html
Copyright © 2011-2022 走看看