IDO网络编程框架


目录结构:
    root
    |-- index.php  --------- 入口文件
    |-- init.php   --------- 初始化文件
    |-- config.php --------- 配置文件
    |-- in         --------- 输入处理目录
    |    `-- in.php --------- 输入处理入口文件
    |-- do         --------- 数据操作目录
    |    `-- do.php --------- 数据操作入口文件
    |-- out        --------- 输出处理目录
    |    `-- out.php--------- 输出处理入口文件
    `-- doc        --------- 文档目录
    
文件内容:
index.php
    <?php
        require_once ("config.php"); //--
        require_once ("init.php");   //   \
        require_once ("out/out.php");//   | -- 包含配置文件,初始化文件,和所有的入口文件,其顺序不可颠倒
        require_once ("do/do.php");  //   /
        require_once ("in/in.php");  //--

        in_start();                  //------ 输入处理入口函数
    ?>

init.php
    <?php
        //内容没有限制,根据自己需要定制
    ?>

config.php
    <?php
        //内容没有限制,根据自己需要定制
    ?>

in/in.php
    <?php
        function in_make_out_desc($args)            // 生成基本的输出需要的参数和数据,         
        {                                            // 例如制定输出方式,或者输出函数
            if ( empty($args) )
            {    
                $args{"index"} = true;
                $args{"browser_from"} = "pc_browser";
            }
            return $args;
        }
        
        function in_start()                         // 输入处理入口函数
        {                                           // 该函数将会把处理后的参数分别发送到out_prepare()
            $args = array_merge($_GET, $_POST);     // 和do_start()函数中
            
            out_prepare(in_make_out_desc($args));
            do_start($args);
        }
    ?>

do/do.php
    <?php
        function do_action($args)
        {
            if ( !isset($args{"act"}) )                // 由act指定文件路径和函数名:path|func
                return array();                        // 如果没有定义,则返回array()
            
            chdir("../do/");                        // 将工作路径切换到do/
            $file_list = explode("|", $args{"act"});// 将func前面的路径及文件都包含进来
            $path = $file_list{0};
            for ($i=1; $i<count($file_list); $i++)
            {
                if ( is_dir($path) && is_file($path."/".$file_list{$i-1}.".php") )    
                    require_once($path."/".$file_list{$i-1}.".php");
                $path = $path."/".$file_list{$i};
            }

            return function_exists($file_list{1}) ? $file_list{1}($args) : array(); // 函数必须在已包含的文件中定义
        }
    
        function do_start($args)
        {
            out_start(do_action($args)); // 接收in_start()传来的参数,将其处理后传递给out_start();
        }
    ?>

out/out.php
<?php
    $__OUT_ARGS = array(); // 保存输出描述参数
        
    function output_index($from)
    {
        switch ($from)
        {
        case "pc_browser" :
            echo file_get_contents("out/pc_browser/index.html");
            exit(0);
        default :
            echo "Not Suport";
            exit(0);    
        }
        return 0;
    }
    
    /**
     * 该函数接收来自do_action()传递过来的参数,
     * 该参数包括了所有要输出的数据,
     * 当该函数被调用时,将按照__OUT_ARGS中的输出信息进行输出
     * 信息
     *
     * @param array $data
     */
    function out_start($data)
    {
        global $__OUT_ARGS;
        
           if ( isset($__OUT_ARGS{"index"}) )
               return output_index($__OUT_ARGS{"browser_from"});
           else if ( isset( $__OUT_ARGS{"func"} ) )
               return $__OUT_ARGS{"func"}($data);
           else if ( isset($__OUT_ARGS{"type"}) )
               return $__OUT_ARGS{"type"}($data);
           else
           {
               require_once(DEFAULT_OUPUT_TYPE.".php");
               $func = DEFAULT_OUPUT_TYPE;
               return $func($data);
           }
    }
    
    /**
     * 接收从in()传递过来的参数,将其放入OUT_ARGS变量中,准备使用
     * 该参数描述来了输出数据的类型或者执行输出是调用的函数。
     *
     * @param array $args
     */
    function out_prepare($args)
    {
        global $__OUT_ARGS;
        $__OUT_ARGS = $args;
    }
?>

你可能感兴趣的:(IDO网络编程框架)