Я пытаюсь найти, что лучшие практики пишут 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();
Мне очень нравится ваш (настоящий) код, и обычно мне трудно любить код других людей (у меня не было много времени копаться в ZF, но, например, PEAR [у них также есть свои стандарты кодирования] просто ужасно IMO), первый пример, который вы дали, кажется глупым, но что касается второго, его действительно легко понять, по крайней мере, для меня, и из короткого фрагмента, который вы предоставили, вы, кажется, имеете последовательный стиль кодирования и используете пробелы в нужном количестве и в нужных местах - это очень важно для чистого кода (если вы мне не верите, просто взгляните на некоторые фрагменты Perl).
Я хотел бы указать только на три вещи:
rSum
не ужасное имя для свойства, не совсем понятно, какие значения оно содержит, возможно вы могли бы найти более описательное имя для этого свойства? Ваш второй «настоящий» пример мог бы быть чище и быстрее, если бы вы использовали правильные функции:
$ this-> rSum = array_flip (explode (",", $ this-> options ["rSum"])) ;
РЕДАКТИРОВАТЬ : Я только что заметил, что приведенный выше код не совсем то, что вы делаете ( 0
не был обработан моим мозгом), вот еще одна рабочая альтернатива:
$this->rSum = array_fill_keys(explode(",", $this->options["rSum"]), 0);
Кажется, здесь много людей, которым не нравятся однострочные сообщения. Однако я считаю, что приведенный выше код ясен, эффективен и информативен - но это может быть только я ...=)
По моему мнению, умный код - это не обязательно хороший код. Лично я предпочитаю чистый, простой и понятный код. Ваш 2 лайнера заставят вашего коллегу крепко задуматься, в отличие от вашего "плохого" кода.
В любом случае, это только мое мнение
В дополнение к стандартам кодирования вы можете использовать PHP_CodeSniffer , чтобы получить общие подсказки по существующему коду.
Одна вещь, которая может сделать все в одной строке, может приводит к предположениям кода. Я считаю, что это действительно раздражает, когда мне приходится постоянно их исправлять. Это чаще встречается с цепочкой объектов. Например
$object->getAnotherObject()->getAThirdObject()->doSomething();
Многие люди скажут вам, что это легче читать, однако он полагается на при каждом возврате каждый раз является объектом. Я предпочитаю возвращать каждый из них и проверять ответ.
$secondObject = $object->getAnotherObject();
if ( is_object($secondObject) ) {
$thirdObject = $secondObject->getAThirdObject();
if ( is_object($thirdObject) ) {
$thirdObject->doSomething();
}
}
Конечно, потребуется больше нажатий клавиш, но вероятность взрыва будет меньше, и, я думаю, во всяком случае, легче читать.
Хотя стоит повторить то, что написал Борис Гери. быть последовательным.
Согласен с Джимом Ли я также предпочитаю читаемый код микрооптимизации или умному, но уродливому однострочному коду.
Единственная проблема, с которой я столкнулся с вашим первым примером, заключается в том, что он использует процедурно-ориентированные функции, я бы лучше переписал ООП (такие вызовы функций можно было бы связать в цепочку, чтобы их было легко читать).
У PHP нет сильной цели ООП, поскольку он использует в основном процедурные операторы в своем API. Но я предпочитаю писать свой код объектно-ориентированным способом, хорошо разделенным и организованным, чем иметь множество функций с большим количеством аргументов, чтобы заставить их работать вместе.