Php code style conventions

Содержание:

Фильтрация(валидация) данных

  • Фильтрация данных средствами PHP

  • Фильтры валидации данных

  • PHP class DFunction и подборка функций — класс для проверки пользовательских данных
  • PHP. Проверка на число в GET и POST запросах.

Маленькие советы

  • Hачинающий: echo "$var";
    Пpофи: echo $var;
  • Начинающий: print("Test");
    Пpофи: print "Test";
  • Краткая запись <?= для строки <?php echo. Спорный совет — требует включения , не знаешь как писать всегда выбирай вариант с полными тегами т.е. первый вариант.

    1 способ: <?php echo '<a href=\"http://www.php.net\">PHP</a>'; ?>
    2 способ: <?= '<br><a href="http://www.php.net">PHP1</a>' ?>

    Начиная с версии PHP 5.4.0 запись <?= стала доступна всегда.

  • Hачинающий: $a=1; $a=2; $a=3;
    Пpофи: $a = array(1,2,3);
  • Hачинающий: if($a>1) { $b=2; } else { $b=3; }
    Пpофи: $b = ($a>1) ? 2:3;
  • При написании собственных функций желательно чтобы они возвращали результат, даже если сама функция просто форматирует страницу. Это позволяет легко проверить выполнилась функция или нет, что позволяет проще обнаруживать этапы на которых возникли ошибки.
  • Конкатенация строк — два способа:

    Hачинающий: $a = $a. $b;
    Пpофи: $a .= $b; // этот способ намного быстрее - использовать его

PHP eval

Языковая конструкция eval исполняет код PHP, содержащейся в переданной в нее строке. Исполняемый код из строки будет выполняться в области видимости кода, вызвавшего eval(). Таким образом, любык переменные, определенные или измененные кодом, выполненным eval(), будут доступны после его выполнения в теле программы.

При помощи eval запускаем сжатый и закодированный PHP кодeval.php

<?php  
$code = ‘echo «My\tname\nis\tDROP»;’;
 
$code = gzdeflate($code,9);
echo «gzde: $code\n»;
$code = base64_encode($code);
echo «base64: $code\n»;
 
// сжато и закодировано
eval(gzinflate(base64_decode($code)));
echo «\n\n»;
 
$code = base64_decode($code);
echo «text: $code\n»;
$code = gzinflate($code);
echo «gziin: $code\n»;
 
eval ($code);
echo «\n\n»;
 
eval(gzinflate(base64_decode(‘S03OyFdQ8q2MKclLzE2NycssjilxCfIPULIGAA==’)));
echo «\n\n»;
?>

История языка

Изна­чаль­но PHP рас­шиф­ро­вы­вал­ся как Personal Home Page Tools — инстру­мен­ты для созда­ния пер­со­наль­ных стра­ниц. Дело в том, что рань­ше, что­бы сде­лать функ­ци­о­наль­ный сайт, чаще все­го исполь­зо­ва­ли C, Perl и CGI-скрипты. Зву­чит слож­но, на деле — тоже слож­но. Един­ствен­ным спо­со­бом сде­лать что-то своё и не изу­чать при этом три тома по про­грам­ми­ро­ва­нию был PHP.

Язык HTML недо­ста­точ­но гиб­кий и уме­ет не так мно­го, как хоте­лось бы. Раз­ра­бот­чи­ки PHP реши­ли рас­ши­рить воз­мож­но­сти гипер­тек­ста и сде­ла­ли такой язык, кото­рый мож­но встра­и­вать пря­мо в HTML-код, что­бы они рабо­та­ли вме­сте. Для это­го исполь­зу­ют опе­ра­то­ры или или .

Напри­мер, мож­но сде­лать так:

<?PHP $text_part = «этот код написан на PHP?»; //Задаём строковую переменную и сразу наполняем её текстом ?> <div> <p> Привет! А вы знаете, что <?PHP echo $text_part; ?> </p> </div>

В резуль­та­те на стра­ни­це полу­чит­ся строч­ка: «При­вет! А вы зна­е­те, что этот код напи­сан на PHP?»

