Как передать глобальные переменные классам в PHP?
Как передать глобальные переменные классам, которые я хочу использовать, не объявляя их глобальными в каждом методе класса ?
пример :
$admin = "admin_area";
if($_POST['login']){
      $user = new Administrator;
      $user->auth($pass,$username);
    }
в Администраторе класса я хочу, чтобы переменная $admin была доступна во всех методах класса без этого:
class Administrator{
   public function auth($pass,$user){
     global $admin;
     .....
  }
  public function logout(){
    global $admin;
    .....
}
} 
5 ответов
Ну, вы можете объявить переменную-член и передать ее конструктору:
class Administrator {
    protected $admin = '';
    public function __construct($admin) {
        $this->admin = $admin;
    }
    public function logout() {
        $this->admin; //That's how you access it
    }
}
затем создайте экземпляр:
$adminObject = new Administrator($admin);
но я бы предложил как можно больше избегать глобальных переменных. Они сделают ваш код намного сложнее для чтения и отладки. Делая что-то вроде выше (передавая его конструктору класса), вы значительно улучшаете его...
Как правило, PHP предоставляет $GLOBAL массив, который можно использовать для доступа к суперглобальным переменным. Кстати, использование этого массива не намного лучше, чем использование "глобального" оператора в начале всех ваших методов. Кроме того, использование такого подхода не представляется хорошей практикой объектно-ориентированного кода.
вы можете:
- либо передайте эти переменные как параметр конструктора (см. ответ от ircmaxell для подробности) 
- или используйте некоторый класс конфигурации (singleton) 
решение зависит от семантики ваших глобальных параметров.
скопировать их в переменные объекта в конструкторе.
 global $user;
 $this->user = $user;
это не слишком элегантно, в любом случае, использование глобалов не слишком элегантно.
попробуйте передать переменную, которая должна быть глобальной для объекта в качестве аргумента, а затем использовать метод _ _ constructor (), чтобы сделать ее свойством класса.
вы можете найти больше информации и примеров здесь: в php при инициализации класса как передать переменную этому классу для использования в его функциях?
лучший способ достичь этого -синглтон, на мой взгляд.
синглтон-это класс со статическим свойством и статическим методом, который вы будете использовать для вызова объекта отовсюду, потому что статические методы могут быть вызваны везде в коде.
пример:
class Singleton 
{
   private static $instance = null;
   private function __construct()
   {
     //...whatever...
   }
   private function __clone()
   {
     throw new Exception('Not clonable..');
   }
   public static function getInstance()
   {
      if (static::$instance === null) {
         static::$instance = new Singleton();
      }
      return static::$instance;
   }
}
теперь, чтобы вызвать его оттуда, где вы хотите, вы можете использовать:
$instance = Singleton::getInstance();
