Посмотрите пожалуста скрипт

davidantonyan1981

Новичок
PHP:
class System_Controller{
    
    protected static $_url;
      
    protected static $_controller;
    
    protected static $_action;
    
    protected static $_arg = array();

    public static function getUrl()
    {
       /*
        *  site.loc/controller/action/arg1/arg2/arg3/.../.../
        *  $url[0] = controller
        *  $url[1] = action
        *  $url[2,3,4,5.....n] = arg1,arg2,arg3....
        */
       Controller::$_url = !isset($_GET['url']) ? 'index/index' : $_GET['url'];
       Controller::$_url =  explode('/', rtrim(Controller::$_url , '/'));
        
       // print_r(Route::$_url);
    }
    
    public static function setClsController()
    {
        /**/
        Controller::$_controller = Controller::$_url[0]; 
        
       // print_r(Route::$_controller);
    }
    
    public static function setAction()
    {
        /**/
        Controller::$_action = !isset(Controller::$_url[1]) ? 'index' : Controller::$_url[1];
        
      //  print_r(Route::$_action);
    }
    
    public static function setArg()
    {
        /**/
        if(count(Controller::$_url > 2))
        {
            for ($i = 2; $i < count(Controller::$_url); $i++) 
            {
                Controller::$_arg[] = Controller::$_url[$i];              
            }
        } 
    }

    public static function setController()
    {
        Controller::getUrl();
        Controller::setClsController();
        Controller::setAction();
        Controller::setArg();
        
        $controller  = 'Controller_'.  ucfirst(Controller::$_controller);
        $action = 'action_'. Controller::$_action;
        
        if(class_exists($controller) and method_exists($controller, $action))
        {
            $cls = new  $controller;
            $cls->$action(Controller::$_arg);
        }
        else
        {
            die('error 404 file not found');
        }
    }
      
}
 

Absinthe

жожо
Посмотрел. Теперь смотри на мой аватар, чтобы узнать, что я о нем думаю.
 

WMix

герр M:)ller
Партнер клуба
там все хорошо, левел 1 достигнут! остальное нужно понять.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
davidantonyan1981
Если ты так хочешь узнать наше мнение, внесу свои 5 копеек.

1. $_url; - так давно уже никто не пишет, пишут как ты уже наверное заметил private / protected. Так объявляли вроде бы как приватные свойства в PHP4, где их не было.
2. public static function getUrl(), которая на самом деле return void?
3. setClsController() - имя метода унылое говно, не понятно, что же это за Cls.
4. если вышеозначенные метод и другие, что встречаются до метода setController() всего лишь хелперы-врапперы, какого хрена они не приватные?
5. Где, блин, комменты к методам и их аргументам?
6. die('error 404 file not found'); поубивал бы за это на месте.
 

davidantonyan1981

Новичок
c0dex
спасибо за мнение вы правы на счет хелперов надо будет сделать их protected методами а насчет $_url все по разному пишут свойства а на счет die('error 404 file not found') это просто чтоб проверить работает ли скрипт правильно спсибо за мнение. Я просто только начал изучать PHP поэтому нуждаюсь в советах .
 

keltanas

marty cats
В вебе и для C++ников много работы. Пэхапэ-то тебе зачем?
Человека, который могет написать модуль к энжениксу и какой-нибудь бд с руками оторвут.
 

davidantonyan1981

Новичок
просото люблю web технологии и притом где я шас живу программистам не так уж и хорошо платят поэтому решил изучать php он более распространенный язык программирования.
 

davidantonyan1981

Новичок
c0dex
посмотри пожалуста а так пойдет

PHP:
  class System_Controller{
    
    protected static $url;
      
    protected static $controller;
    
    protected static $action;
    
    protected static $arg = array();

    protected static function getUrl()
    {
       /*
        *  site.loc/controller/action/arg1/arg2/arg3/.../.../
        *  $url[0] = controller
        *  $url[1] = action
        *  $url[2,3,4,5.....n] = arg1,arg2,arg3....
        */
       Controller::$url = !isset($_GET['url']) ? 'index/index' : $_GET['url'];
       Controller::$url =  explode('/', rtrim(Controller::$url , '/'));
    }
    
    protected static function getController()
    {
        /**/
        Controller::$controller = Controller::$url[0]; 
    }
    
    protected static function getAction()
    {
        /**/
        Controller::$action = !isset(Controller::$url[1]) ? 'index' : Controller::$url[1];

    }
    
    protected static function getArg()
    {
        /**/
        if(count(Controller::$url > 2))
        {
            for ($i = 2; $i < count(Controller::$url); $i++) 
            {
                Controller::$arg[] = Controller::$url[$i];              
            }
        } 
    }

    public static function setController()
    {
        Controller::getUrl();
        Controller::getController();
        Controller::getAction();
        Controller::getArg();
        
        $controller  = 'Controller_'.  ucfirst(Controller::$controller);
        $action = 'action_'. Controller::$action;
        
        if(class_exists($controller) and method_exists($controller, $action))
        {
            $cls = new  $controller;
            $cls->$action(Controller::$arg);
        }
        else
        {
            return include '404.php';
        }
    }
      
}
 

WMix

герр M:)ller
Партнер клуба
davidantonyan1981
поздравляем, level 1,0001 достигнут
я понимаю с++ , но тут этот синтакс Controller::$url не совсем то (как часто ты статичные классы на плюсах используешь?)
тут ближе к голым структурам на С надо писать $this->url, попробуй этот синтакс использовать, оно правильней
c0dex
слишком обьективно ))
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я не буду писать много и не по делу, как сочли бы многие. Просто почти все мои "НО" из прошлого сообщения остались на своем месте, то есть автор не сильно поработал. А жаль...

Разберем метод:

PHP:
protected static function getController()
{
        /**/
    Controller::$controller = Controller::$url[0]; 
}
1. phpDoc отсутствует
2. почему метод называется getController, когда он return void?
3. я бы все таки сделал присвоение значения через параметр метода, переименовал бы его в setController($controllerName) и передал бы параметр.

Мне кажется автор и на Сях то не особо писал.
 
  • Like
Реакции: WMix

davidantonyan1981

Новичок
c0dex,Absinthe,Для методов, объявленных с помощью префиксов области видимости "private" или "protected", первый символ имени должен быть нижним подчеркиванием. Это единственное допустимое применение нижнего подчеркивания в имени метода. Методы объявленные как "public" никогда не должны иметь нижнего подчеркивания в имени.
вот ссылка http://www.zendframework.com/manual/1.12/ru/coding-standard.naming-conventions.html#coding-standard.naming-conventions.functions-and-methods
 
Сверху