| Оптимізація скрипта - "правильний PHP" |
|
Напевно кожен php-програміст коли вчився простому і правильному написанню коду в когось, або важко і нудно пізнавав на власному досвіді, постійно переробляючи одне і теж. Дана стаття покликана допомогти початківцям PHP-програмістам грамотно і ефективно використовувати ресурси веб-сервера-сервера і краще організувати логіку роботи свого скрипта. 0. При вставці кусків php-коду в HTML сторінки завжди використовуйте повні відкриваючі і закриваючі теги! Це забезпечить Вас від варіацій налаштування php.ini short_open_tag на різних серверах. 1. Використовуйте функцію виведення echo замість printf і sprintf там де можливо. Немає потреби використовувати ці функції, оскільки вони виконуються повільніше тому, що створені для інтерпретації і виводів рядка з її обробкою, підстановкою значень, у форматованому вигляді. Про що і говорить буква f в кінці назви цих двох функцій. Погано:
sprintf('мама'); printf('тато'); Добре: echo 'мама'; echo "тато"; 2. По тих же причинах використовуйте одинарні лапки там де це можливо і користуйтеся оператором "." для склеювання рядків, замість прямої підстановки змінних в рядок, взятих в лапки. Кращий варіант (самий швидкий): echo 'Вага рівна: '.$weight; Гірший варіант (повільний): echo "Вага рівна: $weight"; 3. Якщо Вам потрібно перевірити чи не рівне повернене значення функції нулю(а функція сама по собі повертає лише позитивні або лише негативні значення), то краще використовувати оператора порівняння. Він виконується швидше, ніж конкретне порівняння значень. Погано: $i = 0; if ($i != 0) { //Не рівне } else { //Рівно } Добре: $i = 0; if ($i > 0) { //Не рівне } else { //Рівно } Потрібно також враховувати, що якщо строка приймає лише пусте значення, або призначені для користувача строкові дані, то замість порівняння рядка з рядком, для виявлення її пустоти, так само можна використовувати порівняння з нулем, яке виконається швидше. 4. Для перевірки рядка на пустоту використовуйте функцію trim($str); Вона не лише перевірить чи заповнений рядок, але також обріже неістотні символи - пропуски (табуляції, white-spaces) і поверне позитивне значення, у випадку якщо в рядку є якісь значимі символи. Погано: if ($str != '') { //обробка строки } Треба: if (trim($str)) { //обробка строки } 5. Для отримання даних з форм методом Get і Post краще використовувати такі самописні функції: GetParam ($array, $value, $default = '') { Функція GetParam($_POST, 'myvar', 'empty') коректно отримає дані з $_POST['myvar'], і у випадку якщо $_POST змінна не існує, поверне значення по замовчуванні, без всяких Waring и Notice. Фунція GetParamSafe($_POST, 'myvar', 'empty') працює так само, тільки повертає екрановану змінну (для захисту від SQL-інєкцій). А дана конструкція дозволяє отримати цілочисельне число з $_POST. intval(GetParam($_POST, 'myvar', 'empty')) У випадку якщо в масиві $_POST лежало не число, функія поверне 0; 6. Для простого порівняння строк не використовуйте preg_match() або preg_match_all(). Використовуйте strstr() і strpos(). 7. При отриманні строк з бази даних (наприклад MySQL) старайтесь використовувати функцію mysql_fetch_object. Наприклад при зміні коду запиту з $query = "SELECT field7, field3 FROM mytable WHERE id = 5" на$query = "SELECT * FROM mytable WHERE id = 5" код виводу строки отриманої з цього запиту $row = mysql_fetch_array(mysql_query($query)); echo $row[0].'-->'.$row[1]; //перестане працювати, в той час, як $row = mysql_fetch_object(mysql_query($query)); echo $row->field7.'-->'.$row->field3; // залишиться робочим
12. При проектуванні/розробці великих систем, віддавайте перевагу ООП з виикористанням шаблонів проектування (MVC, PageController, BodyHandler, Fabric...).
|