从PHP中的所需函数访问半全局变量

时间:2012-04-03 14:59:17

标签: php php-5.3

我无法弄清楚如何正确地说出这一点,但希望这段代码足够了:

// a.php
function func_req($f) {
    // I know there are issues with paths, ignore.
    require_once $f;
}


// b.php
$myvar = "my variable!!!";
function myfunc() {
    // get myvar somehow
    return $myvar;
}

// client_code.php
require_once 'a.php';
func_req('b.php');
isset($myvar); // should return FALSE
myfunc(); // should return "my variable!!!"

有没有办法修改代码的任何部分以获得所需的结果?


将client_code.php修改为以下内容:

  1 <?php
  2 require_once 'a.php';
  3 func_req('b.php');
  4 echo isset($myvar) ? 'TRUE' : 'FALSE'; // should return FALSE
  5 echo myfunc() ?: 'undefined'; // should return "my variable!!!"

并将全局声明添加到myfunc()php client_code.php打印:

FALSEundefined

4 个答案:

答案 0 :(得分:1)

$myvar = "my variable!!!";
function myfunc() {
    global $myvar;
    // get myvar somehow
    return $myvar;
}

$ myvar不在myfunc()方法的范围内,你可以将它设为全局(这是令人讨厌的),或将其作为函数参数传递。

答案 1 :(得分:0)

要在函数中使变量可用,您可以执行以下操作:

$myvar = "my variable!!!";
function myfunc() {
    global $myvar; //allows the function to use the variable.
    //carry out any processing as necessary.
    return $myvar;
}

但是应尽可能避免使用全局变量。当然,正确的方法是:

$myvar = "my variable!!!";
function myfunc(myvar) {
    //carry out any processing as necessary.
    return $myvar;
}

全局性不赞同的原因是由于很容易失去对变量进行更改的内容。这反过来又难以维护代码。

答案 2 :(得分:0)

AFAIK PHP中没有文件范围。

你可以使用命名空间(在我看来,这是真的,在PHP中真的很难看)或者使用Classes。也许配置对象符合您的需求?

答案 3 :(得分:0)

您不能将变量专用于函数。你可以使用一个类:

<?php
class Test {
    static private $myvar = "my variable";

    static public function myfunc() {
        return self::$myvar;
    }
}

var_dump(isset(Test::$myvar));
var_dump(Test::myfunc());
?>

Live example