#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 — обновить сеанс