За последние 24 часа нас посетили 68926 программистов и 11934 робота. Сейчас ищут 2827 программистов ...

autoload+router

Тема в разделе "PHP для новичков", создана пользователем marran, 24 дек 2017.

  1. marran

    marran Новичок

    С нами с:
    24 дек 2017
    Сообщения:
    3
    Симпатии:
    0
    Доброго времени суток. Очень трудно найти по php что то новое в сети, большинство примеров устаревшие. Не нашел ни одного примера автолоадера с неймспейсами. Привожу здесь тот вариант что написал и прошу разъяснить чем плох такой вариант, вроде все работает.
    файл index.php
    PHP:
    1. include ('autoload.php');
    2. $db=include ('core/dbconnect.php');
    3. $data=new \core\Registry();
    4. \core\Router::Run($data);
    файл autoload.php
    PHP:
    1. define('ROOT_DIRECTORY', realpath(dirname(__FILE__)));
    2. define('INCLUDE_DIRECTORY', ROOT_DIRECTORY);
    3. set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDE_DIRECTORY);
    файл router.php
    PHP:
    1. namespace core;
    2. class Router
    3. {
    4.     private $contoller;
    5.     private $data;                  
    6.     public function __construct($data)
    7.     {
    8.         $this->data=$data;
    9.     }
    10.     static function Run($data)
    11.     {
    12.     $url=$_GET['url'];
    13.         $action="Index";
    14.         if(isset($url))
    15.         {
    16.             $exp=explode('/',$url);
    17.             if(file_exists("ctrls/".$exp[0].".php"))
    18.             {
    19.                 $controller="\ctrls\\".$exp[0];
    20.         if(isset($exp[1]))
    21.         {
    22.           if(method_exists($controller,$exp[1]))
    23.             $action=$exp[1];
    24.           else
    25.               $action="err_404";
    26.         }
    27.       }
    28.             else
    29.             {
    30.                 $action="err_404";
    31.                 $controller="\ctrls\\index";
    32.             }
    33.         }
    34.         else
    35.         {
    36.             $controller='\ctrls\\index';
    37.         }
    38.         $controller=new $controller($data);
    39.         $controller->$action();
    40.     }
    41. }
    и для примера пара файлов контроллера
    файл core/ctrl.php
    PHP:
    1. namespace core;
    2. class ctrl
    3. {
    4.  
    5. }
    и файл ctrls/index.php
    PHP:
    1. namespace ctrls;
    2. class index extends \core\ctrl
    3. {
    4.   public $data;
    5.   public function __construct($data)
    6.   {
    7.     $this->data=$data;
    8.   }
    9.   public function index()
    10.   {
    11.     \core\view::load("index","template",$this->data);
    12.   }
    13.   public function about()
    14.   {
    15.     \core\view::load("about","template",$this->data);
    16.   }
    17.   public function err_404()
    18.   {
    19.         \core\view::load("404","template",$this->data);
    20.   }
    21. }
    Понятно что код неидеальный, в php продвинутся дальше определенного уровня не имея работы по специальности - невозможно.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    в гугл набери spl_autoload_register
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @marran, плох тем, что после подключения autoload.php приходится, например, выполнять $db=include('core/dbconnect.php');
    Подробнее: Битва стандартов: PSR-0 против PSR-4
    Там и рассуждения, и описания, и примеры...
     
    marran нравится это.
  4. marran

    marran Новичок

    С нами с:
    24 дек 2017
    Сообщения:
    3
    Симпатии:
    0
    За ссылку спасибо, по крайней мере понятно что такой вариант может существовать, правда маловато написано(
    А чем плохо $db=include('core/dbconnect.php');? Там просто логин пасс к базе. А для работы с базой идет стандартный singleton класс, который в код здесь не попал.
    --- Добавлено ---
    Вот таким образом я и нашел spl_autoload_register...
     
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Там очень много полезного написано... если заглянуть в описание psr-0 и psr-4 по ссылочкам в начале.
    К чему лишний include, если есть автозагрузка классов?
     
  6. marran

    marran Новичок

    С нами с:
    24 дек 2017
    Сообщения:
    3
    Симпатии:
    0
    а, нашел, понял...
    То есть даже простой список параметров лучше делать/добавлять в виде класса?