首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子函数中方法vars的可用性

子函数中方法vars的可用性
EN

Stack Overflow用户
提问于 2011-02-11 03:52:47
回答 3查看 1.4K关注 0票数 0

从该方法的子函数中引用方法参数变量似乎不起作用,即使指定了全局变量。

代码语言:javascript
复制
public function sortArray(&$array, $keyToCompare){// BOOL sortArray( ARR &$array, STR $keyToCompare )
    function cmpVals($pairA, $pairB){
        global $keyToCompare;
        return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
    }
    return uasort($array, 'cmpVals');
}

甚至可以从子函数中引用方法参数吗?如果是这样..。多么?

对于上面的具体示例,我意识到我可以使用闭包来实现相同的目标,但我不希望脚本依赖于PHP5.3。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-11 04:27:51

你为什么不能让它静止不动?

代码语言:javascript
复制
class YourClassName {
    public static $keyToCompare;
    public function sortArray(&$array, $keyToCompare){// BOOL sortArray( ARR &$array, STR $keyToCompare )
        self::$keyToCompare = $keyToCompare;
        function cmpVals($pairA, $pairB){
            $keyToCompare = YourClassName::$keyToCompare;
            return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
        }
        return uasort($array, 'cmpVals');
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-02-11 04:08:01

您似乎已经在PHP5.3中使用了OOP。不如创建一个分类器类吗?

代码语言:javascript
复制
class Sorter{

    private $key;

    function __construct($key){
        $this->key = $key;
    }

    private function compare($a, $b){
        return strcmp($a[$this->key], $b[$this->key]);
    }

    public function sort($a){
        uasort($a, array($this, 'compare'));
    }

}
票数 1
EN

Stack Overflow用户

发布于 2011-02-11 04:33:47

另一个选项是匿名函数:

代码语言:javascript
复制
public function sortArray(&$array, $keyToCompare){
    return uasort($array, function($pairA, $pairB) uses ($keyToCompare) {
        return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
    });
}

未经测试,在火车上:D,但请参阅文献资料获得更多信息。

FYI,引用传递是不必要的,因为您不修改数组。PHP不会复制,因此不存在按值传递的内存问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4965468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档