利用Box(箱子来管理类的创建和方法的调用)
程序员文章站
2022-05-08 21:09:26
...
php代码
<?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; } }
上一篇: Oracle小记之取最大值作为id
下一篇: 零基础写Java知乎爬虫之进阶篇