Назначить свойство класса в одной функции и использовать его в другой функции в php

#php #oop

#php #ооп

Вопрос:

Пожалуйста, рассмотрите этот класс, у меня есть html-страница с двумя формами, сначала я отправляю form1 , а затем отправляю вторую. Я меняю $aaa значение в первой функции, но после отправки второй формы он показывает пустой массив и теряет присвоенное значение func1 .
Я хочу получить доступ func1 к присвоенному значению в func2 .

 class Myclass
{
    private $aaa = array();

    public function func1() {
        $this->aaa= [1, 2, 3];
    }

    public function func2() {
        var_dump($this->aaa);
    }
}
  

В HTML-файле:

 <form action=" FUNC1 " method="post" id="form1">
    <button type="submit">FUNC1</button>
</form>

<form action=" FUNC2 " method="post" id="form2">
    <button type="submit">FUNC2</button>
</form>
  

Комментарии:

1. php не имеет состояния, он не будет автоматически поддерживать данные между сообщениями формы. Вы должны найти способ самостоятельно поддерживать состояние приложения, сохраняя данные в базе данных, сеансе или передавая их обратно и обратно с клиентом.

2. как сказал Марк Х., поскольку PHP не имеет состояния, при повторной загрузке контроллера для второй формы вы потеряете значения. Я бы предложил использовать func1() для сохранения данных в сеансе, если вы работаете с сеансами.

3. Каков наилучший способ передачи массива? Является ли сессия хорошим способом?

4. Сессия — хороший способ. Однако существует не только один «лучший» способ.

Ответ №1:

 class MyClass
{

public function __construct(
    $closure
) {
    $this->aaa = $closure();
}

public function func1() ....
  

Теперь вы можете хранить свои данные внутри отдельного сеанса в браузере этого пользователя

 session_start();
$myClass = new MyClass(function () use($_SESSION) { if(isset($_SESSION['index_here'])) { return $_SESSION['index_here']; } });
  

Затем то же самое при добавлении или изменении свойства объекта aaa — обновить сеанс