dop*_*ner 2 php variables function
我注意到PHP中的一个恼人的特性(运行5.2.11).如果一个页面包含另一个页面(并且都包含它们自己的变量和函数),则两个页面都知道彼此的变量.但是,它们的功能似乎根本没有变量(除了在函数中声明的那些变量).
我的问题:为什么会这样?我怎么能让它没有发生,或者有什么更好的方法呢?
我所描述的一个例子如下.
主页:
<?php
$myvar = "myvar.";
include('page2.php');
echo "Main script says: $somevar and $myvar\n";
doStuff();
doMoreStuff();
function doStuff() {
echo "Main function says: $somevar and $myvar\n";
}
echo "The end.";
?>
Run Code Online (Sandbox Code Playgroud)
使page2.php:
<?php
$somevar = "Success!";
echo "Included script says: $somevar and $myvar\n";
function doMoreStuff() {
echo "Included function says: $somevar and $myvar\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
输出:
Included script says: Success! and myvar.
Main script says: Success! and myvar.
Main function says: and
Included function says: and
The end.
两个页面输出变量就好了.他们的职能没有.
WRYYYYYY
Joe*_*ldi 11
global在函数范围中使用外部定义的变量之前需要使用:
function doStuff() {
global $somevar, $myvar;
echo "Main function says: $somevar and $myvar\n";
}
Run Code Online (Sandbox Code Playgroud)
更详细的解释提供于:http://us.php.net/manual/en/language.variables.scope.php
正如评论和其他答案准确指出的那样,全局变量可能是邪恶的.看看这篇文章解释原因:http://my.opera.com/zomg/blog/2007/08/30/globals-are-evil
虽然您可以使用全局变量,但通常很好的做法是在调用时将变量作为参数传递给函数.这可以确保您确切地知道函数期望正确执行的变量.这不是一个错误,只是预期的功能.
$someVar = 'hey';
$myVar = 'you';
doStuff($someVar, $myVar);
doMoreStuff($someVar, $myVar);
function doStuff($somevar, $myvar) {
echo "Main function says: $somevar and $myvar\n";
}
function doMoreStuff($somevar, $myvar) {
echo "More function says: $somevar and $myvar\n";
}
Run Code Online (Sandbox Code Playgroud)
另请注意,函数作用域之外的变量不必具有匹配的名称作为函数参数本身.这允许您执行以下操作:
$badVar = 'look at me, im a bad var.';
goodFunction($badVar);
function goodFunction ($goodVar) {
// output: look at me, im a good var
echo str_replace('bad', 'good', $goodVar);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |