2011-08-30 63 views
0

我试图从内部算法访问GCD,但它不让我,我不知道为什么。我在这里做错了什么?从另一个方法内部访问方法

public function gcd($x,$y) 
    { 
     do { 
      $rest=$x%$y; 
     $x=$y; 
     $y=$rest; 
     } while($rest!==0); 
     return $x; 
    } 

    public function algorithm() 
    { 
     $alpha = array(
      'c' => str_split('bcdfghjklmnpqrstvwxz'), 
      'v' => str_split('aeiouy') 
     ); 
     $i=$k=0; 
     foreach ($this->output as $item) { 
      $cnt = 0; 
      $this->digits[$i] = array(); 
      foreach ($item as $part) { 
       $this->digits[$i][$cnt] = array(); 
       $new = array(); 
       foreach ($part as $str) { 
        $v = count(array_intersect(str_split($str), $alpha['v'])); 
        $c = count(array_intersect(str_split($str), $alpha['c'])); 
        $t = strlen(str_replace(' ', '', $str)); 

        $new = ($cnt == 0) 
         ? array('v' => $v, 'c' => $c, 't' => $t, 'm' => ($t%2) ? $v * 1.5 : $c) 
         : array('v' => $v, 'c' => $c, 't' => $t); 

        $this->digits[$i][$cnt][] = $new; 
       } 
       $cnt++; 
      } 
      $i++; 
     } 
     $h=$a=0; 
     foreach($this->digits as &$etc) { 
      foreach($etc[0] as &$r){ 

       foreach($etc[1] as $k) { 
       foreach($k as $x=>$y) { 
        $tmp[$h] = (gcd($y,$r['t']) != 1) ? ++$a:''; 
       } 
        $tmp[$h] = $r['m']*$a*1.5; 
        $h++; 
        $a=0; 
       }$h=0; 

      $r['f'] = $tmp; 
      $tmp=''; 
      } 

     } 
    foreach($this->digits as &$u){unset($u[1]);} 
    } 
+0

为了更快更好地回答问题,尽可能多地删除不相关的代码,并清楚地指出哪条线路会导致错误。 (最重要的是,它会表明你自己做了一些努力) – xtofl

回答

1

通过使用public标识符来判断,我猜你的两个函数是在一个类中。

要指向同一个对象的方法,使用$this->methodname()

从代码:

$tmp[$h] = (gcd($y,$r['t']) != 1) ? ++$a:''; 

应该是:

$tmp[$h] = ($this->gcd($y,$r['t']) != 1) ? ++$a:''; 
0

...

$this->gcd()? 

不过说真的,因为gcd不使用任何成员变量,它应该是一个免费的功能。

+0

你是什么意思一个“自由功能”?介意解释它? – ehime

+0

最简单的函数 - 不是成员函数,不是静态函数,不是匿名函数或lambda函数,只是...函数。 – xtofl

0

你错过了这 - $> GCD内算法 只是尝试直接访问它 :)