1

Тема: О качестве кода

Привет!

Движок классный и работает как надо, только вот качество кода в некоторых местах не очень.

Хочу поделится некоторыми моментами.

В index.php, на строке 11 есть такой код:

list($usec, $sec) = explode(' ', microtime());
$s2_start = ((float)$usec + (float)$sec);

Ее можно заменить на:

$s2_start = microtime(true);

Зачем писать лишний код если функция это может сделать это за тебя :)

Мне смутило как hook'и подключаются:

($hook = s2_hook('idx_pre_redirect')) ? eval($hook) : null;

И так еще 6 раз в index.php (дальше index.php я не смотрел, но уверен что можно и там оптимизировать).
Можно все это в одну функцию положить, и потом вызывать там где надо:

function s2_eval_hook ($id) {
    $hook = s2_hook($id);
    
    return $hook ? eval($hook) : null;
}

И использовать ее так:

s2_eval_hook('idx_pre_redirect');

Есть еще момент в index.php на строке 69 что нужно получить содержание. Не беспокойтесь! Эта функция может возвращать значение:

$return = s2_eval_hook('idx_get_content');

Хотя я конечно против использование eval() так как это может быть небезопасно в некоторых ситуациях.
Функция s2_return_bytes можно сократить на это:

function s2_return_bytes ($val)
{
    $val = trim($val);
    $last = strtolower($val[strlen($val) - 1]);
    switch($last)
    {
        case 'g':
        case 'm':
        case 'k':
            $val *= 1024;
        break;
    }

    return $val;
}

Там точно есть еще моменты которые можно оптимизировать, но я не буду их всех сразу выкладывать :)
Хочу посмотреть что скажет автор.

Спасибо за внимание!

P.S.: Я не в коем случае не хочу/хотел обосрать автора.

07.11.2014 21:16:11. Текст был изменен (volter9).

2

Re: О качестве кода

Про качество кода я уже писал, посмотрите это обсуждение: http://s2cms.ru/forum/post/413/#p413

Аргумент в функции microtime() можно использовать с пятой версии PHP. По историческим причинам версия 1.0 поддерживает PHP 4.3.

Хуки класть в функцию нельзя, потому что фрагменты подключаемого в них кода должны исполняться в текущем контексте. Иными словами, из тела функции не будет доступа к переменным. Подробнее о расширениях и хуках: http://s2cms.ru/docs/extensions

Функцию s2_return_bytes() так переписать нельзя, у вас ошибка. Это легко понять на простейшем тесте вроде s2_return_bytes('2m').

3

Re: О качестве кода

Если погуглить про статистику использование PHP можно найти такую ссылку: http://w3techs.com/technologies/details/pl-php/all/all

Судя по всему PHP4 поддерживает меньше двух процентов всех хостеров. Ну если вам прям надо поддерживать 2% которые сами по себе исчезнут, то ладно.

Роман пишет:

Хуки класть в функцию нельзя, потому что фрагменты подключаемого в них кода должны исполняться в текущем контексте. Иными словами, из тела функции не будет доступа к переменным. Подробнее о расширениях и хуках: http://s2cms.ru/docs/extensions

Глобальные переменные что ли? :О
Или инъекция кода в данный контекст? Как же вы debug проводите тут?

Роман пишет:

Функцию s2_return_bytes() так переписать нельзя, у вас ошибка. Это легко понять на простейшем тесте вроде s2_return_bytes('2m').

http://i.gyazo.com/35b994c81871d92338a9ffca26413040.png

У меня все работает нормально.

4

Re: О качестве кода

:)

2048 - это неправильный ответ.

a@a:~$ cat test.php
<?php

function s2_return_bytes ($val)
{
  $val = trim($val);
  $last = strtolower($val[strlen($val) - 1]);
  switch($last)
  {
        case 'g':
          $val *= 1024;
        case 'm':
          $val *= 1024;
        case 'k':
          $val *= 1024;
  }

  return $val;
}

var_dump(s2_return_bytes('2m'));
a@a:~$ php test.php
int(2097152)

5

Re: О качестве кода

Роман пишет:

:)

2048 - это неправильный ответ.

a@a:~$ cat test.php
<?php

function s2_return_bytes ($val)
{
  $val = trim($val);
  $last = strtolower($val[strlen($val) - 1]);
  switch($last)
  {
        case 'g':
          $val *= 1024;
        case 'm':
          $val *= 1024;
        case 'k':
          $val *= 1024;
  }

  return $val;
}

var_dump(s2_return_bytes('2m'));
a@a:~$ php test.php
int(2097152)

Хм... Был не прав, прошу прощение *blush*
Очень хитрая тактика, возьму на вооружение :)

6

Re: О качестве кода

А вы собираетесь применять MVC шаблон проектирования на S2 CMS?

13.11.2014 02:36:18. Текст был изменен (volter9).

7

Re: О качестве кода

Да.

8

Re: О качестве кода

Это здорово!

К стати, заметил вот такой код (это не о качестве):

if (!defined('S2_ROOT'))
    die;

Ну вот, вы знаете что такое можно заменить на:

defined('S2_ROOT') or die();

Так еще в CodeIgniter'e сделано, жалко что его забросили, интересно было бы как бы он в PHP 5 выглядел бы.

13.11.2014 02:38:24. Текст был изменен (volter9).