Как передать переменную из одного метода в другой в том же классе? - PullRequest
0 голосов
/ 30 июня 2018

Вот мой код:

class something {
    public function one() {
        $choices = array(
            'something' = array(
                'name' => 'test';
            ),
            'something_two' = array(
                'name' => 'test_one';
            ),
        );
    }

    public function two() {
        ?>
        <select>
            <?php
            foreach ($this->function_one() as $choice) {
                echo '<option value="'.$choice['name'].'">'.$choice['name'].'</option>';
            }
            ?>
        </select>
        <?php
    }
}

Вопрос:
Как взять переменную из другой функции и поместить ее в цикл foreach?

Я получаю эту ошибку:

Предупреждение. В foreach () указан неверный аргумент в

Ответы [ 2 ]

0 голосов
/ 15 августа 2018

Сначала пара незначительных баллов:

  • в объявлении массива было несколько синтаксических ошибок (от = до => и удалены точки с запятой).
  • при создании опций выбора вам не нужно указывать атрибут value, если он совпадает с текстовым значением.

Теперь я предложу пару рабочих блоков кода, в которых используются различные методы.

Код1: ( Демо )

class something {
    public function one() {
        $choices = array(
            'something' => array(
                'name' => 'test'
            ),
            'something_two' => array(
                'name' => 'test_one'
            )
        );
        return $choices;
    }

    public function two() {
        echo "<select>";
            echo "<option>" , implode("</option><option>", array_column($this->one(), 'name')) , "</option>";
        echo "</select>";
    }
}

$foo = new something();
$foo->two();

Код2: ( Демо )

class something {
    public $choices = array();
    public function __construct() {
        $this->choices = array(
            'something' => array(
                'name' => 'test'
            ),
            'something_two' => array(
                'name' => 'test_one'
            )
        );
    }

    public function two() {
        echo "<select>";
            echo "<option>" , implode("</option><option>", array_column($this->choices, 'name')) , "</option>";
        echo "</select>";
    }
}

$foo = new something();
$foo->two();

Если вы явно вызовете one() из функции two() или используете конструктор для объявления переменной (свойства) в классе (через объект $this), будет зависеть от требований вашего проекта. Я не буду писать кучу цитат из руководства по PHP; Я просто советую вам прочитать некоторые базовые учебные пособия по классам и методам.

0 голосов
/ 30 июня 2018

Я не проверял это, но я исправил все ошибки, которые я мог видеть в вашем коде, попробуйте это.

В вашем коде не было функции one и ничего не возвращалось. Цикл foreach также вызывает функцию по-другому, я удалил рабочую функцию и заменил ее на $this->one().

class something {

public function one(){
   $choices = array(
     'something' = array(
       'name' => 'test';
     ),
     'something_two' = array(
       'name' => 'test_one';
     ),
   );
   return $choices;
}

public function two(){
?>
<select>
  <?php
  foreach ($this->one() as $choice ){
    echo '<option value="'.$choice['name'].'">'.$choice['name'].'</option>';
  }
  ?>
</select>
<?php
}    

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