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

#php #class #object #require #scopes

#php #класс #объект #требовать #области применения #требуется #области действия

Вопрос:

 $test = test;

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

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

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

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

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

Редактировать: ————————

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

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

Комментарии:

1. Добавьте переменные в область метода

Ответ №1:

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

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

Комментарии:

1. Возможно, я недостаточно ясен, у меня есть тысячи файлов, к которым я хочу получить доступ к этому файлу. Например, файл: 1,2,3,4 все их переменные установлены, и этому файлу нужен доступ к ним — эти методы непрактичны для чего-то такого большого.

2. @Billyjakeo’Connor, пожалуйста, проверьте мой второй ответ на эту проблему

Ответ №2:

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

 $text = 'test';

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

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

Ответ №3:

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

 file.php:

    <?php
    global $test
    echo $test
  

или

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

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

Ответ №4:

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

 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);
  

Комментарии:

1. Строгие стандарты: Нестатический метод PEAR::registerShutdownFunc() не должен вызываться статически :/ извини, приятель, но это не работает.