2016-10-11 10 views
0

Название немного запутанно, я знаю. В основном я хочу предотвратить переменную в одном файле, который я включаю() в другую используемую форму файла. Пример:Как предотвратить использование переменных при включении файла() ed

File1.php:

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

File2.php:

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

В приведенном выше примере File2.php, очевидно, будет эхо "Бар"; тем не менее, я хочу, чтобы это не происходило, сохраняя при этом доступ к любым функциям внутри File1.php. В идеале переменные, объявленные вне функций, не должны быть доступны, когда файл включен() ed.

+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

Будет ли это разрешать функции в пространстве имен (Im new для использования пространств имен)? – HittmanA

+0

@HittmanA обновил мой ответ. Вы можете больше узнать о ссылках, которые я опубликовал. –

+0

спасибо, это определенно полезно! – HittmanA