Проблема области: требуемый файл не может получить доступ к переменным при вызове в классе - PullRequest
0 голосов
/ 19 октября 2011
$test = test;

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

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

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

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 19 октября 2011
public function __construct($fileName) {
    global $test;
    require $fileName;
} 

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

0 голосов
/ 20 октября 2011

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

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

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

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

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

0 голосов
/ 19 октября 2011

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

file.php:

    <?php
    global $test
    echo $test

или

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

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

0 голосов
/ 19 октября 2011

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

$text = 'test';

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

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