Глобальные переменные в статических классах PHP - PullRequest
0 голосов
/ 23 августа 2011

Есть ли способ использовать глобальную переменную везде в коде?

Я хочу использовать переменную Path для расположенной настроенной папки в каждом пути, который я объявлю в своем коде.

Вот мой код: Index.php

<?php
     require_once('Common.php');
     require_once('Path.php');
?>

common.php

<?php 
     $RootPath = '.';//in this case its root
     //add the RootPath for global using
     $GLOBALS['RootPath'] = $RootPath;
?>

path.php

<?php
     class Path {
          public static $TemplatePath = $GLOBALS['RootPath'].'/Template.php';
     }
?>

Это не сработает, потому что он говорит: "Ошибка разбора: синтаксическая ошибка, неожиданная ошибка T_VARIABLE", когда я пытаюсь вызвать $ GLOBALS при объявлении статической переменной.

Есть ли способ сделать это?

Спасибо в ожидании Alex

Ответы [ 4 ]

2 голосов
/ 23 августа 2011

То, что вы ищете, это константы .

Очень часто их используют для определения определенных путей, например,

define('PATH_ROOT', $_SERVER['DOCUMENT_ROOT']);
define('PATH_TEMPLATES', PATH_ROOT.'/templates');
1 голос
/ 23 августа 2011

Константы класса и статические переменные класса не могут быть инициализированы с динамическими данными.

А как насчет определения метода?

 class Path {
          public static getTemplatePath()
          {
            return $GLOBALS['RootPath'].'/Template.php';
          }
     }

И почему вы сохраняете настройки как глобальные переменные, а не инкапсулируете их в какой-то реестр ?

0 голосов
/ 23 августа 2011

Преобразование вашего (плохого) общедоступного статического атрибута в общедоступный статический метод получения / установки.

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

0 голосов
/ 23 августа 2011

всякий раз, когда вы хотите использовать глобальную переменную внутри функции, которая находится вне области видимости, вы должны сначала объявить ее в методе функции / класса с помощью "global $ varname".

В вашем случае:

Common.php

<?php 
     $RootPath = '.';//in this case its root
     //add the RootPath for global using
     // $GLOBALS['RootPath'] = $RootPath; // no need for this, $[GLOBALS] is about the Superglobals, $_SERVER, $_SESSION, $_GET, $_POST and so on, not for global variables.
?>

Path.php

<?php
     class Path {
          public static $TemplatePath;// = $GLOBALS['RootPath'].'/Template.php';

          public method __construct(){
               global $RootPath;
               self::TemplatePath =  $RootPath.'/Template.php';
          }
    }
?>
...