За последние 24 часа нас посетили 36290 программистов и 1300 роботов. Сейчас ищут 904 программиста ...

Это удобно для вас читаемый код?

Тема в разделе "Прочие вопросы по PHP", создана пользователем engine.energy, 8 окт 2015.

  1. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    Решил чистый код писать. Без изобретения велосипеда...
    Много читал статьи и многие способности PHP. Поэтому хотел сделать опрос.

    Удобно ли вам читать моего стиля кода?
    1. Да
    2. Нет
    3. Затрудняюсь ответить
    4. Другие (Писать в комментарии)

    Код (PHP):
    1. <?php
    2.  
    3. define('DIR_ENGINE', realpath(dirname(__DIR__) . '/engine'));
    4. define('DIR_PUBLIC', realpath(dirname(__DIR__) . '/public'));
    5.  
    6. use Classes\Controller;
    7. use Classes\Dispatcher;
    8. use Classes\Request;
    9. use Classes\Response;
    10. use Classes\Router;
    11. use Classes\Template;
    12. use Classes\Helper;
    13.  
    14. try {
    15.     require_once DIR_ENGINE . '/core.php';
    16.     $request = new Request();
    17.     $router = new Router([
    18.         'routes' => [
    19.             '/auth/login' => function() {
    20.                 if(!Helper\User::isGuest()) {
    21.                     return false;
    22.                 }
    23.  
    24.                 return [
    25.                     'controllerName' => 'auth',
    26.                     'controllerMethod' => 'login'
    27.                 ];
    28.             }
    29.         ]
    30.     ]);
    31.  
    32.     try {
    33.         $result = $router->execute($request);
    34.  
    35.         if ($result === false) {
    36.             $dispatcher = new Dispatcher();
    37.             $result = $dispatcher;
    38.         } elseif (is_array($result) && !($result instanceof Dispatcher)) {
    39.             $dispatcher = new Dispatcher($result);
    40.             $result = $dispatcher;
    41.         }
    42.  
    43.         if ($result instanceof Dispatcher) {
    44.             if (!class_exists($class_name = $result->getClassName())) {
    45.                 throw new \Exception("Класс контроллера не найден");
    46.             }
    47.  
    48.             if (!method_exists($class_name, $controller_method = $result->getControllerMethod())) {
    49.                 throw new \Exception("Метод контроллера не найден");
    50.             }
    51.  
    52.             $controller_instance = new $class_name();
    53.             if ($controller_instance instanceof Controller) {
    54.                 $result = $controller_instance->$controller_method();
    55.             }
    56.         }
    57.  
    58.         if ($result instanceof Template) {
    59.             $response = new Response\Html();
    60.             $response->setContent($result->render());
    61.             $result = $response;
    62.         }
    63.  
    64.         if ($result instanceof Response) {
    65.             $result->send();
    66.         }
    67.  
    68.         throw new Exception('Внутренняя ошибка сервера');
    69.     } catch (\Exception $e) {
    70.         $template = new Template([
    71.             'Title' => 'Внутренняя ошибка сервера',
    72.             'Content' =>
    73.                 '<pre>' .
    74.                 $e->getMessage() . PHP_EOL .
    75.                 $e->getTraceAsString() .
    76.                 '</pre>'
    77.         ]);
    78.  
    79.         $response = new Response\Html([
    80.             "Status" => 500,
    81.             "Content" => $template->render()
    82.         ]);
    83.         $response->send();
    84.     }
    85. } catch (Exception $e) {
    86.     $response = new Response\Plain([
    87.         "Status" => 500,
    88.         "Content" =>
    89.             $e->getMessage() . PHP_EOL .
    90.             $e->getTraceAsString()
    91.     ]);
    92.     $response->send();
    93. }
     
  2. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    А что тут не удобного?
     
  3. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    geone, в будущем возможно я его выложу в интернете, чтобы морока недопонимание которые все пишут на echo каждой строке =)
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Удобно
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Пара советов:
    1. Не стоит в одном файле создавать роуты и сразу же обрабатывать. Когда их будет много получится длинная простынка )
    2. Создайте что-нибудь вроде RouterException и кидайте его, вместо стандартного. Если надумаете сделать централизованный вывод необработанных исключений или их логирование, то будет удобнее все это разделить по типам и соответственно действовать. К примеру, если это RouterException, то просто отдать 404 страницу и не заморачиваться, а если ошибка в mysql - ещё и записать в лог.

    А стиль хорош, сходу даже придраться не к чему ) Пора двигаться дальше, к примеру избавиться от "require_once DIR_ENGINE . '/core.php';", заменив на autoload (http://www.php-fig.org/psr/psr-4/ru/)
     
  6. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    romach, оно и так умеет! Просто класс роутера вы не видите.

    А так у меня преоритет к ссылка ближе всего то сортирует в начале, при проверка URL то отрабатывает при отказах то новый цель роутера. А если вернул ответ то останавливаем.

    Автолоадер и так входит все там входит ядро. Потому что и так я не все код выложил. =) А так память требует 15кб. а генерация целиком кода.
    0.001-0.003 редко до 0.004 так что.

    Добавлено спустя 53 секунды:
    romach, ошибку Exception у каждой будет свои. Просто оно мне пока не нужен для тестирование =) Мои руки умеют знать где ошибка =)

    Добавлено спустя 6 минут 49 секунд:
    romach, а так роутер не нашел то дисепчер будет стандарный то есть главную страницу показывать чем им устрашить ошибку что не найден страницу =)
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    да, читать удобно. Если ты хочешь придерживаться стандартов стандартов
    +
     
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Ну раз все это есть, значит норм ) Но всё же стоит помнить, что самописные версии всего этого хороши только для обучения и понимания происходящего изнутри. Как только закончишь - переходи на фреймворки, ознакомься с composer, распространенными пакетами и т.д. После написания своих реализаций проблем с этим возникнуть не должно, а понимание внутренностей и почему это сделано так, а не иначе, должно сделать из тебя довольно грамотного разработчика. Дело останется только за практическим опытом. Короче, правильным путем идешь )

    Можешь ради интереса реализовать у себя http://www.php-fig.org/psr/psr-7/.
     
  9. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    http://www.php-fig.org/psr/psr-2/ru/

    Накуя???
     
  10. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Кривая формулировка. На самом деле смысл там в том, что последняя строчка должна заканчиваться \n
    Т.е. правильная формулировка All PHP files MUST end with a single newline
    Почему ее никак не скорректируют - хз.

    Добавлено спустя 1 минуту 38 секунд:
    https://github.com/squizlabs/PHP_CodeSniffer/pull/42#issuecomment-8838823
     
  11. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    автолоадер есть в файле core.php

    Код (PHP):
    1. spl_autoload_register(function ($className) {
    2.     $className = ltrim($className, '\\');
    3.     $fileName = '';
    4.     if ($lastNsPos = strripos($className, '\\')) {
    5.         $namespace = substr($className, 0, $lastNsPos);
    6.         $className = substr($className, $lastNsPos + 1);
    7.         $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    8.     }
    9.     $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
    10.  
    11.     require $fileName;
    12. });