глобальные php помощь - PullRequest
       27

глобальные php помощь

0 голосов
/ 18 ноября 2009

Я пытаюсь использовать глобальный файл, который просто используется для публикации данных. Глобал не регистрируется на этой странице. Как я могу получить глобальные переменные, доступные на этой странице.

РЕДАКТИРОВАТЬ, возможно, я не слишком ясно, поэтому позвольте мне прояснить это. У меня есть эти файлы

index.php

global $user;
echo $user->uid;

post.php

global $user;
echo $user->uid;

Теперь из index.php я пишу в post.php через jquery. Однако, когда я отображаю $ user-> uid из post.php, это не отражается, но когда я отображаю его из index.php, он показывает это. Как я могу получить этот $ user-> uid доступным из post.php.

Ответы [ 5 ]

2 голосов
/ 18 ноября 2009

Другой способ получить доступ к переменным из глобальной области видимости - использовать специальный PHP-массив $ GLOBALS, определенный PHP.

Пример из php.net

<?php
$a = 1;
$b = 2;

function Sum() {
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
} 

Sum();
echo $b;
?>
1 голос
/ 18 ноября 2009

Вы должны помнить, что когда пользователь отправляет форму и перенаправляет на post.php, переменные в index.php давно исчезли. Выполнения PHP недолговечны в отличие от обычных настольных приложений.

Все, что вы делаете в index.php, чтобы получить объект $user, должно повторяться в post.php. Если вы не хотите копировать код, просто поместите его в какой-нибудь файл init_user.php и включите в него index.php и post.php, используя include_once('init_user.php');

1 голос
/ 18 ноября 2009

Я думаю, что вы должны смотреть на сессии, а не глобальные. Судя по всему, вы регистрируете переменную на одной странице, а затем, когда пользователь переходит на другую страницу, вы хотите, чтобы эта переменная использовалась.

Сессии позволят вам сделать это. Просто используйте этот код:

<?php
session_start();
$_SESSION['my_var'] = 'foo';

И на последующих страницах ...

<?php
session_start();
echo $_SESSION['my_var'];

Который выдаст foo.

http://www.php.net/manual/en/book.session.php

0 голосов
/ 18 ноября 2009

Согласен с маттбастой, глобалы были отключены по соображениям безопасности. Вы можете использовать его в любом случае, но правильный способ - использовать сессию.

Другое дело, вы сказали: «теперь из index.php я публикую в post.php через jquery». Вы используете Ajax-вызов? Если нет, я не понимаю, почему для этого используется JS ... Если вы отправляете данные через Ajax и хотите отправить только этот параметр, попробуйте следующее:

<input style="display:none" type="hidden" id="uid" name="uid" value="<?= $user->uid ?>" />

А затем обработайте это из вашего вызова ajax как:

$.ajax({
    type: "POST",
    url: "/post.php",
    data: "uid=" + uid + "&otherVar=" + otherVar, //and so on..
    success: function() {
        //Here you can notify the user that the script ran successfully 
        }
});//end of ajax

Надеюсь, это поможет вам.

0 голосов
/ 18 ноября 2009

если вам нужна глобальная функция внутри, сделайте вот так

function phpFoobarFunction(){
  global $my_global;
}

ссылка о scoping

для суперглобальных , таких как $_POST, $_GET (и т. Д.), Они доступны в любом месте .


из вашего обновленного вопроса, вы не можете разделить переменные между двумя различными вызовами PHP. вы бы имели:

  • для воссоздания вашего класса $ user путем перенаправления из БД (или из вашего источника)
  • Запасите объект в $ _SESSION
  • передать пользовательский объект через javascript (но это опасно, потому что пользователь может его редактировать) и добавить его в params к вашему вызову ajax.

больше справок о том, как PHP играет с сессией там

...