All streams
Search
Write a publication
Pull to refresh
272
0.2
Send message
угу только для выполнения батников не надо скачивать и ставить какой-либо интерпретатор)
+5 баллов в html5test :)
а почему бы просто не изменить Default Settings?
как бы вроде стандартное решение, особенно в синглтонах.
только удобнее использовать не Application::getInstance(), а self::getInstance(), тогда не забудем поменять имя класса при рефакторинге возможном :)
«заголовочный файл», так проще :)
для своей хоумпаги писал что-то подобное, только там было 2 возможных модели урлов — /controller/action и произвольные роуты, ну и немного другая модель переменных, без всяких ассертов, сразу в маршруте пишем регулярку.
Примерно так:
    require_once('../framework/Main.php');
    require_once('../application/config/config.php');

    $routes = array(
        '/blog/get/(\d+)' => array('controller' => 'blog', 'action' => 'get', 'params' => array(1 => 'id')),
    );

    Main::setRoot(dirname(__FILE__) . '/../');
    Main::setRoutes($routes);

    arr2obj($config);
    Registry::set('config', $config);

    try
    {
        Main::run();
    } catch (Exception $e)
    {
        header("HTTP/1.0 404 Not Found");
        include('404.html');
    }

/updates/get попытается вызвать updatesContoller->getAction
/blog/get/123 blogController->getAction, и сиглтон Request будет содержать параметр id = 123.

А в ваш код неплохо было бы добавить autoload.
    private function __construct()
    {
        spl_autoload_register(array($this, 'loader'));
    }

    private function loader($class)
    {
        $incPath = get_include_path();
        $end_ptr = strlen($class) - strlen('controller');
        if ($end_ptr != 0 && strcasecmp(substr($class, $end_ptr), 'controller') === 0)
            set_include_path($this->_root . $this->_controllerPath . PATH_SEPARATOR . $incPath);
        else
            set_include_path($this->_root . $this->_modelsPath . PATH_SEPARATOR . 
                             $this->_root . $this->_libraryPath . PATH_SEPARATOR . $incPath);
        $filename = $class . '.php';
        $f = fopen($filename, 'r', true);
        if (!$f)
        {
            set_include_path($incPath);
            throw new Exception('Class not found.');
        }
        fclose($f);
        include $filename;
        set_include_path($incPath);
    }
сравнили облако с vds/dedicated.
имхо, это не особо корректно :)
хе, вы правы, ~15% разница.
Основная проблема в том, что компилятор не распознаёт то, какую функцию мы вызываем. И не может соптимизировать — инлайн не выполняется, оптимизация по регистрам тоже невозможно, так как не известно в каком окружении вызывается табличная функция, и какие регистры свободны, для case'ов такой проблемы нет.
Действительно, насчет производительности я был не прав.
это совсем нехороший выход, ибо будет n проверок, вместо одного табличного перехода, как правило.
switch -> call table а внутри функций из этой таблицы будет вложенность 2-3, судя по коду.
На производительности это ни скажется ни разу, ибо современные компиляторы сами используют такой подход при генерации кода.
Единственный минус такой замены в плюсах/си только то, что мы не сможет в case'ах падать вниз, что самом по себе является дурным тоном.
Ну вроде такого:

case 'a':
    doSomeForA();
case 'b'"
    doSomeForAB();
    break;

Ну а насчет «красивости» — мне свитчи совсем не нравятся, использую таблицы вызовов довольно часто. Здесь дело вкуса.
p.s. вы правда считаете, что всякий алгоритм можно отрефакторить до 2-4 уровней?

да, причём не только можно, но и нужно :)
ну и функции декомпозировать, если больше 2х сферических экранов.
В гугле объясняют свои предпосылки.
С этим правилом, как я понял, ситуация такая, что хотят сохранить однородность кода, ибо уже много написанного, который следует этому правилу.
А вообще вместо 80 можно подставить своё, суть не поменяется, кроме того что лимит должен быть обязательно, ибо не у всех 22"-30" мониторы.
во многих стандартах кодирования :)
например у гугла
это как бы пример же.
длинные if'ы с кучей условий не всегда влезают в 80 символов.
умные редакторы умеют стирать по [tab_size] пробелов за раз, там где это нужно.
ну опять же — не у всех цель карьера, а например заниматься любимым делом за неплохую зарплату гораздо лучше для них чем быть менеджером за отличную зп.
может потому что кому-то нравится программировать а не управлять людьми? :)

Information

Rating
2,943-rd
Location
Красноярск, Красноярский край, Россия
Registered
Activity