Ещё мож­но созда­вать целые PHP-файлы и писать весь код там, а потом про­сто под­клю­чать эти фай­лы в нуж­ный момент. Полу­ча­ет­ся, что с PHP мож­но рабо­тать в двух режи­мах: писать код пря­мо в коде стра­ни­цы или выно­сить всё в отдель­ные фай­лы.

Пример работы PHP в теме WordPress

Давайте немного углубим понимание с помощью небольшого примера, соединяющего в себе серверную природу PHP и ваш сайт WordPress. Если вернетесь к той картинке с темой «Twenty Seventeen»:Вы увидите, что “sidebar.php”, “header.php”, “comments.php” и т.д. представлены в отдельных PHP файлах.

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

Например:

  • sidebar.php определяет как выглядит и функционирует область боковой панели
  • header.php определяет как выглядит и функционирует заголовочная часть
  • comments.php определяет как выглядит и функционирует раздел комментариев и т. д.

Каждый раз, когда кто-то посещает ваш сайт, веб-сервер собирает все эти отдельные PHP файлы, предназначенные для различных областей вашей темы, объединяет их, как этого требует тема и передает готовый HTML код браузеру вашего посетителя.

Резюмируем

PHP — популярный язык для backend-разработки, у него простой синтаксис и его легко учить. Так что если веб-разработка вас привлекает, то это замечательный вариант: работая с PHP, вы научитесь ещё и HTML, CSS и попробуете себя в объектно-ориентированном программировании. А если не хотите ограничиваться веб-разработкой, то присмотритесь к JavaScript или Python.

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

Какая версия PHP лучше 5.6 или 7.0

Согласно данным W3Techs, PHP используется в более, чем 78% веб-сайтов, использующих серверные языки программирования. Второе место занимает ASP.NET с рыночной долей слегка превышающей 11%.

Как и у других языков программирования у PHP есть разные версии доступные для использования. PHP 5 является более ранней версие, дни которой подходят к концу. PHP 5.6 – самая последняя версия в пятёрке, больше не получающая активной поддержки, и которая прекратит получать поддержку безопасности начиная с 2019.

PHP 7 – это самая новая версия. Она предлагает значительные улучшения в плане производительности и безопасности. В настоящее время многие хостинг провайдеры поддерживают:

  • PHP 5.6
  • PHP 7
  • PHP 7.1
  • PHP 7.2
  • PHP 7.3

Вы даже можете менять версию PHP одним кликом.

И несмотря на наличие предложения PHP 5.6, я настоятельно рекомендую пользоваться, по крайней мере PHP 7.

PHP 5.6 может понадобиться в некоторых случаях, когда сторонний WordPress плагин отстает в поддержке более новых версий PHP. Такое случается не часто, но все же случается. Если у вас есть плагин WordPress, который не поддерживает, по крайней мере PHP7, советую связаться с разработчиком и попросить у него обновление.

Смягчение требований к синтаксису Heredoc и Nowdoc

и требовали ставить закрывающий идентификатор первым в новой строке.

Пример:

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

RFC для PHP 7.3 предлагает убрать подобные требования для улучшения читабельности кода. Прежде всего чтобы добавить отступы при использовании идентификаторов.

Полный список изменений в синтаксисе:

  1. Закрывающий идентификатор необязательно должен быть первым символом в строке.
  2. Закрывающий идентификатор имеет отступ пробелами или табами.
  3. Отступ (пробелы или табы) не должен быть смешанным. Если вы это сделаете, то получите .
  4. Точное количество пробелов/табов, используемых перед закрывающим идентефикатором будут удалены из каждой строки выражения.
  5. Если число отступающих символов, используемых перед закрывающим идентефикатором, больше чем в любой из строк выражения, вы получите
  6. несколько выражений после закрывающего идентификатора будут работать без ошибок

Вот сниппет, который использует новые возможности без нарушения новых правил:

На выводе будет:

