PHP变量问题!

时间:2010-02-04 21:32:51

标签: php variables

所以我有一个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~~~" ??

感谢Guys&加仑

编辑:这是代码块:

$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 个答案:

答案 0 :(得分:7)

听起来你有一个变量范围问题。

当您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中的代码在全局范围内运行。一旦$varsecond.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 Documentation

答案 1 :(得分:0)

让它全球化?不太确定你的要求。

答案 2 :(得分:0)

好吧,回答你的问题(如果我正确理解它),你需要使用全局变量:

global $var = 'something';

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

然而,全局变量使得在较大的程序中很难弄清楚。如果您认为自己需要,可能需要重新考虑您的设计。 (也就是说,根据具体情况,最好避免使用它们。)

更新:很抱歉,如果该代码在语法上不正确 - 您可能需要参考global上的PHP文档。我有一段时间没有编写任何PHP,并且在我当前的系统上没有它,所以很难检查。

答案 3 :(得分:0)

如果您在函数中包含重新定义$ 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"
}

答案 4 :(得分:0)

为了使函数能够查看在函数外定义的变量的当前值,它必须是&#34; global&#34;变量......就像Erik指出的那样。

$var = "My String";

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

没有全局$ var行.. $ var没有值,因为它没有在函数内定义/声明。