使用 zephir 编写 php 扩展的问题

小弟初学 zephir 编写 php 扩展,一般的 hello world 已经会写了,现在想将一些常用的 php 函数翻译成 zephir 版本的,下面的这个函数翻译失败,请大神帮忙指点指点,谢谢。

原 php 函数

/**
 * 二维数组排序,可以按照多个字段进行排序
 * @param array $array
 * @param array $sort_field_list
 * @return mixed
 */
function sortArray($array, $sort_field_list) {
    $sort_arr = [];
    $sort_rule = '';
    foreach ($sort_field_list as $sort_field => $sort_way) {
        foreach ($array as $key => $val) {
            $sort_arr[$sort_field][$key] = $val[$sort_field];
        }
        $sort_rule .= '$sort_arr["' . $sort_field . '"],' . $sort_way . ',';
    }
    if (empty($sort_arr) || empty($sort_rule)) {
        return $array;
    }
    eval('array_multisort(' . $sort_rule . ' $array);');
    return $array;
}

下面是小弟的翻译版:

namespace HelloWord;
 
class Greeting
{
    public static function say(arr_list, sort_field_list)
    {
        var sort_arr = [];
        var sort_rule = "";
        for sort_field, sort_way in sort_field_list {
            for key_s, val in arr_list {
                let sort_arr[sort_field][key_s] = val[sort_field];
            }
            sort_rule .= 'sort_arr["' . sort_field . '"],' . sort_way . ',';
        }

        if (empty(sort_arr) || empty(sort_rule)) {
            return arr_list;
        }
        eval('array_multisort(' . sort_rule . ' arr_list);');
        return arr_list;
    }
}

build 的时候报错如下:

root@:/webDefault/zeptest/helloword# zephir build
 Zephir version has changed, use "zephir fullclean" to perform a full clean of the project

                                                                                                                        
 [ERROR] Cannot mutate variable 'sort_field' because it wasn't defined in                                               
         /webDefault/zeptest/helloword/helloword/greeting.zep on line 9                                                 
                                                                                                                        

 Zephir version has changed, use "zephir fullclean" to perform a full clean of the project
 Preparing for PHP compilation...
 Preparing configuration file...
 Compiling...
 Zephir version has changed, use "zephir fullclean" to perform a full clean of the project
 Installing...

 Extension installed.
 Add "extension=helloword.so" to your php.ini

 ! [NOTE] Don't forget to restart your web server
阅读 754
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题