PHP класс, который сортирует упорядоченный целочисленный массив с помощью функции sort () - PullRequest
0 голосов
/ 16 февраля 2020

Для приведенного выше вопроса я записал следующее:

<?php

class sortClass{

  public function __construct(array $arrayPassed){
    return sort($arrayPassed);
    }

}
$newarray=array(11,-2,4,35,0,8,-9);
$sorted =  new sortClass($newarray);
print_r($sorted);

?>

. Вывод 'sortClass Object ()', мне нужна помощь, чтобы понять, почему он не распечатывает отсортированный массив. Когда мы создаем экземпляр класса - конструктор будет автоматически выполняться и возвращать то, что он вернул правильно? так почему же не печатается $ sorted объект печати, что возвращается в конструкторе?

Ответы [ 4 ]

2 голосов
/ 16 февраля 2020

Вам не нужна оболочка class только для сортировки, вы можете просто запустить функцию sort напрямую, проблема с вашим кодом заключается в возврате в __constructor.

Я предлагаю вам запустить это прямо так:

<?php
  $newarray = array(11,-2,4,35,0,8,-9);
  sort($newarray);
  print_r($newarray);
?>

или этот, если вам все еще нужна OOP версия:

<?php

class sortClass{
  private $arrayPassed = [];
  public function __construct(array $arrayPassed){
    $this->arrayPassed = $arrayPassed;
  }

  public function sort() {
    sort($this->arrayPassed);
    return $this->arrayPassed;
  }
}

$newarray = array(11,-2,4,35,0,8,-9);

$sortClass =  new sortClass($newarray);

print_r($sortClass->sort());
2 голосов
/ 16 февраля 2020

https://www.php.net/manual/en/language.oop5.basic.php

Вы неправильно поняли OOP, вам необходимо узнать об этом, прежде чем писать код. Я даю обходной путь только для идеи:

class sortClass
{
    public $sorted;

    public function __construct(array $arrayPassed)
    {
        sort($arrayPassed);
        $this->sorted = $arrayPassed;
    }
}

$newarray = array(11, -2, 4, 35, 0, 8, -9);
$sorted = new sortClass($newarray);
var_dump($sorted->sorted);
1 голос
/ 16 февраля 2020

Вы не можете ничего вернуть из метода конструктора. Вы должны создать новый метод publi c, который возвращает отсортированное значение.

class MyClass
{
  private $sorted;

  public function __construct(array $input)
  {
     $this->sorted = asort($input);
  }

  public function sortedArray()
  {
     return $this->sorted;
  }
}

$arr = [11, -2, 4, 35, 0, 8, -9];
$sorted = new MyClass($arr);
print_r($sorted->sortedArray());
0 голосов
/ 16 февраля 2020

AS Найджел Рен объясняет, что вы не можете вернуться из метода конструктора. Вам нужен новый метод, чтобы вернуть отсортированное значение. Проверьте мой код

class sortClass{
  private $sortedArray;

  public function __construct(array $arrayPassed){
    $this->sortedArray = asort($arrayPassed);
    }

  public function  getSortedArray(){
     return $this->sortedArray;
  }

}
$newarray=array(11,-2,4,35,0,8,-9);
$sorted =  new sortClass($newarray);
print_r($sorted->getSortedArray());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...