Проблема области: требуемый файл не может получить доступ к переменным при вызове в классе

$test = test;

class getFile{
    public function __construct($fileName){
    require $fileName;
  } 
}

$get = new getFile('file.php');

Итак, file.php содержит echo $test;

Если бы я должен был назвать это вне класса, например,

требуют 'test.php'; было бы хорошо $test, но вызов внутри класса имеет очевидные проблемы с областью видимости. Как я могу дать файлам, необходимым в функции, доступ к переменным?

РЕДАКТИРОВАТЬ: ------------------------

У меня есть несколько переменных, к которым я хочу получить доступ к этому файлу (все они динамические в зависимости от страницы, поэтому добавить переменные x & y невозможно, поскольку они не всегда будут установлены) Вместо того, чтобы объявлять каждую переменную как глобально доступную, нет никакого способа чтобы разрешить требуемый файл в классе, получить доступ к этим переменным, как если бы это было не так?

Спасибо ребята за отзыв. К сожалению, то, что я хочу, не представляется возможным, но вы вдохновили меня на создание обходного пути, который регистрирует наиболее важные переменные, которые мне нужны для доступа к моим файлам, как глобальные.

4 ответа

public function __construct($fileName) {
    global $test;
    require $fileName;
} 

буду работать

Возможно, вы могли бы объявить глобальную переменную в вашем классе, например, так:

$text = 'test';

class getFile {
   public function __construct($fileName) {
      global $test;
      require $fileName;
   }
}

$get = new getFile('file.php');

Отвечая на ваш комментарий, у меня есть обходной путь, который вам может понравиться

class getFile{
    public $files = Array();
    public function __construct($fileName){
        $this->files[] = $fileName;
    } 
}

$get = new getFile('file.php');

foreach($get->files as $file) require($file);

или, может быть, вы можете создавать статические методы?

class getFile{
    public static $files = Array();
    public static function get($fileName){
        self::$files[] = $fileName;
    } 
}

getFile::get('file1.php');
getFile::get('file2.php');
getFile::get('file3.php');

foreach(getFile::$files as $file) require($file);

Переменные PHP, объявленные в глобальной области видимости, не становятся автоматически доступными внутри функций или методов. Вы должны явно объявить их глобальными:

file.php:

    <?php
    global $test
    echo $test

или же

public function __construct($filename) {
    global $test;
    require $filename;
}

оба решат проблему. Хотя file.php скрипт выглядит глобально, так как в нем нет определения функции, он все еще ограничен областью действия __construct() метод в вашем объекте, который не будет иметь $ test global.

Другие вопросы по тегам