#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() не должен вызываться статически :/ извини, приятель, но это не работает.