Я инстанцировал класса в моем index.php
файл. Но затем я использую Ajax jQuery для вызова некоторых файлов PHP, но они не могут использовать мой объект, который я создал в index.php
файл.
Как я могу заставить его работать? Поскольку я не хочу создавать новые объекты, потому что тот, который я создал, содержит все значения свойств, которые я хочу использовать.
Используйте сессию для сохранения объекта для следующей загрузки страницы.
// Create a new object
$object = new stdClass();
$object->value = 'something';
$object->other_value = 'something else';
// Start the session
session_start();
// Save the object in the user's session
$_SESSION['object'] = $object;
Затем на следующей странице, которая загружается из AJAX
// Start the session saved from last time
session_start();
// Get the object out
$object = $_SESSION['object'];
// Prints "something"
print $object->value;
Используя сессии PHP, вы можете сохранять данные на многих страницах для определенного пользователя. Например, у каждого пользователя есть объект корзины, содержащий список товаров, которые он хочет купить. Так как вы храните эти данные только в сессии этого пользователя - каждый пользователь может иметь свой собственный объект корзины, который сохраняется на каждой странице!
mm, вы должны хранить в сессии, $_SESSION["someobj"] = $myobj;
, и убедиться, что при вызове PHP-файла Ajax он включает в себя класс необходимых файлов, который определяет класс $myobj
и любой содержащийся в нем объект.
Не могли бы вы уточнить? Я могу попробовать.
Вот как я создаю объект, а затем присваиваю его переменной сеанса:
include(whateverfilethathastheclassorincludeit.php)
$theObject = new TheObjectClass();
//do something with the object or not
$_SESSION['myobject'] = $theObject;
Вот как я получаю доступ к членам объекта в моем PHP-файле Ajax call:
include(whateverfilethathastheclassorincludeit.php)
$theObject = $_SESSION['myobject'];
//do something with the object
Если вы не хотите перемещать ваш объект, находящийся в index.php, попросите ajax сделать запрос на index.php, но добавьте некоторые дополнительные параметры (post/get), которые позволят вашему index.php обрабатывать его как ajax запрос и не возвращать ваш обычный вывод html web-страницы.
Вы не предоставили код, но я думаю, что вам нужно сделать свой инстанцированный объект глобальным для других сценариев, чтобы увидеть его, например:
$myobject = new myobject();
Теперь я хочу использовать этот объект в другом месте, вероятно, под какой-нибудь функцией или классом, или в любом месте, где он не распознается, так что я сделаю этот объект глобальным с ключевым словом global, и он будет доступен там же:
global $myobject;
Как только у вас есть объект, вы можете поместить его в сессию, а затем использовать его в файле сценария Ajax.
Другой вариант, если вы не хотите использовать сеансы, - сериализовать ваш объект и отправьте его через значение $ _POST в вызове AJAX. Не самый элегантный способ сделать это, но хорошая альтернатива, если вы не хотите использовать сеансы.
См. Сериализация объекта в документации для получения дополнительной информации.
Как предлагали другие, $ _ SESSION
- это стандартный способ сделать это, фактически, это было одной из причин того, что сеансы были изобретены для решения. Другие варианты, то есть сериализация объекта, зависят от того, что клиентская сторона удерживает объект и затем возвращает его без изменений. В зависимости от данных в объекте это не лучшее решение, так как а) объект может включать информацию, которая не должна быть доступна на стороне клиента по соображениям безопасности, и б) вам нужно будет проверить объект после его получения.
Тем не менее, и если вы все еще хотите использовать объект на стороне клиента, то JSON - это вариант для сериализации данных объекта, см. Функции JSON в PHP .