PHP является, по существу, без гражданства. Это означает, что для каждого запроса будет создан новый экземпляр всех используемых вами классов и инициализирован, как определено в бите кода class {}
. Так как ваш класс объявляет и инициализирует свойство, как так:
private $tree_selected_item = 1;
Вы говорите, вы уже пробовали не присвоения значения, в результате которой в поглотителе returing null
. Это, опять же, следует ожидать: переменные PHP, которые не инициализируются, по умолчанию инициализируются до null
. Точно так же, как переменные JavaScript инициализируются до undefined
.
Во всяком случае, все это означает, что каждый экземпляр будет начать в жизни с tree_selected_item
значением 1. Если вы хотите, чтобы отслеживать значения в промежутках между запросами, вы должны будете использовать $_POST
, $_GET
, $_COOKIE
или предпочтительно $_SESSION
для хранения этих данных. Тогда вы просто определить конструктор в классе, который принимает значения, которые вы хотите в качестве аргументов, то есть:
public function __constructor($treeItem = 1)
{
$this->tree_selected_item = (int) $treeItem;
}
Seeing, как вы добавили этот вопрос CodeIgniter, вы можете захотеть изменить свой стиль кодирования, чтобы соответствовать the codeigniter standards. Значение отступов в стиле allman (открытие {
происходит по отдельной строке и все такое).
Поэтому, когда вам нужно значение tree_selected_item
, чтобы упорствовать между запросами, вам нужно будет сделать что-то вроде этого (я не использовал CI, поэтому мне придется оставить его для вас, чтобы преобразовать этот код в CI-способ делать вещи):
//session_start(); should be called prior to this point
$_SESSION['treeItem'] = $instance->get_tree_selected_item();
так что приезжайте следующий запрос, вы можете правильно инициализировать экземпляр:
//again, you need a session_start call
$instance = new Catalog($_SESSION['treeItem']);
конечно, вы обнаружите, что, по мере роста вашего приложения, огромное количество значений, которые вы хотите сохранить, становится довольно большим. Именно в этот момент вы начнете использовать сеансы как средство идентификации пользователей и используйте БД для хранения всех соответствующих данных. Вот почему PHP традиционно используется в тандеме с DB-сортировками (например, LA (N) MP-стек - Linux (серверная ОС) Apache (Web-сервер) (нет) MySQL и PHP, логика приложения)
Я не знал, что ... так что единственный способ «сохранить» переменные - через предопределенные переменные PHP? Мех ..:( – slayerbleast
@slayerbleast: Нет, существует много способов «сохранить» значения: хранилище DB, файлы, вторичную среду без состояния, сеансы, файлы cookie, ... Но то, что вы не можете сделать, - это состояние объекта, который сохраняется между запросами. PHP, как и большинство языков, ориентированных на Интернет, не имеет аналогов, и это хорошо. Конечно, он порождает некоторые [псевдопоэтические записи в стиле хиппи] (http: // ruudhein. com/mind-like-water-phps-stateeless-state), но не обманывайте себя, безгражданство - это хорошо. Подумайте о запросе, загрузите свой компьютер, выполните некоторую работу и снова закройте (отправьте ответ) –
@slayerbleast: рискуя увидеть рев-голодных.Если я правильно ответил на ваш вопрос, не могли бы вы серьезно (отметив это как принято) (http://meta.stackexchange.com/q/5234) не уверен в чем-то, тем не менее, не стесняйтесь запрашивать дополнительную информацию (или опубликовать дополнительную информацию) –