1. 程式人生 > >IDO網路程式設計框架

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