从此不求人:自主研发一套PHP前端开发框架(17)

继续开发和完善虚拟类

目标如下

1.执行sql语句
2.支持参数
3.支持多条sql一起执行

代码:
functions.inc

   //加载虚拟类
   function load_class($class){
    $classPath = LKPHP_PATH.'/Libary/Class/myClass.php';

    if(!class_exists('myClass')){
        require($classPath);
    }
    return new myClass($class);
   }

myClass.php

<?php 
       /**
       * 虚拟注入类实现
       */
       class myClass
       {
            var $xmlContent="";
            var $funcList = array();

            function myClass($xmlname)
            {
               $xmlurl = LKPHP_PATH.'Libary/Class/'.$xmlname.'.xml';

               $this->xmlContent = file_get_contents($xmlurl);
               $this->loadXml();
            }
            function loadXml(){
                $conf = (array)simplexml_load_string($this->xmlContent);

                foreach ($conf['func'] as $func) {
                    $this->funcList[strval($func->name)] = array(
                         'sql'=>strval($func->sql),
                         'description'=>strval($func->description),
                         'resultType'=>strval($func->resultType)
                        );
                }

            }
            function getSqlByParams($sql,$funcParams){
                if(!$funcParams || count($funcParams) === 0) return $sql;
                $index = 0;
                foreach ($funcParams as $p) {
                    $sql = str_replace('#{'.$index.'}',$p,$sql);
                    $index++;
                }
                return $sql;
            }
            function __call($funcName,$funcParams){
                //echo '执行了'.$funcName.'但是这个方法没有定义,因此本函数来接管';
                if(array_key_exists($funcName,$this->funcList)){
                    $db = load_db();
                    $sql = $this->funcList[$funcName]['sql'];
                    $sql = $this->getSqlByParams($sql,$funcParams);
                    switch ($this->funcList[$funcName]['resultType']) {
                        case 'array':
                            return $db->execForArray($sql);
                            break;
                        case 'int':
                            return intval($db->execForOne($sql));
                        case 'string':
                            return strval($db->execForOne($sql));
                        default:
                            //默认使用返回数组的方式
                            return $db->execForArray($sql);
                            break;
                    }

                }
            }

       }
 ?>

index.inc 测试代码

         //测试下加载的虚拟类
         $news=load_class('news');
         $info=$news->getNewsDetail();
        // var_export($info);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值