Проблема области: требуемый файл не может получить доступ к переменным при вызове в классе
$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.