在不使用global
关键字的情况下,是否有另一种在Java中以Java stlye方式使用全局变量的方法?
以下示例非常常见且简单。我会使用define
关键字进行操作,但正如您所看到的,varibales相互依赖,我相信您无法通过define
来实现。
在下面的示例中,我当然会收到错误。
真的期待这个解决方案。在我看来,不得不为我想要使用全局变量的函数写一个global
定义似乎是一个应该是更好的解决方案。
$BASE_URL = "mysite.com";
$PRODUCTS_URL = $BASE_URL . "/products";
$ABOUT_URL = $BASE_URL . "/about";
function foo() {
echo $BASE_URL;
}
答案 0 :(得分:1)
您可以使用$ GLOBALS超全局,如下所示......
function foo() {
echo $GLOBALS['BASE_URL'];
}
但是 - 请参阅下面的Kolink的评论。从PHP 5.4.0起,$ GLOBALS超全球仅在首次使用时初始化,因此在不使用它并坚持使用global关键字时具有边际性能优势。
对于你正在做的事情,你可以简单地定义一个全局数组,例如
$CONF['BASE_URL']='foo';
然后你只需要在需要它的任何函数中使用global $CONF
,或者更好,将它包装到某种配置类中。
答案 1 :(得分:1)
我会用define关键字来做,但正如你所看到的,varibales彼此依赖,我相信你无法用define实现。
不完全正确,这样做会很好 - 这就是我可能接近这个的方式:
define('BASE_URL', "mysite.com");
define('PRODUCTS_URL', BASE_URL . "/products");
define('ABOUT_URL', BASE_URL . "/about");
只要小心吃掉常量命名空间,你可能想要编写一个函数,也许是这样的(可以使用调整,只是一个例子):
function get_url($item = NULL, $include_base = TRUE)
{
$urls = array(
'base' => 'mysite.com',
'products' => '/products',
'about' => '/about',
);
$output = $include_base ? $urls['base'] : '';
if (isset($urls[$item])) $output .= $urls[$item];
return $output;
}
然后将其称为echo get_url('products');
。只要在调用foo()
时定义它,它就会起作用。我会尽力避免global
或$GLOBALS
。
答案 2 :(得分:0)
你甚至可以使用$_SESSION
但不是一个非常优雅的解决方案。
为什么输入global
这么难?这不是一件容易的事。
define()
也很好。