Как избегать использования глобальных объектов PHP?

Это не действительно о том, лучше ли 'отделения, чем таблицы для расположения'. Кто-то, кто понимает CSS, может копировать любой дизайн с помощью 'таблицы расположения' довольно прямо. Реальная победа использует элементы HTML для того, для чего они там. Причиной Вы не использовали бы таблицы для non-tablular данных, является та же причина, Вы не храните целые числа как символьные строки - технология работает намного более легко при использовании его для цели, для которой это разработано. Если было когда-либо необходимо использовать таблицы для расположения (из-за недостатков браузера в начале 1990-х), это, конечно, не теперь.

6
задан Nico Burns 18 July 2009 в 17:27
поделиться

3 ответа

Вы могли бы сделать объекты статичны, тогда у вас есть доступ к ним где угодно. Пример:

myClass::myFunction();

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

Расширенный

Я думаю, что то, что вы пытаетесь сделать, очень аналогично тому, что я делаю с моим классом БД.

class myClass
{
    static $class = false;
    static function get_connection()
    {
        if(self::$class == false)
        {
            self::$class = new myClass;
        }
        return self::$class;
    }
    // Then create regular class functions.
}

Что происходит, когда вы устанавливаете соединение, используя $ object = myClass :: get_connection (), вы сможете выполнять любую функцию регулярно.

$object = myClass::get_connection();
$object->runClass();

Expanded

После того, как вы выполните статические объявления, вам просто нужно вызвать get_connection и присвоить возвращаемое значение переменной. Тогда остальные функции могут иметь то же поведение, что и класс, который вы вызвали с помощью $ class = new myClass (потому что это то, что мы сделали). Все, что вы делаете, это сохраняете переменную класса внутри статического класса.

class myClass
{
    static $class = false;
    static function get_connection()
    {
        if(self::$class == false)
        {
            self::$class = new myClass;
        }
        return self::$class;
    }
    // Then create regular class functions.
    public function is_logged_in()
    {
        // This will work
        $this->test = "Hi";
        echo $this->test;
    }
}

$object = myClass::get_connection();
$object->is_logged_in();
13
ответ дан 8 December 2019 в 04:31
поделиться

Вы можете передать текущие глобальные объекты в конструктор.

<?php
  class Foo {
    protected $m_db;
    function __construct($a_db) {
      $this->m_db = $a_db;
    }
  }
?>
8
ответ дан 8 December 2019 в 04:31
поделиться

Что ж, если у вас уже есть какой-то объект, с помощью которого вы ссылаетесь на систему блогов, вы можете скомпоновать эти объекты в него, чтобы они были $ blog-> db () и $ blog-> auth () или что-то еще.

1
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: