Уроки PHP (за матеріалами форуму)
Гарний скрипт або стилі програмування.
Цей розділ теж тут написаний не просто так. Скрипт має бути гарним. І потрібне це, як не дивно, не для краси. Справа в тому, що дуже мало програм пишуться раз і на завжди, і щоб одразу працювала як треба. Скрипт, написаний красиво, вам самим набагато простіше налагоджувати, модифікувати. Крім того, з різних причин працювати з вашим творінням може бути доведеться іншій людині. У красивому правильно написаному коді розібратися набагато простіше. Давайте розбиратися, як має виглядати гарний код. Спочатку глянемо на коди з недоліками, потім їх розберемо.
№4 for ($i = 0; $i 5; $i++) if ($i%2) echo $i; echo ''; > ?>
Усі наведені скрипти написані синтаксично правильно, це робочі скрипти.
Ось розглянемо код №1. Тут все написано рядок. Ну швиденько: у яких випадках код виводить велику букву О? Чи не зручно шукати, так? А якби код був на багато аркушів?
У чому недоліки коду №2 пояснювати навіть не треба. Спробуйте відповісти на те саме питання, що й у попередньому випадку.
Недоліком коду №3 і те, що й ви побіжним поглядом пробежитесь у ньому, може створитися оманливе враження, ніби спочатку йде операція складання, тобто. подібне розставлення прогалин теж ускладнює сприйняття.
У коді №4 через табуляцію здається, що тег '' виводиться лише за виконання умови, проте якщо глянути на фігурні дужки, ми побачимо, що це негаразд.
Особливо вперті особи з приводу двох останніх прикладів скажуть, мовляв, нічого подібного, все добре видно: що і як. Даремно так. У великих кодах подібне ставлення до структурованості коду може вилізти боком через найнесподіваніші місця. Та й у маленьких теж.
Основні правила.
Отже, що видно з першого та другого прикладу, думаю розповідати не треба.
Третій приклад говорить нам про те, що розміщення прогалин має бути постійним. Не повинно бути такого, що тут 2 пробіли, тут 4, тут взагалі жодного. Ще тут варто сказати, що у довгих виразах
$b = $a + $c +$z + $f * $r + $e * $f + $a + $o
Операцію множення, все ж таки варто взяти в дужки, хоч вона і першою все одно виконується. Це спростить читання коду. І ще про пробіли:Завжди відокремлюйте з двох сторін пробілами коми та інші оператори.
З 4-го прикладу бачимо роль відступів. Відступи мають показувати нам вкладеність структур програми. Це означає, що всі оператори, вкладені, наприклад, у цикл, повинні починатися на якусь однакову відстань від лівого краю далі, ніж сам оператор циклу. Те саме і з умовами. Оператори одного рівня вкладеності повинні знаходитись на одній відстані від лівого краю.
Розстановка фігурних дужок.
Існує безліч стилів:
Я користуюсь першим способом у блоках if, for і т. д. та другим при описі функцій. Перший спосіб мені подобається тим, що дужка, що закриває, знаходиться на одній вертикалі з тим, що вона відкриває (в даному випадку з оператором if), а перша дужка не створює зайвого (мені так здається, що зайвого) відступу після if. Для функцій я використовую другий спосіб, тому що. та навіть не знаю чому; подобається мені так. Інші способи мені не подобаються через велику кількість табуляції. У будь-якому випадку, фігурна дужка, що закриває, повинна розташовуватися одна на рядку і повинна відразу бути видно, що вона закриває.
Імена змінних, функцій та класів.
Імена повинні говорити програмісту про призначення змінної,функції або ін.. Що ви можете сказати, побачивши всередині коду $a = 'Table' ? Нічого сутнісно. А ось $product = 'Table' нам уже нагадує про що мова. Те саме з функціями: $r = g($a, $b) і $sum = add($serv_1, $serv_2). Видно різниця? Але не потрібно давати функціям (точніше, ні чому не треба) імена типу add_first_service_and_one_more_s ervice_returning_their_summ_as_i nteger_value. Чому – пояснити?
Коментарі.
ibase_connect($host, $user, $passwd); // з'єднуємося з базою даних на Інтербейзі
= 1; // Привласнюємо змінної А одиницю $ b = 6; // Привласнюємо Б значення 6 // Цикл по $i від 1 до 6 for ($i = 1; $i $b; $i++) $a = $a * $i ; // Множимо А на $i ?>
// Знаходимо факторіал числа $ b $ a = 1; $b = 6; for ($i = 1; $i $b; $i++) $a = $a * $i; ?>
function factorial ( $b ) $res = 1 ; for ( $i = 1 ; $i $b ; $i ++ ) $res = $res * $i ; ?>
Про вкладеність.
Тут скажу тільки те, що ситуації на кшталт
function any_func () if ( умова ) // вся функція > > ?>
Їх краще описувати ось так:
function any_func () if ( ! умова ) exit; > // вся функція > ?>
GOTO
= "user123"; $iUserage = 20; $bUserdeleted = false ; ?>