То, что я пытаюсь сделать, это иметь отдельный файл PHP, содержащий настройки для веб-сайта, а затем другие страницы включают этот файл и выполняют код в соответствии с настройками. Однако всякий раз, когда я использую global для ссылки на эти переменные внутри класса, переменные пусты. Например:

Settings.php :

<?php
$setting1 = 'on';
$setting2 = 'off';
?>

Class.php :

<?php
require_once('./settings.php');

class myclass {
  public function __construct {
    global $setting1;
    echo $setting1;
  }
}

$object = new myclass;
?>

Это ничего не печатает. Однако, если я делаю «echo $setting1» вне класса, он печатает «on». Когда я попытался установить переменную внутри самого файла, а не включать ее, она печаталась «вкл», когда я создавал новый объект для моего класса. Есть ли что-то особенное, что мне нужно сделать, чтобы сделать включенные переменные доступными в глобальной области видимости для класса?

2
user155148 12 Авг 2009 в 19:22
Возможно, вы захотите рассмотреть возможность создания статического класса вместо глобальных переменных из соображений безопасности пространства имен. Чтобы напрямую ответить на ваш вопрос, похоже, что проблемы со скобками упоминались другими.
 – 
krdluzni
12 Авг 2009 в 19:30

2 ответа

Вашему конструктору нужны скобки после его имени, например.

public function __construct() {

}

Я подозреваю, что это приводит к фатальной ошибке, которая не отображается из-за вашего display_errors / отчет об ошибках настройки.

8
Tom Haigh 12 Авг 2009 в 19:26
Спасибо. Я добавил это, однако я все еще сталкиваюсь с той же проблемой: включенные переменные недоступны в глобальной области видимости для класса.
 – 
user155148
12 Авг 2009 в 19:39

Вы пропустили скобки:

public function __construct {

Должно быть

public function __construct( ) {

Результат:

$ php -v
PHP 5.2.5 (cli) (built: Nov 29 2007 09:31:38) 
2007-Macbook:Desktop mark$ php class.php
on
1
Mark L 12 Авг 2009 в 19:27