• [PHP] 创建函数别名


    /**
     *
     * Function Name :
     *     val2str
     *     参考:http://www.php.net/manual/en/function.create-function.php#103080
     *
     * Description :
     *     将变量值变成php代码
     *
     * Parameters :
     *     $mixed[mixed] : 变量值
     *
     * Returns :
     *     [string]php代码
     *
     * Demo :
     *     $object = new stdClass;
     *     $object->arg = 'object';
     *     echo val2str($object);
     *
     *     $cls = new stdClass();
     *     $cls->key ='value';
     *     $array = (array)$cls;
     *     echo val2str($array);
     *     
     *     $temp = array(
     *         'int' => 100,
     *         'double' => 3.14,
     *         'string' => 'string test',
     *         'array' => array('test21' => 'ok21', 'test22' => 'ok22'),
     *         'object' => (object)array('test31' => 'ok31', 'test32' => 'ok32'),
     *         'bool' => true,
     *         'null' => NULL,
     *     );
     *     eval(sprintf('$test=%1$s;', val2str($temp)));
     *     print_r($test);
     */
    function val2str($mixed) {
        // 获取变量名
        $var_name = '';
        
        // 获取变量值
        switch(gettype($mixed)) {
            case 'string':
                return sprintf('\'%1$s\'', $mixed);case 'object':
            case 'array':
                $isobject = false;
                if(is_object($mixed)) {
                    $isobject = true;
                    $mixed = get_object_vars($mixed);
                }
                
                $delimiter = ', ';
                $out = '';
                foreach($mixed as $key => $value) {
                    $fun = __FUNCTION__;
                    $out .= sprintf('%1$s\'%2$s\' => %3$s', $delimiter, $key, $fun($value));
                }
                if(!empty($out)) {
                    // 删除前面的$delimiter
                    $out = substr($out, strlen($delimiter));
                }
                $out = $isobject ? sprintf('(object)array(%1$s)', $out) : sprintf('array(%1$s)', $out);
                return $out;
            
            case 'boolean':
                return $mixed ? 'true' : 'false';
            
            case 'NULL':
                return 'NULL';
            
            //case 'integer':
            //case 'double':
            //case 'resource':
            default :
                return $mixed;
        }
    }
    /**
     *
     * Function Name :
     *     CreateFunctionAlias
     *     参考:http://www.php.net/manual/en/function.create-function.php#103080
     *
     * Description :
     *     创建函数别名
     *
     * Parameters :
     *     $function_name[string] : 函数名(必须已存在)
     *     $alias_name[string] : 新别名(必须不存在)
     *
     * Returns :
     *     [bool]返回结果
     *
     */
    function CreateFunctionAlias($function_name, $alias_name)
    { 
        if(function_exists($alias_name)) 
            return false; 
        $rf = new ReflectionFunction($function_name); 
        $fproto = $alias_name.'('; 
        $fcall = $function_name.'('; 
        $need_comma = false; 
        
        foreach($rf->getParameters() as $param) 
        {
            if($need_comma) 
            { 
                $fproto .= ','; 
                $fcall .= ','; 
            } 
    
            $fproto .= '$'.$param->getName(); 
            $fcall .= '$'.$param->getName(); 
    
            if($param->isOptional() && $param->isDefaultValueAvailable()) 
            { 
                $val = $param->getDefaultValue();
                $fproto .= ' = '.val2str($val);
            } 
            $need_comma = true; 
        } 
        $fproto .= ')'; 
        $fcall .= ')'; 
    
        $f = sprintf('function %1$s{return %2$s;}', $fproto, $fcall);
        eval($f);
        
        return true; 
    }
    // 创建CreateFunctionAlias别名
    if(!function_exists('function_alias')) {
        function function_alias($function_name, $alias_name)  {
            return CreateFunctionAlias($function_name, $alias_name) ;
        }
    }
  • 相关阅读:
    Android中的IMEI
    《JAVA与模式》之适配器模式(转)
    海量日志数据__怎么在海量数据中找出重复次数最多的一个
    Java中的IO流系统详解(转载)
    获取网络文件长度问题
    内存泄漏
    Ubuntu12.04不能连接小米开发(转)
    Java/C++中数组的区别
    Android批量插入数据到SQLite数据库
    泛型编程 基础
  • 原文地址:https://www.cnblogs.com/hcbin/p/2782726.html
Copyright © 2020-2023  润新知