PHP и пишущий чистый код

Я пытаюсь найти, что лучшие практики пишут 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));

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

Я снова задавание глупых вопросов.:)


Между прочим..

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

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

Например,

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

// Then i can fetch things from it
echo $object->getName();
5
задан Bill the Lizard 30 August 2011 в 03:26
поделиться

6 ответов

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

Я хотел бы указать только на три вещи:

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

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

РЕДАКТИРОВАТЬ : Я только что заметил, что приведенный выше код не совсем то, что вы делаете ( 0 не был обработан моим мозгом), вот еще одна рабочая альтернатива:

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

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

3
ответ дан 18 December 2019 в 09:05
поделиться

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

В любом случае, это только мое мнение

8
ответ дан 18 December 2019 в 09:05
поделиться

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

3
ответ дан 18 December 2019 в 09:05
поделиться

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

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

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

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

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

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

-3
ответ дан 18 December 2019 в 09:05
поделиться
  1. Zend Framework Coding Standard
  2. PEAR Coding Standard

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

7
ответ дан 18 December 2019 в 09:05
поделиться

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

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

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

0
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: