2011-12-25 79 views
2

如何在函數外創建一個變量,但不應該在我的php文件之外顯示?限制一個全局變量只能訪問我的php文件

我是指具有單個文件範圍的全局變量。我不想在明天可能衝突的全局命名空間中添加函數名稱。

+2

允許我一個愚蠢的問題:爲什麼不把它作爲參數傳遞給你的函數呢?你將以這種方式解決兩個問題。 – 2011-12-25 18:13:32

+0

我想要一個常量變量被許多函數使用。但它的用途僅限於我的模塊,不應該打擾其他的代碼。其實我正在研究Drupal。 – user774250 2011-12-25 18:16:14

+0

PHP沒有文件範圍這樣的東西。 – Gordon 2011-12-25 18:29:29

回答

0

與PHP5.2及以下,你根本無法做到這一點。一旦它是全球性的,它就是全球性的。

但是從5.3開始,有Namespacing,它允許不同級別的範圍。

在這裏看到:http://www.ibm.com/developerworks/opensource/library/os-php-5.3new3/index.html

+0

我的文件中的全局變量是否可以在其他文件中訪問,而不包括我的PHP文件,並且僅僅使用我的變量的全局聲明? – user774250 2011-12-25 18:18:53

+0

答案有點讓人誤解。命名空間不允許限制變量的作用域,但是隻處理某些東西的名字。 – hakre 2011-12-25 21:58:36

+0

@ user774250:全局變量可以(永遠)隨處訪問(全局)。 – hakre 2011-12-25 21:59:08

4

你可以使用匿名函數:

<?php 

$x = function() { 
    $local_global = "nyah can't access me from outside"; 
    ... do your stuff ... 
} 

$x(); 
+0

這不是根據OP的問題,而是內部的功能之外。 – Gordon 2011-12-25 18:25:49

+0

只有兩種方法可以在PHP中隱藏變量。命名空間和匿名函數。 – 2011-12-25 18:27:02

+0

但我想在我的文件中的多個函數中使用$ local_global。它會起作用嗎? – user774250 2011-12-25 18:29:32

1

這可能是最不雅的解決方案永遠,但對於大多數情況下,它可以在無需將變量傳遞給每一個工作功能,這是你不想做的事情。

只需創建一個函數,它將返回需要的值作爲「全局」,並在需要時調用該函數。既然你說你想要的只是裏面一個php文件中要訪問這個變量,只是把這個定義功能有:

function faux_global() 
{ 
    $faux_global_var = 'This is supposed to be global'; 
    return $faux_global_var; 
} 
0

我想很多功能使用的常數變量。但它的用途僅限於我的模塊,不應該打擾其他的代碼。其實我正在研究Drupal。

我不太瞭解drupal模塊的要求,但是您描述的內容聽起來像是受保護的常量或變量。由於受保護的常量不存在,唯一的選擇是受保護的變量。只需將所有的模塊函數代碼放入一個或多個可以訪問受保護的成員變量的類,就可以了。

class MyModule 
{ 
    protected $variable; 
    public function myFunction() 
    { 
     $this->$variable; # accessible only within MyModule functions. 
    } 
} 

只要你只使用一個類,一個私有變量就可以工作。