Передача объектов PHP в javascript
У меня есть объекты в php, каждый из которых представляет "элемент" и всю информацию, связанную с ним.
И когда пользователь просматривает страницу, эти объекты должны быть переданы в javascript. В идеале, отражая одну и ту же структуру, я могу использовать Raphael для отображения каждого элемента и его информации как отдельных фигур на моем сайте.
Однако, как вы получаете объект от php до javascript?
Ответы
Ответ 1
Вы можете преобразовать объект PHP в массив, а затем использовать функцию JSON для его кодирования. После этого расшифруйте его с помощью JavaScript. Вот несколько основных шагов:
Это интересный учебник о передаче объекта JavaScript в объект PHP. Вы можете найти это полезным, просмотрев некоторые другие видео/связанные видео.
Надеюсь, что это поможет.
Ответ 2
Поздний ответ, но я очень удивлен, что никто не упомянул, что такое, возможно, "правильный" способ развернуть эту функциональность.
Внедрите JsonSerializable интерфейс на свой объект. Этот интерфейс определяет один абстрактный метод, jsonSerialize
. Этот метод должен возвращать представление массива вашего объекта.
При попытке использовать json_encode
для объекта будет вызываться jsonSerialize
. Вы можете представить этот интерфейс как своего рода "магический метод", специфичный для собственной функции кодирования JSON, эквивалентный __toString
для строк.
Поместив его в действие, у вас есть объект, который выглядит так:
class MyFoo implements JsonSerializable {
public $bar = 'hello';
public $baz = 'world';
public function jsonSerialize () {
return array(
'bar'=>$this->bar,
'baz'=>$this->baz
);
}
}
$myFooInstance= new MyFoo();
echo json_encode($myFooInstance); // {"bar":"hello","baz":"world"}
Когда я реализую это в своих проектах, я обычно ставил метод toArray
в объекты, который генерирует массив, и я использую jsonSerialize
:
public function jsonSerialize () { return $this->toArray(); }
... таким образом я также могу использовать форму массива, если я так хочу. Это также удобно, если вы реализуете сериализацию объектов с помощью __sleep
Documentation
Ответ 3
Я использую это:
<script>
var js_data = '<?php echo json_encode($php_data); ?>';
var js_obj_data = JSON.parse(js_data );
</script>
$php_data может быть от простых массивов до массивов объектов.
Ответ 4
Вы будете использовать JSON для кодирования объектов PHP, чтобы они могли получить доступ к Javascript. Специфика того, как это сделать, зависит от вашего приложения.
PHP имеет функции json_encode и json_decode для этой цели.