文档章节

PHP函数uasort()在类中的使用问题解决

zcqshine
 zcqshine
发布于 2016/06/24 17:41
字数 299
阅读 192
收藏 1

今天在类中使用 uasort() 函数时发现报了错误:Warning: uasort() expects parameter 2 to be a valid callback ..., 然而直接在纯 php 页面测试的时候发现又没问题.

示例代码如下:

<?php
class Test{

    function compareByMargin($aryA, $aryB){
        if($aryA['margin'] == $aryB['margin']){
            return 0;
        }
        return ($aryA['margin'] < $aryB['margin']) ? -1 : 1;
    }

    function sortxxx(){
        $ary = array(
            array('id' => 1, 'margin' => 100),
            array('id' => 2, 'margin' => 200),
            array('id' => 3, 'margin' => 300),
        );
        uasort($ary, 'compareByMargin');
    }
}

直接调用类里的sortxxx()方法的时候就会出现上面的错误. 要是改成PHP页面的话,则无问题:

<?php
    function compareByMargin($aryA, $aryB){
        if($aryA['margin'] == $aryB['margin']){
            return 0;
        }
        return ($aryA['margin'] < $aryB['margin']) ? -1 : 1;
    }

    function sortxxx(){
        $ary = array(
            array('id' => 1, 'margin' => 100),
            array('id' => 2, 'margin' => 200),
            array('id' => 3, 'margin' => 300),
        );
        uasort($ary, 'compareByMargin');
    }
    
    sortxxx();

后来想可能是在 uasrot() 里的回调函数'compareByMargin'调用不明确, 编译器不知道是调用的哪里的这个函数. 之后搜索了一下, 解决方案如下: 在类里这样调用:uasort($ary, array($this,"compareByMargin")) 就可以了. 这样明确告诉编译器是指向当前类的compareByMargin函数.

© 著作权归作者所有

zcqshine
粉丝 8
博文 46
码字总数 15510
作品 0
深圳
高级程序员
私信 提问
PHP 回调后门笔记

在php中 存在回调函数参数的函数,都有可能作为后门 比如arraymap , arrayfilter 这类数组操作的回调函数,但是在安全狗下会被杀掉 但是uasort 这类函数不会被杀掉。 php5.4.8之后的assert ...

wly1992
2017/05/16
0
0
PHP函数参数类型问题。

array('name' => 'Aa', 'grade' => 98.5), 2 => array('name' => 'Da', 'grade' => 85.1), 9 => array('name' => 'Et', 'grade' => 94.0), 364 => array('name' => 'Cw'...

花宥落
2014/05/14
519
2
php多维数组自定义排序 uasort()

php内置的排序函数很多;正反各种排; 常用的排序函数: sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组进行排序 ksort() - 根据键,以升序对关...

白俊遥
2016/04/04
14
0
[讨论]php 排序系列的函数内部的C实现是用了哪种排序算法?

ext/standard/php_array.h https://github.com/php/php-src/blob/master/ext/standard/php_array.h 上面定义的排序函数: arsort -- 对数组进行逆向排序并保持索引关系 asort -- 对数组进行排...

justjavac
2013/08/16
179
1
PHP严重致命错误处理:php Fatal error: Cannot redeclare clas

PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function 1、错误类型:PHP致命错误 Error type: PHP Fatal error Fatal error: Cannot redeclare (a) (previously declar......

小星星程序员
2014/08/11
2.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

面向海量数据的极致成本优化-云HBase的一体化冷热分离

前言 随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑做分库分表,或者选择扩展能力更好的NOSQL/NewSQL数据库,如HBase就可以单表支持PB级数据,足够满足大多...

阿里云官方博客
25分钟前
3
0
最新最全国内外架构开源技术干货资料

大家好,废话不多说,整理了精心收集了各类资源。 声明,如侵犯个人利益,请联系小编,会立即删除相关资料。 领取方式在文末 求转发列表 好了,由于资源太多啦,就不一一列举了。 大家按照下...

泥瓦匠BYSocket
28分钟前
6
0
springmvc jsp访问不了css

在jsp中引入css,一直报404错误,直接访问css,也无法访问 将css文件移出WEB-INF,因为处于安全性考虑,这个目录禁止外部访问。 当引用css时,可以直接用绝对路径${pageContext.request.conte...

沉迷于编程的小菜菜
30分钟前
4
0
android 系统版本 9.1网络请求遇到坑

网络请求异常: E/http: CLEARTEXT communication to plat.xunlinkeji.cn not permitted by network security policy 在res下新建一个xml目录 创建名为network_security_config.xml 文件 ,该......

MrLins
47分钟前
5
0
Istio 1.3 发布,HTTP 遥测不再需要 Mixer

> 原文链接:Istio 1.3 发布,HTTP 遥测不再需要 Mixer Istio 是 Google、IBM 和 Lyft 联合开源的服务网格(Service Mesh)框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题...

米开朗基杨
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部