在foreach中调用类只能进行最后一次调用

时间:2012-06-20 11:56:52

标签: php oop foreach

大家好,大家好,

我写了一个脚本,它读取一行或多行的字符串。然后将在数组中读取这些行以循环。每行包含一个类和一个在foreach中调用的方法。调用的方法的结果保存在要返回的var中。

我的问题是现在只有最后一次调用才会执行所有其他调用,然后才返回该方法不存在,即使这样,如果我改变行的顺序总是最后一次调用有效。这包括所有方法都在那里并且有效。

行看起来像这样

  

class_1 /方法1   class_2 /方法2   class_2 /方法1

给定的数组i循环使用foreach看起来像这样

  

阵列(

     
    

[0] => class_1 /方法1     [1] => class_2 /方法2     [2] => class_2 /方法1

  

现在我的代码会像这样转换新数组中的每个项目

  

阵列(

     
    

[0] => class_1     [1] =>方法1

  

在其中调用class class_1和method1

我的代码就是这个

    public function execute_lines($f){
     $cont = "";  // contains the results of all calls

     if($l = $this->get_line_array($f)){  // $l contains the array of all lines
        foreach($l as $k => $v){        
        if(strpos($v,"/")){     
         $a = explode("/",$v);  // $a contanis the array with the class and method and may be further data to be used in the methods called
         $c = ucfirst($a[0]);   // var of the Class
         $m = strtolower($a[1]);  // var of the methode
         unset($a[0],$a[1]);  // delete the first two items so that the array contains only further data

         if(method_exists($c,$m)){  // see if the method exists
            $x = new $c();  // instantiate the Class
            $cont .=  $x->e($m,$a);  // save result 
            print "-<br />";  // control if the method exits
         }else{
            print "/<br />";  // control if the method does not exists 
         }
        }
     }
    }   
    return $cont;  // returns the cont
    }

结果将是

“/” “/” 然后只有最后一次调用的内容,其中all to apper

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果你正在从文件中读取行,那么每行都会附加一个换行符(只有最后一行没有,看起来似乎如此)

更改您的代码并重试

foreach($l as $k => $v){     
    $v = trim($v); // trim whitespace

    if(strpos($v,"/")){
        ...
    }
}