从另一个方法内部访问一个方法


Accessing a Method from inside Another Method

我试图从算法内部访问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]);}
    } 

根据您对public标识符的使用,我猜您的两个函数是在一个类中。

要引用同一对象上的方法,使用$this->methodname()

从你的代码:

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

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

$this->gcd()?

但实际上,由于gcd不使用任何成员变量,它应该是一个自由函数

您缺少$this->gcd内部算法试着直接访问它:)