Как «глобализировать» переменные PHP? - PullRequest
0 голосов
/ 13 января 2012

У меня есть страница с именем ChangeApprovalInfo.php - она ​​имеет функцию Row_Rendered следующим образом;

function Row_Rendered() {

    // To view properties of field class, use:
    //var_dump($this-><FieldName>);

    $RecordOwner = $this->RequestUser->CurrentValue;  
        echo $RecordOwner;
} 

Повтор $ RecordOwner возвращает мне данные, которые мне понадобятся для запроса sql на другой странице ....

У меня есть другая страница с именем ChangeApprovalEdit.php - эта страница имеет

<?php include_once "ChangeApprovalinfo.php" ?>

в верхней части файла.

ChangeApprovalEdit.php имеет функцию, где мне нужнопеременная $ RecordOwner, как определено в ChangedApprovalInfo.php

Если я добавлю «echo $ RecordOwner» на страницу ChangeApprovalEdit.php, я получу сообщение об ошибке, сообщающее, что это неизвестная переменная.Насколько я понимаю, мне нужно «сделать это глобальным» или какой-то такой бизнес.Я очень мало знаю о PHP, и страницы, которые я редактирую, длинные и сложные.(по крайней мере для меня)

  • Что мне нужно сделать?Я знаю, что предоставленной мною информации может быть недостаточно для ответа на вопрос.Я не знаю достаточно, чтобы даже точно знать, что мне нужно спросить.Если понадобится больше информации, я отредактирую и уточню.

вставка файлов

ChangeApprovalInfo.php = http://pastebin.com/bSRM1wwN
ChangeApprovalEdit.php = http://pastebin.com/AStG9pqb

РЕДАКТИРОВАТЬ: Изменение Row_Rendered на это кажется более эффективным.У меня проблемы с видением, ГДЕ я могу позже отобразить эту переменную ... но я кое-что получаю с этим ...

function Row_Rendered() {
    // To view properties of field class, use:
    //var_dump($this-><FieldName>);
    $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
} 

Ответы [ 5 ]

2 голосов
/ 13 января 2012

Вы можете сделать пару вещей:

Сначала вы можете вернуть $RecordOwner из функции и сохранить ее значение в переменной. Этот метод обычно предпочтителен.

function Row_Rendered() {

    // To view properties of field class, use:
    //var_dump($this-><FieldName>);

    $RecordOwner = $this->RequestUser->CurrentValue;  
        echo $RecordOwner;

    return $RecordOwner;
} 

// Store it in a variable when calling the function.
$RecordOwner = Row_Rendered();

Или вы можете сделать его глобальным внутри функции:

function Row_Rendered() {

    // To view properties of field class, use:
    //var_dump($this-><FieldName>);

    $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
        echo $GLOBALS['RecordOwner'];
} 
2 голосов
/ 13 января 2012

Не echo переменные из функций, которые просто выводят их на стандартный вывод. return их из функции, так что вы можете использовать значение в другом месте.

function Row_Rendered() {
    $RecordOwner = $this->RequestUser->CurrentValue;  
    return $RecordOwner;
} 

Тогда вместо

$obj->Row_Rendered();

использовать

echo $obj->Row_Rendered();

и если вы хотите использовать значение в другом месте, используйте

$value = $obj->Row_Rendered();
0 голосов
/ 26 июля 2018

Установить переменную как глобальную из функции

$my_global_var = "old value";

function doing_stuff(){
  global $my_global_var; //this will use the global variable instead of creating a local one
  $my_global_var = "new value";
}

echo $my_global_var;//returns "new value"
0 голосов
/ 13 января 2012

РЕДАКТИРОВАТЬ: Изменение Row_Rendered к этому, кажется, более эффективным.У меня возникают проблемы с тем, ГДЕ я могу позже отобразить эту переменную ... но я что-то получаю с этой ...

function Row_Rendered() {
    // To view properties of field class, use:
    //var_dump($this-><FieldName>);
    $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
}

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

$obj->Row_Rendered();
$obj->foobar();

echo $GLOBALS['RecordOwner'];

Быстро, что будет echo ed и откуда это значение будет получено?Ну, это зависит от того, что делает $obj-foobar().Может быть, это меняет глобальную переменную.Может быть, это не так.Кто знает, была ли переменная вообще установлена?Как бы вы проследили, что именно произошло, без добавления строки отладки после каждого вызова функции?

И это всего лишь три строки кода.Представьте себе, что в приложении любой сложности.

Теперь то же самое, если я return значение из Row_Rendered:

$owner = $obj->Row_Rendered();
$obj->foobar();

echo $owner;

Если метод Row_Rendered ведет себя какСледует (возвращая владельца), этот код очень предсказуем.Если вы не будете следовать этому шаблону, у вас будет чертовски много времени, чтобы сделать что-нибудь, когда приложение увеличится до любого среднего размера.

0 голосов
/ 13 января 2012

Вы можете использовать массив $GLOBALS superglobals , например:

function Row_Rendered() {
  $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
}

Однако, вы не должны этого делать . Вместо этого выполните рефакторинг своего приложения, чтобы представление в ChangeApprovalinfo.php просто содержало функцию, которая затем вызывается с соответствующими параметрами.

...