Обратите внимание, что отступы используемые в декларации при помощи не отображаются в выводе , и мы продолжили перечисление элементов массива после идентификатора. RFC, обсуждение на Externals.io, реализация

RFC, обсуждение на Externals.io, реализация

Влияние на обратную совместимость

Пока вы не используете набор идентичных идентификаторам символов в качестве начала строки, вы на коне.

Если у вас имеется синтаксис подобный вышеописанному, отмечу, что с PHP 7.3, PHP воспримет первый литерал и выдаст ошибку на следующей строке. В более ранних версиях не воспринимался как закрывающий идентификатор для heredoc. Спасибо /u/ImSuperObjective2 с reddit за указание на это

Округление дробных чисел

Округление до целых

Чтобы округлить число в php существует несколько функций:

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

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

  • — независимо от дробной части, округляет в меньшую сторону.
// round
echo round( 5.2 ); //> 5
echo round( 5.5 ); //> 6
echo round( 5.6 ); //> 6

// ceil
echo ceil( 5.1 );  //> 6

// floor
echo floor( 5.9 ); //> 5

Округление до дробных

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

echo $round = round( 5.555, 1 ); //> 5.6

echo $round = round( 5.555, 2 ); //> 5.56

Округление последнего числа происходит как в математики: если следующее больше или равно 5 то в большую сторону, в остальных случаях в меньшую…

Функции в PHP

Функция — это команда, которая выполняет какие-либо действия, например расчёты, управление файлами и т.д.

Определить функцию просто — у неё после названия идут круглые скобки:

Функция phpinfo() выводит на экран информацию с текущими настройками PHP.

Результат работы функции phpinfo

Некоторые функции ожидают, что им передадут какое-нибудь значение. Например, функция округления ceil() ожидает число, которое она округлит:

Функция ceil() получает переданное нами значение 91.5, обрабатывает его (округляет до 92) и возвращает результат. А команда echo получает возвращённое функцией значение и выводит его на экран. Результатом работы этого скрипта будет 92.

Функции будут подробно рассмотрены в отдельном уроке.

Вариант 2 — Проверка информации о PHP с помощью создания файла phpinfo.php

Не волнуйтесь, если ваша хостинговая платформа не поддерживает функцию показанную в Варианте 1. Того же результата можно достичь создав специальный файл внутри вашего хостинг аккаунта. Файл также покажет всю информацию о вашем PHP и будет доступен через браузер.

Шаг 2.1 — Создание файла phpinfo

Существует несколько путей для создания файла phpinfo. В этом руководстве мы будем использовать для этого Файловый менеджер. Однако тот же результат может быть достигнут созданием файла на вашем локальном компьютере и дальнейшей загрузке файла на сервер через FTP-клиент.

Войдите в панель управления вашего хостинга и откройте Файловый менеджер. Нажмите кнопку Новый файл для создания нового файла.

В первом поле укажите путь где будет создан новый файл. Далее, в поле Новое имя файла введите phpinfo.php. В большинстве случаев вы можете оставить путь без изменений /public_html. В этом случае файл будет создан в корневом каталоге вашего сайта.

Шаг 2.2 — Редактирование файла

На этом этапе у вас уже имеется пустой файл phpinfo.php в каталоге public_html. Скопируйте следующий код в файл и нажмите иконку Сохранить в левом углу экрана.

<?php
 phpinfo();
 ?>

Вот и все, вы успешно создали PHP файл, который отобразит все параметры вашего PHP.  Как уже упоминалось ранее, тот же результат может быть достигнут с помощью FTP-клиента:

  1. Используйте любой текстовый редактор и создайте файл phpinfo.php на вашем компьютере.
  2. Добавьте следующий код в файл:
<?php
phpinfo();
?>
  1. Загрузите файл используя FTP в ваш каталог public_html.

Шаг 2.3 — Проверка информации о PHP через браузер

Если все было сделано правильно, то теперь вы можете получить доступ к созданному файлу, добавив в конец вашего доменного имени /phpinfo.php. К примеру, http://вашдомен.ru/phpinfo.php

Вы должны увидеть похожий результат при открытии этой страницы через браузер:

