Как сделать так, чтобы 15 статических классов PHP работали вместе? - PullRequest
1 голос
/ 18 ноября 2009

У меня есть персональное приложение PHP, которое имеет около 15 классов. Каждый класс инициируется только один раз при выполнении страницы. Другими словами, когда страница загружается:

  • 15 классов загружены, и когда загружается каждый файл класса, я создаю один экземпляр класса.
  • Приложение (пока) разработано таким образом, что каждая переменная в системе имеет одно состояние во время генерации страницы. Я использую глобальные переменные для доступа к каждому из этих
  • В течение 3 лет он работал нормально, но я единственный разработчик и отладчик своего собственного кода.

Я слышал все проблемы с Singletons, и я ненавижу делать "global $ var" повсеместно. Пожалуйста, скажите мне, как вытащить этот тип структуры из того, что разработчикам понравится. Я хочу писать программное обеспечение правильным способом, но я не могу найти очень простую структуру кода для этого типа выполнения.

Да, и я не ищу решения для инфраструктуры MVC. Мне бы очень понравились ваши мысли о том, как я беру 15 занятий и превращаю их в подходящую основу для совместной работы. Я также хотел бы высказать мнение о том, насколько «глупо» развиваться таким образом.

Ответы [ 3 ]

2 голосов
/ 18 ноября 2009

Если у вас есть переменные, к которым у всех классов есть доступ, возможно, вы можете попробовать наследование, например что-то вроде

class Settings
{
    var $page_name = "My Page";
    var $database_name = "my_db";
}

и пусть все классы наследуют этот класс как

class Page extends Settings
{
    var $id = 0;
    var $template = "";
    function __construct() {}
}

$page = new Page();
echo $page->page_name;

или вы можете определить значения как константы, если это то, чем они являются

define("PAGE_NAME", "My Page");

у вас будет доступ к PAGE_NAME везде

Я ни в коем случае не говорю, что это правильный путь, это просто a путь. :)

0 голосов
/ 10 февраля 2011

Я сам обдумывал то же самое, и единственный вывод, к которому я мог прийти, - это открыть фреймворк MVC и посмотреть, как он построен.

Другое дело, как уже упоминалось, начинать с одного суперкласса и наследовать оттуда.

Итак, есть класс Object, затем наследуйте его во что-то и так далее и так далее.

0 голосов
/ 18 ноября 2009

Я столкнулся с той же проблемой, когда разрабатывал php-приложения. В итоге я создал классы статических методов и статических переменных. По сути, они работают как пространства имен. Я не уверен, насколько это «стандарт», но на практике это работает очень хорошо.

Единственным другим вариантом будет создание синглтона, как вы упомянули в своем вопросе, но imho, который может быть излишним, если вам не нужно что-то вроде конструкторов и деконструкторов.

Пример:

<?php
class MyClass{
    private static $my_static_variable;

    static public function myStaticMethod(){
        return self::$my_static_variable;
    }
}

Затем вы можете использовать это где угодно без необходимости использовать global:

function foo(){
    MyClass::myStaticMethod();
}

class Bar{
    public function myBarMethod(){
        MyClass::myStaticMethod();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...