所以我有一个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~~~"
而不是它被替换为的文本字符串。
答案 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
中的代码在全局范围内运行。一旦$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 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没有值,因为它没有在函数内定义/声明。