На этой странице вы сможете увидеть все настройки вашего PHP.

Суперглобальные переменные

Переменная $GLOBALS. Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.

Опция (register_globals=On) в Конфигурация php.ini указывает на необходимость регистрации переменных, полученных методом POST или GET в глобальный массив $GLOBALS.

<?php
$conf = 'this is foo';
$conf = 'this is bar';
global $conf; // добавляем переменную в глобальный массив видимости скрипта
$output = print_r($GLOBALS, true);
echo "$output\n";
?>

Для объявления глобальной переменной ее достаточно поместить в массив $GLOBALS

$GLOBALS='testvalue2';

Вывести на экран все значения переменных массива $GLOBALS можно при помощи print_r($GLOBALS); или так:

foreach ($GLOBALS as $key=>$value)
   echo 'GLOBALS == '.$value.'<br>'; 

Переменная $_SERVER.

  • Переменная $_SERVER является массивом, содержание которого создается Веб- сервером. В нем должны присутствовать сведения (в зависимости от реализации сервера их может и не быть) описанные в спецификации RFC 3875, такие как
  • $_SERVER IP- адрес, с которого пользователь просматривает текущую страницу
  • $_SERVER содержимое заголовка Accept-Language определение локали в браузере

  • $_SERVER содержимое заголовка User-Agent
  • $_SERVER если не пустая, значит используется proxy. Значение — адрес (или несколько адресов) proxy сервера.
  • $_SERVER если не пустая, значит используется proxy, без анонимизатора (т.е. ваш реальный IP не скрывается). Значение — реальный ip адрес клиента.
  • $_SERVER какой метод был использован для запроса страницы ‘GET’, ‘HEAD’, ‘POST’, ‘PUT’ и тд., например проверим пришел ли запрос на нашу страницу методом POST

    if ($_SERVER=='POST') {
        include_once 'your.inc.php';
    }
  • $_SERVER — Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.

Переменная $_GET.

Переменная $_POST.

  • Вывести все переменные переданные методом POST

    <?php
    echo '<br>';
    var_dump($_POST);
    echo '<br>';
    print_r($_POST);
    echo '<br>';
    ?>
  • Если массив POST пуст прервать выполнение скрипта

    if (empty($_POST)) {exit();}

Переменная $_FILES — переменные файлов, загруженных по протоколу Методы и структура протокола HTTP методом POST. Пример PHP — загрузка файла на сервер.

Переменная $_REQUEST — ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE. Переменные в массиве $_REQUEST передаются в скрипт посредством методов GET, POST или COOKIE, поэтому им нельзя доверять, т.к. они могли быть изменены удаленным пользователем. Их наличие и порядок добавления данных в соответствующие массивы определяется директивой (по умолчанию установлено GPCS).

Переменная $_SESSION

Переменная $_ENV. Заполняется если скрипт был запущен из командной строки. Массив $_SERVER будет содержать все переменные из массива $_ENV.

Переменная $_COOKIE: Cookie.

Переменная $http_response_header

HipHop и прорыв в скорости

Facebook написан на PHP — проблему нужно было решать. Их программисты создали для пятой версии собственный интерпретатор языка. Они компилировали его изначально в промежуточные коды, а затем отправляли в обычный интерпретатор Zend Engine. Программисты Facebook ввели статическую типизацию и ускорили работу языка в два раза. Это стало настоящим прорывом. Транслятор назвали HHVM, или HPHP Compiler — «HipHop для языка PHP».

Но команда разработки PHP плотно занялась массивами. Итогом стала седьмая версия, которая работала быстрее HHVM. При этом статической типизации в PHP7 по-прежнему почти нет. Только в параметрах функции — но это так мало, что можно считать, будто нет.

С версии 7.0 до 7.3, которая сейчас в бета-тестировании, язык ускорялся — разница видна по замерам:

Результаты бенчмарков версий PHP на Bolt CMS 3.4.8

 7.3 станет последним релизом: поддерживать и править ошибки будут, но ничего принципиально нового не появится.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *