Мне не удалось найти аналогичный вопрос о Stackoverflow, хотя я уверен, что кто-то, возможно, задавал этот вопрос раньше.
У меня есть класс с методами, которые могут вызываться несколько раз на странице.Каждый раз, когда вызывается метод, мне нужно убедиться, что общедоступные переменные сброшены до значений по умолчанию, UNLESS они были установлены перед вызовом метода.
Этого нельзя достичь с помощьюпростое условие if, потому что нет способа узнать, было ли установлено или все еще установлено значение из последнего вызова метода
Я не могу придумать, как этого добиться, потому что не могу вызвать свой __constructметод (который устанавливает все значения по умолчанию), так как это перезапишет проанализированные значения.Однако мне нужно сбросить их, чтобы предотвратить синтаксический анализ значений из последнего вызова метода.
Очевидный ответ - дать разные имена публичным переменным и возвращаемым переменным.Я сделаю это, если нет другого варианта, но я хотел бы, чтобы количество переменных было минимальным
Это очень трудно объяснить в письменной форме, поэтому я обновлю этот вопрос на примеречто я имею в виду в коде.
ОБНОВЛЕНИЕ
Пример возникновения проблемы:
<?php
class test{
public $return_array;
public $return_string;
public $return_bool;
function __construct(){
// Set the default values
$this->return_array = false;
$this->return_string = false;
$this->return_bool = false;
}
public function method(){
// ... do something
$array = array('test');
$string = 'test';
$bool = true;
// Only return variables if asked to
$this->return_array = $this->return_array ? $array : NULL;
$this->return_string = $this->return_string ? $string : NULL;
$this->return_bool = $this->return_bool ? $bool : NULL;
return;
}
}
// Initiate the class
$test = new test;
// Call the method the first time with one parameter set
$test->return_array = true;
$test->method();
// Print the result
print_r($test->return_array);
// MOST OBVIOUS ANSWER WOULD BE TO RESET VARIABLES HERE LIKE SO
$test->reset(); // HOWEVER, I DO NOT WANT TO HAVE TO CALL THIS EACH TIME I CALL THE METHOD, HERE LIES MY PROBLEM!
// Call the method again with different parameters
$test->return_string = true;
$test->return_bool = true;
$test->method();
// Print the result
echo $test->return_array;
echo $test->return_bool;
/* The problem lies in the second call of the method because $test->return_array has not been reset to its default value. However, there is no way to reset it without affecting the other variables. */
?>
Это в основномочень долгий и сложный способ узнать, возможно ли сбросить переменные класса к их значениям по умолчанию, игнорируя те, которые были проанализированы для вызываемого метода