2012-04-24 165 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