Проблема с переменной PHP! - PullRequest
0 голосов
/ 05 февраля 2010

Итак, у меня есть переменная PHP, значение которой заменено на другой файл PHP. Пример:

$var = "~~~OtherVariable~~~";

Если я выведу эту переменную, она выведет соответствующую строку. Пример:

echo $var; //prints out "This is a string of text";

Похоже, что пока все работает, моя PHP-переменная ($var) показывает, что на самом деле она содержит строку "This is a string of text", а не "~~~OtherVariable~~~".

Теперь возникает проблема: я хочу использовать эту переменную PHP в другой функции PHP, которая у меня есть, где (на той же странице) я хочу, чтобы значение переменных ($var) было "This is a string of text", но вместо этого функция читает это как "~~~OtherVariable~~~", что не то, что я хочу!

Есть ли способ заставить функцию читать переменную как "This is a string of text" вместо "~~~OtherVariable~~~" ??

Спасибо, ребята и Галс

РЕДАКТИРОВАТЬ: Вот кусок кода:

$string = "~~~ItemTitle~~~"; /*Another php file looks for any string in 
this file with "~~~ItemTitle~~~" and replaces it with another block of 
text, ie. "This is a string of text, http://www.google.ca" */

//Then I have a little function to look for any links inside of a string of text
function do_reg($text, $regex)
{
   preg_match_all($regex, $text, $result, PREG_PATTERN_ORDER);
   return $result[0];
}

$regex = '\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]';

$regex = '$'.$regex.'$i';

$A =do_reg($string, $regex); /* This is where I tell it what string I want 
it to look into for any URL's */
foreach($A as $B)
{
   echo "$B<BR>"; //Prints out just the URL
}

Но когда я говорю это тоже, посмотрите в переменную $string, она читается как "~~~ItemTitle~~~", а не строка текста, которую заменяют как.

Ответы [ 5 ]

7 голосов
/ 05 февраля 2010

Похоже, у вас проблема с изменяемой областью видимости.

Когда вы include файла, код из второго файла выполняется в той же области, что и код, в котором находится ваша инструкция include.

Рассмотрим следующий код:

first.php

<?php
$var = 'Apples';
include('second.php');

echo ' and ', $var;

second.php

<?php
$var = 'Oranges';
echo $var;

Запуск first.php приведет к выводу "Oranges and Oranges", поскольку ваш код в second.php будет запущен в глобальной области видимости. После перезаписи $var кодом в second.php невозможно получить исходное значение, поскольку они представляют собой одну и ту же переменную в одной и той же области видимости.


Теперь рассмотрим следующее:

third.php

<?php
function include_isolated($file) {
    include($file);
}

$var = 'Apples';
include_isolated('second.php');
echo ' and ', $var;

Запуск third.php выдаст "Oranges and Apples", тогда как second.php будет запущен в рамках функции include_isolated(). В этом случае $var и $var являются двумя отдельными переменными, поскольку они не находятся в одной области видимости.


Если вам нужно значение из глобальной области (определенное в third.php, вы можете использовать суперглобальный $GLOBALS для доступа к нему следующим образом:

$globalVar = $GLOBALS['var']; // $globalVar = "Apples"

Вы также можете изменить функцию include_isolated(), чтобы сделать $var глобальным следующим образом:

function include_isolated($file) {
    global $var;
    include($file);
}

При этом $var снова станет глобальной переменной области видимости. Это сделает присвоение $var во втором файле, чтобы перезаписать значение в первом. Другие переменные не будут затронуты.


Для получения дополнительной информации о области видимости переменных , пожалуйста, прочитайте Документацию PHP .

0 голосов
/ 07 марта 2015

Чтобы функции могли видеть текущие значения переменных, которые были определены вне функции, это должна быть «глобальная» переменная, как указывает Эрик.

$var = "My String";

function printItOut() {
   global $var;
   echo $var; // prints "My String"
}

Без глобальной строки $ var .. $ var не имеет значения, поскольку она не определена / не объявлена ​​внутри функции.

0 голосов
/ 05 февраля 2010

Ну, чтобы ответить на ваш вопрос (если я правильно понимаю), вам нужно использовать глобальные слова:

global $var = 'something';

function foobar() {
   global $var;  # $var should be 'something' in this context, now
}

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

Обновление: Извините, если этот код не синтаксически правильный - вам может понадобиться обратиться к документации PHP на global. Я давно не писал ни одного PHP и не использую его в своей текущей системе, так что это будет трудно проверить.

0 голосов
/ 05 февраля 2010

Если вы включаете файл, который переопределяет $ var, в функцию, он имеет локальную область действия - это определение не существует вне функции. Некоторый код поможет. Независимо от того, где оно определено, вы можете передать значение переменной функции, которую хотите использовать. Вот пример:

$var = "My String.";
printItOut($var);

function printItOut($passed_value) {
   echo $passed_value; // prints "My String";
}

Если значение определено вне какой-либо функции и вы хотите получить к нему доступ, не передавая его, вы можете обратиться к нему как к глобальному:

$var = "My String";

function printItOut() {
   global $var;
   echo $var; // prints "My String"
}
0 голосов
/ 05 февраля 2010

Сделать это глобальным? Не совсем уверен, что вы спрашиваете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...