免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2462 | 回复: 8
打印 上一主题 下一主题

请教class/function内sql/like的返回多个对象问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-15 11:09 |只看该作者 |倒序浏览
各位高手,本人初学PHP,请教一个编写类的问题。
之前所有代码没有面向对象,用sql的like很方便。
现在要改称面向对象了,like问题就来了。

需求:设计一个发货产品(基本信息)类Fhcp,能根据输入的型号Xh,模糊查询,返回所有发货产品对象。
代码如下:
  1. //fhcp.class 发货产品.类
  2. //总体功能:完成对发货产品的增查删改
  3. class Fhcp{
  4.         private $id;//
  5.         private $fields;//发货产品的其他字段
  6.        ...  
  7.         public static function getLikeByXh($xh){
  8.                 $fhcp = new Fhcp();
  9.                 $query = sprintf('select * from fhcp where xh like "%%%s%%"',$xh);
  10.                 $resuslt = mysql_query($query,$globals['DB']);
  11.                 if(mysql_num_rows($result)){
  12.                         $row = mysql_fetch_assoc($result);
  13.                         $fhcp->mc = $row['id'];
  14.                         $fhcp->mc = $row['mc'];
  15.                         $fhcp->xh = $row['xh'];
  16.                         $fhcp-dw = $row['dw'];
  17.                 }
  18.                 mysql_free_result($result);
  19.                 return $fhcp;
  20.         }
  21. }
复制代码
这里的getLikeByXh函数,可能有多个返回值,该怎么处理?谢谢!!

论坛徽章:
0
2 [报告]
发表于 2012-02-15 11:12 |只看该作者
更正一下最后一句:
这里的getLikeByXh函数,可能有多个返回对象,该怎么处理?谢谢!!

另外,
是在类中处理,还是在调用的时候处理。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
3 [报告]
发表于 2012-02-15 12:02 |只看该作者
老实说,没看明白。。。

你是想要这个吗?$fhcp->mc[] = $row['id'];

论坛徽章:
0
4 [报告]
发表于 2012-02-15 13:05 |只看该作者
帮你顶一下,我也看过php的class定义,但是没有看到这种用法,我在用的时候传出参数都用数组

论坛徽章:
0
5 [报告]
发表于 2012-02-15 17:01 |只看该作者
我现在改写了getLikeByXh方法,把对象存入数组。
当调用时,返回包含对象的数组。
在测试时,能打印返回的数组,
但是不打印数组中对象的内容??
以下是改写的方法和测试的代码:

改写的方法:

    public static function getByXhL($xh){
                    $fhcps = array();
                    $fhcp = new Fhcp();
                    $query = sprintf('select * from fhcp where xh like "%%%s%%"',$xh);
                    echo $query;
                    $result = mysql_query($query,$GLOBALS['DB']);
                    if(mysql_num_rows($result)){
                            $row = mysql_fetch_assoc($result);
                            do {
                                    $fhcp->id = $row['id'];
                                    $fhcp->mc = $row['mc'];
                                    $fhcp->xh = $row['xh'];
                                    $fhcp->dw = $row['dw'];
                                    array_push($fhcps, $fhcp);
                            } while($row = mysql_fetch_assoc($result));
                    }
                    mysql_free_result($result);
                    //print_r($fhcps);
                    echo '<br>';
                    return $fhcps;
            }

复制代码
测试的代码:

    // 测试 getByXhL($xh)
    $fhcpsA = Fhcp::getByXhL('X');
    print_r($fhcpsA);
    $fhcpA =new Fhcp();
    foreach($fhcpA as $fhcpsA){        
            echo $fhcpA->id;
            echo $fhcpA->mc;
            echo $fhcpA->xh;
            echo $fhcpA->dw;        
    }

复制代码
关于打印的返回对象:

    print_r($fhcpsA);

复制代码


Array ( [0] => Fhcp OXject ( [id:Fhcp:private] => 6 [fields:Fhcp:private] => Array ( [mc] => PQG [xh] => 1203010XC017 [dw] => 根 ) ) [1] => Fhcp OXject ( [id:Fhcp:private] => 6 [fields:Fhcp:private] => Array ( [mc] => PQG [xh] => 1203010XC017 [dw] => 根 ) ) [2] => Fhcp OXject ( [id:Fhcp:private] => 6 [fields:Fhcp:private] => Array ( [mc] => PQG [xh] => 1203010XC017 [dw] => 根 ) ) [3] => Fhcp OXject ( [id:Fhcp:private] => 6 [fields:Fhcp:private] => Array ( [mc] => PQG [xh] => 1203010XC017 [dw] => 根 ) ) )

还有一个问题,就是返回值中的id值,应该是不一样的,但是为什么全部相同。
[id:Fhcp:private] => 6

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
6 [报告]
发表于 2012-02-15 18:29 |只看该作者
本帖最后由 xinglu1983 于 2012-02-15 18:31 编辑

回复 5# ttl_web


    同一个类的属性,当然是一样的,在new的时候,起不同的名字就可以了。
getLikeByXh的函数的这里:
                          $row = mysql_fetch_assoc($result);
                           $i=0;
                            do {
                                    $i++;
                                    $fhcp = "fhcp".$i;
                                    $$fhcp->id = $row['id'];
                                    $$fhcp->mc = $row['mc'];
                                    $$fhcp->xh = $row['xh'];
                                    $$fhcp->dw = $row['dw'];
                                    array_push($fhcps, $$fhcp);
                            } while($row = mysql_fetch_assoc($result));

论坛徽章:
0
7 [报告]
发表于 2012-02-16 11:21 |只看该作者
要是可以像java那样可以传递对象就好了

论坛徽章:
0
8 [报告]
发表于 2012-03-07 19:09 |只看该作者
5楼的方法就可以呀,返回的对象推入到数组里面~~挺好的

论坛徽章:
0
9 [报告]
发表于 2012-03-09 17:33 |只看该作者
php有强大的数组,字典功能为什么非要把表值对像化呢.....千万不要为了对像化而对像化.....

给你改写一下,算是另一种写法吧,还有可以直接用while,干嘛要用do ,while呢?直接用while可以不用mysql_num_rows来做判断了,
这个函数比较废资源,如果没有数据返回的就是一个空数组

public static function getLikeByXh($xh){
    $fhcps = array();
    $query = sprintf('select * from fhcp where xh like "%%%s%%"',$xh);
    $resuslt = mysql_query($query,$globals['DB']);
    while($row = mysql_fetch_assoc($result)) {
        $fhcp = new Fhcp();
        $fhcp->id = $row['id'];
        $fhcp->mc = $row['mc'];
        $fhcp->xh = $row['xh'];
        $fhcp->dw = $row['dw'];
        $fhcps[] = $fhcp;
    }
    return $fhcps;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP