龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 利用Box(箱子来管理类的创建和方法的调用)

时间:2014-07-14 15:19来源:网络整理 作者:网络 点击:
分享到:
利用Box(箱子来管理类的创建和方法的调用) 在web开发过程中有很多需要反复创建的对象每次都要去new和还有参数传递的顺序也是严格不能颠倒,利用一个Box来统一管理类的创建,对于类

在web开发过程中有很多需要反复创建的对象每次都要去new和还有参数传递的顺序也是严格不能颠倒,利用一个Box来统一管理类的创建,对于类中的方法的参数的处理 不再以打个单个参数进行传递而是以数组中key=>value进行传递,这样就不会在意参数的顺序了!!

<?php

/**
    利用php的变量传导特性,建立一个资源调度类,来统一加载和调度需要的类并声明
    同时利用反射类调用类中的方法
    需要传递的方法为:
    $_className:类的名字
    $methodName:方法的名字
    $avgArr = array("arvName"=>'value'....)
**/
class Sys_Box{
    //声明一个进程内资源对象
    public static $_modelObjArr = array();
    //获取资源对象 默认$_typeStr = 'class'
    public static function invoke($_className,$methodName,$avgArr = array()){

        //检测变量是否合法
        if(empty($_className) || empty($methodName) || !is_string($_className) || !is_string($methodName)){
            echo "Argument is error";exit;
        }
        //资源已经存在不再创建
        if(!isset(self::$_modelObjArr[$_className])){
            //都是用本地类
            if(!Yaf_Loader::getInstance()->isLocalName($_className)){
                self::$_modelObjArr[$_className] = new $_className();
            }else{
                echo $_className." is not exists";exit;
            }

        }   
        //检测$_className是否存在$methodName方法
        if(!method_exists(self::$_modelObjArr[$_className],$methodName)){
            echo $_className." don't has the method:".$methodName;exit;
        }

        if(empty($avgArr)){
            return self::$_modelObjArr[$_className]->$methodName();
        }else{
            return self::$_modelObjArr[$_className]->$methodName($avgArr);
        }

    }

    //另外加载数据对象到静态数据组中去
    public static function setObjArr($obj){
        //检测是否存存在已经创建的好的对象
        !isset(self::$_modelObjArr[$obj]) && self::$_modelObjArr[$obj] = $obj;
    }

}
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接