Функция PHP возвращает массив, возвращаемый второй функцией - PullRequest
0 голосов
/ 10 октября 2018

У меня есть 2 функции (расположены в том же файле)

f1 = getBlogCommentList

f2 = getBlogReplyList

Я хочу, чтобы функция f1 вызывала f2$this->getBlogReplyList($post_id,$comment['id']);, функция f2 собирает данные из sql на основе отправленных параметров f1 и возвращает массив с данными return $blog_replies;.И возвращенные данные, которые я хочу использовать в f1, но не могу понять, как получить эти возвращенные данные. foreach ($blog_replies as $reply) { //Do stuff with returned data }

Примечание: неопределенная переменная: blog_replies в D: \ xampp \ htdocs \ models \BlogModel.php в строке 146

Предупреждение. Недопустимый аргумент для foreach () в D: \ xampp \ htdocs \ models \ BlogModel.php в строке 146

В строке 146 Iиметь foreach ($ blog_replies как $ replies)

функция f1 (getBlogCommentList)

public function getBlogCommentList($post_id){
try{

    $sortby = "bla bla bla";

    $stmt = $this->conn->prepare("$sortby");
    $stmt->execute();
    $result = $stmt->fetchAll();

    $blog_comments = array();

    foreach($result as $comment){
        $blog_comments[] = $comment;
        $this->getBlogReplyList($post_id,$comment['id']);
    }

    foreach ($blog_replies as $reply) {
        //Do stuff with returned data
    }

    return $blog_comments;

  }
  catch(PDOException $e)
  {
    echo $e->getMessage();
  }
}

функция f2 (getBlogReplyLyst)

public function getBlogReplyList($post_id,$comment_id){
try{

    $sortby = "bla bla bla";

    $stmt = $this->conn->prepare("$sortby");
    $stmt->execute();
    $result = $stmt->fetchAll();

    $blog_replies = array();

    foreach($result as $post){
        $blog_replies[] = $post;
    }

    return $blog_replies;

  }
  catch(PDOException $e)
  {
    echo $e->getMessage();
  }
}

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Изменить f1 следующим образом:

public function getBlogCommentList($post_id){
    try{

        $sortby = "bla bla bla";

        $stmt = $this->conn->prepare("$sortby");
        $stmt->execute();
        $result = $stmt->fetchAll();

        $blog_comments = array();

        foreach($result as $comment){
            $blog_comments[] = $comment;

            $blog_replies = $this->getBlogReplyList($post_id,$comment['id']);
            foreach ($blog_replies as $reply) {
                //Do stuff with returned data
            }
        }

        return $blog_comments;

    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
}
0 голосов
/ 10 октября 2018

Вам необходимо присвоить вывод вызываемой функции переменной, потому что переменные доступны только внутри вашей функции, то есть:

$blog_replies = $this->getBlogReplyList($post_id,$comment['id']);

foreach ($blog_replies as $reply) {
    //Do stuff with returned data
}

Вы также можете рассмотреть возможность использования переменных класса, таким образом вы можетеполучить доступ к переменной в каждой функции вашего объекта.Обратите внимание на использование $this->blog_relies, определение переменной вверху и удаление оператора возврата

Пример:

class ExampleClass {

  private $blog_replies;

  public function getBlogReplyList($post_id,$comment_id){
    try{

        $sortby = "bla bla bla";

        $stmt = $this->conn->prepare("$sortby");
        $stmt->execute();
        $result = $stmt->fetchAll();

        $this->blog_replies = array();

        foreach($result as $post){
            $this->blog_replies[] = $post;
        }

        // The return is now obsolete
        // return $blog_replies;

      }
      catch(PDOException $e)
      {
        echo $e->getMessage();
      }
   }

  public function getBlogCommentList($post_id){
    try{

      $sortby = "bla bla bla";

      $stmt = $this->conn->prepare("$sortby");
      $stmt->execute();
      $result = $stmt->fetchAll();

      $blog_comments = array();

      foreach($result as $comment){
        $blog_comments[] = $comment;
        $this->getBlogReplyList($post_id,$comment['id']);
      }

      foreach ($this->blog_replies as $reply) {
        //Do stuff with returned data
      }

      return $blog_comments;

    }
    catch(PDOException $e)
    {
      echo $e->getMessage();
    }
  }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...