| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖
标题:新学PHP,有个小问题不能解决了,关于数组参数传递的
只看楼主 加入收藏
huaxialonger
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-3-18
结帖率:100%
收藏
 问题点数:0 回复次数:5 
新学PHP,有个小问题不能解决了,关于数组参数传递的
小弟是新手。。。一直未找到以下错误

源码如下:

<?php
include 'SmsOperator.php';
$smsOperator = new SmsOperator();
$matches = "
result=0&des=OK&mobile=15211112222&content=KMA&recvtime=2010-07-19 09:49:58&mobile=15222223333&content=one&recvtime=2010-07-14 09:51:28&mobile=15233334444&content=MDMAdsJMD!&recvtime=2010-07-14 09:51:44";
$recv = array();
$recv = $smsOperator->getMo($matches);

for($i=0;$i<strlen($recv);$i++){
 echo $recv[$i]->toString();
}



类SmsOperator



<?php
include 'Sms2.php';
class SmsOperator{
 private $host = 'www.';
 private $port = 8080;
 private $noGetMoNum = 0;
 private $maxGetMoNum = 30;
 
 private $smsCount = 0;
 function getMo($matches){
  
   $i = strpos($matches,'result=', 0);
   $j = strpos($matches,'&des=', 0);
   
   if($j >0){
    if(($j - $i - 7) <= 0){
     $result = -1;
     $des = '接收服务器错误!';
    }else{
     $result = (int)substr($matches,$i+7,$j - $i - 7);
     
     //des
     $i = strpos($matches, '&des=');
     $j = strpos($matches, '&', $i + 1);
     $des = substr($matches,$i+5,$j - $i - 5);
     if ($des=='OK'){      
      $smss = $this->getSms($matches,$smss);      
     }else{
      $des='未接收到短信!';
     }
    }
   }
   $smss[0] = new Sms2();
   $smss[0]->result = $result;
   $smss[0]->des = $des;
   return $smss;
   
  }
  
  private function getSms($a,$smss){
    $smss[$this->smsCount] = new Sms2();
    $i = strpos($a, '&mobile=');
    $j = strpos($a, '&content=', $i + 1);
    $smss[$this->smsCount]->phone = substr($a, $i+8,$j-$i-8);
   
    $i = strpos($a, '&content=');
    $j = strpos($a, '&recvtime=', $i + 1);
    $smss[$this->smsCount]->content = substr($a, $i+9,$j-$i-9);
   
    $i = strpos($a, '&recvtime=');
    $j = strpos($a, '&', $i + 1);
    if($j != NULL){  
     $smss[$this->smsCount]->tim = substr($a, $i+10,$j-$i-10);
     
     $this->smsCount++;
     $a = substr($a,$j);
     return $this->getSms($a,$smss);
    }
   
    $smss[$this->smsCount]->tim = substr($a, $i+10);
   
    return $smss;   
   }
}
 

类Sms2



<?php
class Sms2 {
 var $phone = "";
 var $content ="";
 var $tim = "";
 var $result = -1;
 var $des = "";
 
 function toString(){
   return "result:".$this->result.'<br>'
      ."des:".$this->des.'<br>'
      ."phone:".$this->phone.'<br>'
      ."content:".$this->content.'<br>'
      ."tim:".$this->tim.'<br>';
  }
}



目的很简单,把字符串里的mobile,content,tim取出来,封装为Sms2对象,再装到数组里,作为参数传递出来。。。

不知道哪里数组未定义,请大家帮忙 看看。。。
搜索更多相关主题的帖子: 参数 PHP 
2010-07-19 17:23
huaxialonger
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-3-18
收藏
得分:0 
问题补充:
 浏览器最后总是报这样的错误,但是不影响结果。。。

Call to a member function toString() on a non-object in   getMo.php on line 14

2010-07-19 17:27
huaxialonger
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-3-18
收藏
得分:0 
米人回啊
2010-07-21 09:43
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:0 
在我电脑上测试时,出现两个问题
$recv不是字符串,却使用了strlen($recv)
$smss因为在if中所以可能未定义直接调用$smss[0]

改正方法
for($i=0;$i<strlen($recv);$i++){
echo $recv[$i]->toString();
}
改为
for($i=0;$i<count($recv);$i++){
echo $recv[$i]->toString();
}



if ($des=='OK'){      
      $smss = $this->getSms($matches,$smss);      
     }else{
改为
$smss = array();
if ($des=='OK'){      
      $smss = $this->getSms($matches,$smss);      
     }else{
//即在代码之前加上$smss = array();
收到的鲜花
  • huaxialonger2010-07-22 11:51 送鲜花  3朵   附言:我很赞同
2010-07-21 18:12
huaxialonger
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-3-18
收藏
得分:0 
以下是引用sidooh在2010-7-21 18:12:36的发言:

在我电脑上测试时,出现两个问题
$recv不是字符串,却使用了strlen($recv)
$smss因为在if中所以可能未定义直接调用$smss[0]

改正方法
for($i=0;$i
谢谢,问题解决了
第一个问题是我太不小心了,没有注意到
第二个问题是因为本人对PHP里变量不声明就使用有些不习惯,所以直接上手了。。。
十分感谢你的回答
2010-07-22 11:51
快速回复:新学PHP,有个小问题不能解决了,关于数组参数传递的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038207 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved