2016-10-11 75 views
0

標題有點混亂,我知道。基本上我想阻止一個文件中的變量,我將include()轉換爲另一個文件格式。 實施例:如何防止在文件包含時使用變量()ed

File1.php:

<?php 
$foo = "Bar"; 
?> 

File2.php:

<?php 
include("File1.php"); 
echo $foo; 
?> 

在上面的例子File2.php顯然將回聲 「酒吧」;但是,我想阻止這種情況發生,同時仍然可以訪問File1.php內的任何函數。理想情況下,在函數外聲明的變量在文件包含()時應該不可訪問。

+1

'unset($ foo);'但是真的這個尖叫的糟糕的代碼結構。 – nogad

+0

不幸的是,我沒有別的選擇,只能使用這種類型的代碼結構。 – HittmanA

+0

@nogd這是正確的答案,請發佈。 –

回答

2

使用PHP namespaces

File1.php:

<?php 
namespace baz { 
    function foo() { 
     return "Bar"; 
    } 
} 
namespace { // global code 
    $x = "XXX"; 
} 
?> 

File2.php:

<?php 
include("File1.php"); 
echo $x; // outputs XXX 
echo foo(); // Undefined 
?> 

要訪問foo你必須使用use

File2.php :

<?php 
include("File1.php"); 
use function baz\foo; 
echo foo(); // outputs Bar 
?> 
+0

這是否仍然允許調用名稱空間中的函數(我是使用名稱空間的新手)? – HittmanA

+0

@HittmanA更新了我的答案。你可以閱讀更多關於我發佈的鏈接。 –

+0

謝謝,這個絕對有用! – HittmanA

相關問題