За последние 24 часа нас посетили 53790 программистов и 1773 робота. Сейчас ищут 827 программистов ...

Структура классов небольшого приложения

Тема в разделе "PHP для новичков", создана пользователем Artiom, 9 фев 2014.

  1. Artiom

    Artiom Новичок

    С нами с:
    9 фев 2014
    Сообщения:
    17
    Симпатии:
    0
    Здравствуйте. Подскажите, пожалуйста, по структуре классов.

    Основной класс, который наследюут все (вернее почти все) классы.
    Код (Text):
    1.  
    2. <?php
    3. class Objects {
    4.    
    5.     /**
    6.      * Загруженные объекты
    7.      * @var array
    8.      */
    9.     private static $object = array();
    10.    
    11.     public function __get($class) {
    12.         if (isset(self::$object[$class])) {
    13.             return self::$object[$class];
    14.         }
    15.         else {
    16.             // autoloader подгружает файл
    17.             return self::$object[$class] = new $class;
    18.         }
    19.     }
    20. }
    Какой-то класс1
    Код (Text):
    1.  
    2. <?php
    3. class someClass1 extends Objects {
    4.     public function someFunc() {
    5.         return 'Hello PHP World!';
    6.     }
    7. }
    Какой-то класс2, которому надо обратиться к классу1
    Код (Text):
    1.  
    2. <?php
    3. class someClass2 extends Objects {
    4.     public function someFunc() {
    5.         echo $this->someClass1->someFinc();
    6.     }
    7. }
    Такой подход приемлем в небольшом приложении?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вы не сказали, для чего приемлем. Стоит начать с постановки задачи.
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Если вы подобное увидели в C#, где есть базовый встроенный класс Object, от которого происходит все, включая стандартные типы данных, то тут такого вроде как нет.

    если вы собираетесь что то писать и для ВСЕГО один базовый класс от которого будет происходить все, это наверное глупо, нет смысла.

    А так наследование полезное дело, пользуйтесь.
     
  4. Artiom

    Artiom Новичок

    С нами с:
    9 фев 2014
    Сообщения:
    17
    Симпатии:
    0
    Для небольшого приложения. Несколько базовых классов для работы с хранилищами, валидаторами и т.п. + несколько модулей вроде страницы сайта, меню, новости (которые в свою очередь делятся на несколько классов) и т.п. В принципе мне не нужно иметь более одного экземпляра каждого класса. Задача сделать так, чтобы код был в меру лаконичный и производительный. И вот вопрос, как лучше организовать связь между классами? Постоянно в каждом классе создавать экземпляры требуемых классов почему-то не хочется или так будет лучше?

    По сути этот класс является хранилищем объектов, которые накапливаются по мере первого обращения к ним.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ой, жесткач. Лаконичный и классы для всего и вся - это несовместимые вещи. Лаконичное меню это вывод пунктов в цикле из массива.
     
  6. Artiom

    Artiom Новичок

    С нами с:
    9 фев 2014
    Сообщения:
    17
    Симпатии:
    0
    Тогда уж сразу в HTML проще прописать. Нафиг циклы ещё какие-то писать?
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Вы можете делать как угодно. Просто называйте вещи своими именами. Я вам сказал как отрисовать меню из той же БД циклом. Лаконично? Лаконичнее некуда. Если вам для этого нужны классы и наследование - не называйте это лаконичным.

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

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    В принципе можно, возможно где то даже от этого будет толк, но не много.

    вот допустим у вас есть необходимость в классах user для хранения данных пользователя (логин, адрес эл. почты, пароль и т.д.) где все это будет хранится в ассоциативном массиве примерно так:

    Код (Text):
    1. class user {
    2.  
    3. var $data;
    4.  
    5. // методы
    6. }
    и такой же класс только page, для хранения данных страницы, можно их объединить:

    Код (Text):
    1. class main {
    2.  
    3. var $user; // массив с данными пользователя
    4. var $page; // массив с данными страницы
    5.  
    6. // методы
    7. }
    было бы не плохо если бы можно было записывать объекты классов в сессию, но к сожалению это не работает.

    да и файл с классом разрастется в размерах и будет подгружаться не нужные данные, допустим методы проверки авторизации, зачем, если пользователь авторизуется один раз и все более эти методы не нужны в течении сессии.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Это противоречит парадигме пхп: рождён чтобы умирать
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ну во первых чтобы была динамика, а во вторых просто прописав в html вы не сможете определить активную ссылку на данный момент.
    VLK, php не работает без обновления, а когда обновляется страница то интерпретируется снова и снова весь код.
    Не надо путать с эмулирующими языками где все происходит на виртуальной машине...
     
  11. Artiom

    Artiom Новичок

    С нами с:
    9 фев 2014
    Сообщения:
    17
    Симпатии:
    0
    igordata, да, херню сморозил при вопросе.

    Зачем?

    А сколько пользователь будет пользоваться сессией? Мне жахнуло в голову забанить его резко. Он так и будет ходить в рамкам сессии?

    Спасибо! Просветили.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да.
    если у вас там всё серьёзно, то надо каждый раз проверять права заново.
     
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    было время, когда я путал привыкнув к объектам java