php类里面的方法不能递归吗?

自行脑补
  • 1k
<?php
    class quick{
        //快速排序
        public function quick_sort($arr){
            $base = $arr[0];
            $left_array = array();
            $right_array = array();
            for($i = 1;$i<count($arr);$i++){
                if($base>$arr[$i]){
                    $left_array[] = $arr[$i];
                }else{
                    $right_array[] = $arr[$i];
                }
            }
            $left_array = quick_sort($left_array);
            $right_array = quick_sort($right_array);
            return array_merge($left_array,array($base),$right_array);
        }
    }

    $test_arr =array(23,12,3,88,16,45,2,66);

    $sort = new quick();
    $result = $sort->quick_sort($test_arr);
    var_dump($result);
?>

打印显示$left_array = quick_sort($left_array);这里开始出错, Call to undefined function quick_sort()

回复
阅读 3.6k
6 个回答
<?php
    class quick {
        //快速排序
        public function quick_sort($arr){
            if(count($arr) <= 1){
                return $arr;
            }
            $base        = $arr[0];
            $left_array  = $right_array = [];
            for ($i = 1; $i < count($arr); $i++) {
                if($base > $arr[$i]){
                    $left_array[] = $arr[$i];
                } else {
                    $right_array[] = $arr[$i];
                }
            }
            $left_array  = $this->quick_sort($left_array);
            $right_array = $this->quick_sort($right_array);
            return array_merge($left_array, [$base], $right_array);
        }
    }

    $test_arr = [23,12,3,88,16,45,2,66];
    $sort     = new quick();
    $result   = $sort->quick_sort($test_arr);
    var_dump($result);

帮你修正了一下

在类文件中引用类中的方法或属性时,都需要用$this-> 指向,或者类中的方法or属性定义为static 在同类中用self::调用

$left_array = quick_sort($left_array);
$right_array = quick_sort($right_array);

改为

$left_array = $this->quick_sort($left_array);
$right_array = $this->quick_sort($right_array);

引用用$this ,但是你的代码出现死循环了

$this->quick_sort()

类调用方法使用:$this

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