Уроки 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

  • Ви, напевно, забудете, як і в якому разі називали цю змінну. Дотримуйтесь одного стилю і Вам не доведеться витрачати час на пошук того, як саме Ви іменували цю саму змінну.
  • Для полегшення читання PHP я рекомендую вказувати приставку типу даних попереду імені змінних (так звана "угорська нотація"). Пов'язано це з тим, що в PHP немає явного визначення типу, і таке найменування допомагає відразу зрозуміти, до якого типу все-таки відноситься змінна:
  • = "user123"; $iUserage = 20; $bUserdeleted = false ; ?>

  • Пишіть скрипт так, начебто завтра Вам доведеться його доопрацьовувати. Намагайтеся продумувати його так, щоб його було легко масштабувати.