2012-04-24 171 views
0

我试图使用在本地范围内创建的变量,而无需在全局范围内分配该变量。看看我的意思:如何在局部范围内使用在全局范围内创建的“无需分配”的变量

<? 
function foo(){ 
    $bar = inside; 
} 
foo(); 
echo $bar; // It will give an error that $bar is not assigned 
?> 

现在你可能已经明白我在想什么了..?是的,我希望在不分配全局范围的情况下回显$ bar。

一些编码示例很受欢迎。

在此先感谢

+1

你在寻找没有全局变量的全局变量,这显然是不可能的。有一个更好的方法来做你想做的事情;告诉我们它是什么。 – Jon 2012-04-24 13:35:39

+0

我试图做一个函数,使SQL查询更容易,它返回$ result(本地)查询的结果。我想在运行函数 – yusufiqbalpk 2012-04-24 13:55:19

+1

之后将该$结果赋值给另一个变量(全局)**不要这样做。你的代码会很糟糕。**按照昆廷的建议,尽管这不是你所问的。 – Jon 2012-04-24 13:57:21

回答

1

只有可能的方式是使用$GLOBALS超级全局(至少不还):

function foo(){ 
    $GLOBALS['bar'] = 'baz'; 
} 

foo(); 
echo $bar; 

否则你看第一个在全球范围内定义它,然后指定你需要访问它使用global

$bar = null; 

function foo(){ 
    global $bar; 

    $bar = 'baz'; 
} 

foo(); 
echo $bar; 

更好的选择我s到哪里范围保持在对象中使用对象,你仍然可以保留的代码结构和完整性:

class Foo 
{ 
    var $bar = null; 

    function Bar() 
    { 
    $this->bar = 'baz'; 
    } 
} 

$foo = new Foo(); 
$foo->Bar(); 
echo $foo->bar; 
+1

呃...是这个*“没有在全球分配这个变量”*? – Jon 2012-04-24 13:36:12

+2

这是OP不想做的事情。 – Deleteman 2012-04-24 13:37:21

+0

@ Jon/Deleteman:是的,它将其定义在全局范围内,但是定义一个变量只是为了从函数中分配一个返回值(您认为在Quentin示例中定义了“$ bar”?)。你必须在某个时候在那里定义它。这是一个“预先定义”的问题,正在缓解。 – 2012-04-24 13:38:48

2

使用返回值。

<?php 
function foo(){ 
    $bar = "inside"; 
    return $bar; 
} 
$bar = foo(); 
echo $bar; 
?> 
+0

我告诉过我想使用$ bar而不分配。你为$ bar分配了一个函数,这不是我所需要的。 – yusufiqbalpk 2012-04-24 13:35:49

+2

@yusufiqbalpk - 这可能是你想要说的,但它含糊不清,并且很容易解释。我假定你的意思是“不使用[全球'关键字](http://uk.php.net/manual/en/language.variables.scope.php#language.variables.scope.global)”。如果数据不在您想要使用的范围内,则不能使用这些数据。这是不合逻辑的,逻辑是编程的核心。 – Quentin 2012-04-24 13:36:58

+0

请告诉我关于布拉德克里斯蒂的答案。有什么不合逻辑的吗? – yusufiqbalpk 2012-04-24 13:39:19

0

如果你想从outsite它的内容访问本地变量的内容,你有3种选择:

使用全局变量:通常不是推荐的,而不是你要找的。

返回该变量的值:

<? 
function foo(){ 
    $bar = inside; 
} 
$outisde_bar = foo(); 
echo $outside_bar; 
?> 

使用引用变量作为函数的属性:

<? 
function foo(&$bar){ 
    $bar = inside; 
} 
foo($bar); 
echo $bar; 
?> 

这是否帮助?

+0

而我是**正面**在这个例子中全球范围内既没有'$ outside_bar'也没有'$ bar'定义,作为我的例子他们显然是... – 2012-04-24 13:40:06

+0

第三个例子不工作。请检查它 – yusufiqbalpk 2012-04-24 13:48:39

+0

在第三个例子中,'&'应该只是'&',但是SO正在改变它。 – Deleteman 2012-04-24 13:54:13