PHP и написание чистого кода - PullRequest
5 голосов
/ 05 мая 2010

Я пытаюсь найти лучшие практики для написания PHP.

Мне просто интересно, это вредная привычка.

Например, обработка переменных.

$var = 1
$var = doSomething($var);
$var = doSomething2($var);
$var = doSomething3($var);

Это выглядит немного ужасно.

Вот пример реального кода, который я только что сделал:

$this->rSum = explode(",", $this->options["rSum"]);
$this->rSum = array_combine(array_values($this->rSum), array_fill(0, count($this->rSum), 0));

Если бы кто-нибудь мог передать мне несколько хороших руководств по написанию более чистого кода, это было бы неплохо!

Это я снова задаю глупые вопросы. :)


Кстати ..

Сколько может быть автоматической обработки в моделях?

У меня есть модель, у которой есть метод execute, и когда я его вызываю, она делает много вещей, таких как чтение файла определения и выполнение запросов базы данных.

Например

$object = new Object()
$object->setFile("example.txt");
$object->execute();

// Then i can fetch things from it
echo $object->getName();

Ответы [ 6 ]

8 голосов
/ 05 мая 2010

Смарт-код не обязательно является хорошим кодом на мой взгляд. Я лично предпочел бы чистый, простой и понятный код. Ваш 2 лайнер заставит вашего коллегу думать серьезно, в отличие от вашего "плохого" кода init.

Это все равно мой дубль

7 голосов
/ 05 мая 2010
  1. Стандарт кодирования Zend Framework
  2. Стандарт кодирования PEAR

Самое важное, быть последовательным .

3 голосов
/ 05 мая 2010

Мне действительно нравится ваш (настоящий) код, и мне, как правило, довольно тяжело нравиться код других людей (у меня не было много времени, чтобы копаться в ZF, но, например, PEAR [у них также есть свои стандарты кодирования], просто ужасно IMO), первый пример, который вы привели, кажется глупым, но что касается второго, это действительно легко понять, по крайней мере для меня, и из короткого фрагмента, который вы предоставили, вы, кажется, имеете последовательный стиль кодирования и используете пробелы в нужном количестве и в нужных местах - это очень важно для чистого кода (если вы мне не верите, просто взгляните на некоторые фрагменты Perl).

Я бы хотел отметить только три вещи:

  1. Семантика: Хотя rSum не является ужасным именем для свойства, не совсем ясно, какие значения оно содержит, возможно, вы могли бы найти более описательное имя для этого свойства?
  2. Повторное использование переменных: Как я уже говорил, ваш первый пример кажется глупым, но на самом деле разумно использовать переменные по двум основным причинам:
    1. Вы не тратите память.
    2. И вы не загрязняете сферу, с которой работаете.
  3. Ваш второй «реальный» пример может быть чище и быстрее, если вы используете правильные функции:

    $ this-> rSum = array_flip (explode (",", $ this-> options ["rSum"]));

EDIT : я только что заметил, что приведенный выше код не совсем то, что вы делаете (0 не был обработан моим мозгом), вот еще одна рабочая альтернатива:

$this->rSum = array_fill_keys(explode(",", $this->options["rSum"]), 0);

Кажется, здесь много людей, которым не нравятся однострочники. Я, однако, считаю, что приведенный выше код ясен, эффективен и описателен - но это может быть только я ... =)

3 голосов
/ 05 мая 2010

В дополнение к стандартам кодирования вы можете использовать PHP_CodeSniffer для получения общих советов по существующему коду.

0 голосов
/ 05 мая 2010

Одна вещь, к которой может привести попытка сделать что-либо в одной строке, - это допущения кода. Что я считаю действительно раздражающим, когда мне приходится их чинить. Это чаще встречается в цепочке объектов. Например

$object->getAnotherObject()->getAThirdObject()->doSomething();

Многие люди скажут вам, что их легче читать; однако он полагается на то, что каждый возврат всегда является объектом. Я предпочитаю возвращать каждого и проверять ответ.

$secondObject = $object->getAnotherObject();
if ( is_object($secondObject) ) {
    $thirdObject = $secondObject->getAThirdObject();
    if ( is_object($thirdObject) ) {
        $thirdObject->doSomething();
    }
} 

Конечно, требуется больше нажатий клавиш, но вероятность того, что он взорвется, будет меньше, и, как мне кажется, легче читать.

Хотя стоит повторить то, что написал Борис Гери. быть последовательным.

0 голосов
/ 05 мая 2010

Согласившись с Джимом Ли, я также предпочитаю читаемый код, а не микрооптимизацию или умный, но уродливый однострочный код.

Единственная проблема, с которой я столкнулся в вашем первом примере, состоит в том, что он использует процедурно-ориентированные функции, я бы лучше переписал ООП (вызовы функций, подобные этой, можно было бы связать и было бы легко читать).

У PHP нет сильной ООП-цели, поскольку он использует в своем API в основном процедурные операторы. Но я предпочитаю писать свой код ОО-способом, хорошо отделенным и организованным, а не иметь множество функций с множеством аргументов, чтобы заставить их работать вместе.

...