Статический анализ php-кода на примере phpstan, phan и psalm

Содержание

Для чего нужен PHP

Соби­рать стра­ни­цы из моду­лей. Если помни­те, PHP-код мож­но встра­и­вать в HTML-страницы, а мож­но сохра­нять как отдель­ные фай­лы. В этом слу­чае мы полу­ча­ем мини-модули, каж­дый из кото­рых отве­ча­ет за что-то одно. Напри­мер, в одном мы пишем, как будет выгля­деть шап­ка сай­та, в дру­гом — меню, тре­тий файл будет отве­чать за под­вал, чет­вёр­тый — за блок с отзы­ва­ми о това­рах.


<div>

<? include(«/includes/»); ?>

Тут можно вставить ссылку на модуль карточки товара или заполнить раздел информацией вручную. Но лучше модулем, как выше и ниже.

<? include(«/includes/»); ?>

</div>

PHP возь­мёт файл header.php, в кото­ром мы напи­са­ли, как долж­на выгля­деть шап­ка сай­та, и поста­вит её в нача­ло стра­ни­цы. То же самое сде­ла­ет и с под­ва­лом — фай­лом footer.php, и так будет на каж­дой стра­ни­це това­ра. Полу­ча­ет­ся, что нам не нуж­но писать один и тот же код шап­ки и под­ва­ла на каж­дой стра­ни­це, доста­точ­но сде­лать это в одном месте, а потом под­клю­чать одной строч­кой.

Созда­вать CMS и движ­ки для сай­тов. Такие модуль­ные воз­мож­но­сти PHP при­ве­ли к тому, что боль­шин­ство совре­мен­ных систем управ­ле­ния кон­тен­том на сай­тах напи­са­ны на PHP. Смот­ри­те сами:

Если вы на бес­плат­ном хостин­ге исполь­зу­е­те какой-то инстру­мент для созда­ния или под­держ­ки сай­та, ско­рее все­го, он тоже будет напи­сан на PHP.

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

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

Что такое PHP скрипт

PHP-скрипт — это обычный текстовый файлик с расширением .php. Точно такой же, как html и css.

Но есть одно важное отличие:

Скрипты запускаются только через http-запросы в браузере. Это значит, что для запуска скрипта script.php необходимо в адресной строке браузера написать site.ru/script.php

Если скрипт не работает — проверь текущий URL. Если там будет что-то вроде file:///D:/openserver/domains/site.ru/script.php — это значит, что ты пытаешься не перейти на страницу сайта, а открыть сам PHP файлик в браузере. Это неправильно.

Веб-серверы чаще всего настроены так, что при заходе на главную страницу (например site.ru) автоматически запускается файл index.php или index.html, лежащий в корне сайта.

Создай в корневой папке сайта файл с названием index.php и открой его в своём текстовом редакторе. При наличии файла index.html его нужно удалить.

Если у тебя пока нет текстового редактора — рекомендую лёгкий и бесплатный Notepad++, он гораздо удобней встроенного в Windows блокнота.

Обязательно следи за кодировкой скриптов. Кодировка должна быть либо UTF-8 без BOM (если такая доступна в твоём редакторе), либо просто UTF-8.

Выбор кодировки в Notepad++

Будущее PHP: восьмая версия

Главная задача — сделать PHP быстрым при сохранении гибкости динамического языка. Разработчики понимают, что в дальнейшем нужно приходить к статической типизации. Сейчас рассматривают опциональный вариант, когда ее можно включать в определенных частях скрипта. Это наилучший путь из возможных.

Восьмая версия появится ориентировочно в 2020–2022 годах. На open source-платформах изменения принимаются общим голосованием совета разработчиков. Сейчас идет тестирование нововведений в PHP 8.

В мире PHP ничего не происходит без движения сообщества.

Расмус Лердорф

создатель PHP

Статическую типизацию планировали ввести в седьмой версии, но она не прошла голосование: нашлись изъяны. Ошибки исправили, и теперь мир разработки ждет возможность ее отключения одной командой в коде.

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

Первое свойство: интерпретируемость

Главная характеристика PHP — интерпретируемость. В отличие от Java, которая компилируется, а затем запускается в работу, PHP создается во время обращения к нему. Человек открывает сайт, на сервер посылается запрос, и в это время компилируется код. Каждый скрипт компилируется в реальном времени, а затем выполняется.

Приводим пример кода:

<?php /** * Класс для сохранения файлов, кроме изображений */ class Application {protected $_image = null; // файл, с которым нужно работать   /**  * метод сохраняет файл на диск  *  * string $path — путь к файлу новый  * srting $imagePath — путь старый  * boolean  */ public function saveFile($imagePath, $path){    $result = file_get_contents($imagePath, $path);    $nameDir = explode(‘/’,$path);    $newNameDir= ‘files/’.$nameDir.’/’.$nameDir.’/’.$nameDir;      mkdir($newNameDir, 0777, true);    $resultWrite = file_put_contents($path, $result);  return $resultWrite;  } }

Благодаря этому свойству PHP — очень гибкий язык. Например, Java-программист вводит название класса один раз — теперь оно неизменно. PHP же компилируется в  рантайме RuntimeСреда выполнения компьютерной программы. и можно подставить любое название класса из переменной.

Однако ради гибкости разработчик жертвует скоростью работы сайта. В случае с Java программу создают, а затем запускают. В случае с PHP приходится занимать время пользователя на процесс компиляции кода.

Подключение PHP-скриптов (файлы с расширением *.php) к сайту

Подключение PHP-скриптов осуществляется уже тремя способами:

1

Первый – это та же вставка кода в саму страницу сайта (обратите внимание, что если вы имеете страницу с расширением *.html – вам необходимо сменить расширение на *.php) с помощью тегов:. 2

С помощью файла (в таком случае подключение можно осуществлять и на странице с *.html расширением):

2. С помощью файла (в таком случае подключение можно осуществлять и на странице с *.html расширением):

Но для работы этого способа в файл .htaccess, который находится в корне вашего сайта, в самый верх, необходимо добавить эти строки:

Если такого файла нет на хостинге — создайте его через любой текстовый редактор.

3. Третье – с помощью JS-скрипта. В этом случае вы также можете получить результат выполненного PHP-скрипта на сервере.

Реализация будет следующая:

Где «.result» – это класс, куда будут грузиться данные, а «/main.php», соответственно, адрес до PHP-скрипта.

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

Здесь правила абсолютно те же: полный адрес к файлу, если он находится на внешнем сервере, относительный – если на вашем.

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


Если вы осуществляете подключение скриптов первый раз – попробуйте подключить скрипты из архива, который прикреплен в конце статьи. Если в обоих случаях вы получили сообщение «Hello World!» – значит, вы все сделали правильно.

PHP Exam — Get Your Diploma!

W3Schools’ Online Certification

The perfect solution for professionals who need to balance work, family, and career building.

More than 25 000 certificates already issued!

The HTML Certificate documents your knowledge of HTML.

The CSS Certificate documents your knowledge of advanced CSS.

The JavaScript Certificate documents your knowledge of JavaScript and HTML DOM.

The Python Certificate documents your knowledge of Python.

The jQuery Certificate documents your knowledge of jQuery.

The SQL Certificate documents your knowledge of SQL.

The PHP Certificate documents your knowledge of PHP and MySQL.

The XML Certificate documents your knowledge of XML, XML DOM and XSLT.

The Bootstrap Certificate documents your knowledge of the Bootstrap framework.

Как получить часть строки (подстроку)

Чтобы получить подстроку можно использовать: , или .

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

Однако нужно знать, что скорость их работы в разы ниже: работает с одинаковой скоростью для строки любой длинны. А вот и работают тем медленнее чем длине строка в них указывается… В среднем они в 5-10 раз медленнее, однако альтернатив нет, если нужно обработать кириллицу, придется использовать их…

// синтаксис:
// mb_substr ( $string, $start, $length, $encoding )

$str = "Поиск текстов";

// 3 символа начиная с третьего (отсчет идет от нуля)
$sub_1 = mb_substr( $str, 2, 3 ); // обычно кодировку указывать не обязательно...

// Берем подстроку, начиная с первого символа и до третьего с конца
$sub_2 = mb_substr( $str, 6, -2, 'utf-8' );

// результат
echo $sub_1 .' - '. $sub_2; //> бой - текст

Всевозможные варианты:

// Латиница
$str = 'abcdef';

echo substr( $str, 1);     // bcdef
echo substr( $str, 1, 3);  // bcd
echo substr( $str, 0, 4);  // abcd
echo substr( $str, 0, 8);  // abcdef
echo substr( $str, -1, 1); // f

// Кириллица
$str = 'абвгдеж';

echo mb_substr( $str, 1);     // бвгдеж
echo mb_substr( $str, 1, 3);  // бвг
echo mb_substr( $str, 0, 4);  // абвг
echo mb_substr( $str, 0, 8);  // абвгдеж
echo mb_substr( $str, -1, 1); // ж

// с указанием кодировки, обычно это не обязательно
echo mb_substr( $str, 1, null, 'utf-8'); // бвгдеж
echo mb_substr( $str, 1, 3, 'utf-8');    // бвг
echo mb_substr( $str, 0, 4, 'utf-8');    // абвг
echo mb_substr( $str, 0, 8, 'utf-8');    // абвгдеж
echo mb_substr( $str, -1, 1, 'utf-8');   // ж

// iconv_substr(), обычно для нее нужно указать кодировку
// iconv_* медленнее чем mb_*
echo iconv_substr( $str, 1, 9999999, 'utf-8'); // бвгдеж
echo iconv_substr( $str, 1, 3, 'utf-8');       // бвг
echo iconv_substr( $str, 0, 4, 'utf-8');       // абвг
echo iconv_substr( $str, 0, 8, 'utf-8');       // абвгдеж
echo iconv_substr( $str, -1, 1, 'utf-8');      // ж

День недели и месяц по-русски на PHP

В php, функция , умеет выводить дату и время в огромном количестве форматов, но, к сожалению, вывод по-русски не предусмотрен. Поэтому для вывода дня недели или месяца по-русски, необходимо написать свою функцию.

Месяц по-русски

/**
 * функция для получения названия месяца по-русски.
 * 
 * @param  integer  Номер месяца, необязательный параметр, если параметр не задан,
 *                                      то функция вернет название текущего месяца.
 * @return string Название месяца
 */
function get_rus_month( $num_month = 0 ) {
	// если не задан номер месяца
	if( ! $num_month ) {
		$num_month = date('n'); // номер текущего месяца
	}

	// массив с названиями месяцев
	$monthes = array('', 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');

	return $monthes;
}

// пример использования
echo get_rus_month(1); // Январь
echo get_rus_month();  // Апрель

День недели

## получает день недели по-русски
function get_rus_day(){
	 $days = array('Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота' );

	// номер дня недели: с 0 до 6. 0 - воскресенье, 6 - суббота
	$num_day = date('w');

	return $days;
}

// пример использования
echo get_rus_day(); //> Среда

Есть что добавить? Милости прошу в комментарии…

Функции в PHP

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

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

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

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

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

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

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

PHP — Overriding Inherited Methods

Inherited methods can be overridden by redefining the methods (use the same name) in the child class.

Look at the example below. The __construct() and intro() methods in the child class (Strawberry) will override the __construct() and intro() methods in the parent class (Fruit):

Example

<?phpclass Fruit {  public $name;  public $color;  public function __construct($name, $color) {    $this->name = $name;    $this->color = $color;   }  public function intro() {    echo «The fruit is {$this->name} and the color is {$this->color}.»;   }}class Strawberry extends Fruit {  public $weight;  public function __construct($name, $color, $weight) {    $this->name = $name;    $this->color = $color;    $this->weight = $weight;   }  public function intro() {    echo «The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram.»;   }}$strawberry = new Strawberry(«Strawberry», «red», 50);$strawberry->intro();?>

Установите MAMP/WAMP

MySQL — самый популярный вид базы данных, используемый с PHP (хотя и не единственный). Если нужно настроить локальное окружение для разработки и тестирования ваших PHP-приложений на компьютере, предусмотрите установку MAMP (Mac) или WAMP (Windows). Установка MySQL на ваш собственный компьютер может стать утомительным процессом, а оба этих программных пакета содержат MySQL. Ловко и просто.

12. Установите лимиты своим скриптам

Установка лимита времени на PHP-скрипты – очень ответственная вещь. Бывают моменты, когда скрипты выходят из строя, и когда это произойдет, вам придется использовать свойство set_time_limit (установить лимит времени), чтобы избежать бесконечно повторяющихся циклов и истечения таймаутов времени соединения с базой данных. Set_time_limit устанавливает лимит времени на максимальное количество секунд, за которое выполняется скрипт (по умолчанию 30). По истечении этого времени возбуждается неустранимая ошибка.

PHP — What is Inheritance?


Inheritance in OOP = When a class derives from another class.

The child class will inherit all the public and protected properties and methods from the parent class. In addition, it can have its own properties and methods.

An inherited class is defined by using the keyword.

Let’s look at an example:

Example

<?phpclass Fruit {  public $name;  public $color;  public function __construct($name, $color) {    $this->name = $name;    $this->color = $color;   }  public function intro() {    echo «The fruit is {$this->name} and the color is {$this->color}.»;   }}// Strawberry is inherited from Fruitclass Strawberry extends Fruit {  public function message() {    echo «Am I a fruit or a berry? «;   }}$strawberry = new Strawberry(«Strawberry», «red»);$strawberry->message();$strawberry->intro(); ?>

Example Explained

The Strawberry class is inherited from the Fruit class.

This means that the Strawberry class can use the public $name and $color properties as well as the public __construct() and intro() methods from the Fruit class because of inheritance.

The Strawberry class also has its own method: message().

PHP Case Sensitivity

In PHP, keywords (e.g. , , , , etc.), classes, functions, and user-defined functions are not case-sensitive.

In the example below, all three echo statements below are equal and legal:

Example

<!DOCTYPE html> <html> <body> <?php ECHO «Hello World!<br>»;echo «Hello World!<br>»; EcHo «Hello World!<br>»;?> </body> </html>

Note: However; all variable names are case-sensitive!

Look at the example below; only the first statement will display the value of the variable! This is because , , and are treated as three different variables:

Example

<!DOCTYPE html> <html> <body> <?php$color = «red»; echo «My car is » . $color . «<br>»;echo «My house is » . $COLOR . «<br>»;echo «My boat is » . $coLOR . «<br>»;?> </body> </html>

С чего начать изучение

PHP легко изучить самостоятельно за счет низкого порога входа. Буквально за вечер можно прочитать документацию и написать скрипт, который будет возвращать данные на сайт. Другие языки (C#, Java) имеют более высокий порог вхождения, и одного дня мало, чтобы создать работающий код. Сегодня на российском рынке труда из-за низкого порога входа PHP-кодеров много, и большинство — невысокого уровня.

Хороший разработчик PHP фактически применяет те же паттерны программирования, что и в статически типизированных языках. На PHP даже сложнее программировать, и вот почему. Если в Java или C# допустить алгоритмическую ошибку, например, присвоить переменной не тот тип, — они «дадут по рукам». PHP же это пропустит, и программист сломает голову: что не так? Ведь все работает, но неправильно. Из-за этого на современном рынке хорошим программистам PHP готовы платить чек не ниже, чем другим разработчикам. Но хорошего специалиста сложно найти.

Чтобы учить язык, нужно задать себе вопрос: «Для чего он мне?» Учить ради процесса учебы — бесполезно, ведь без практического применения знания забудутся. Нужно поставить конкретную задачу и искать решение.

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

Курс «PHP-разработчик» Обширная программа для изучения PHP, состоящая из4 курсов. Поможет с нуля овладеть популярным языком программирования, устроиться в IT-компанию вашей мечты или стать независимым разработчиком.

  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы

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

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

Чтобы округлить число в 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

Перейдём к мифам. Их, как и вокруг любой популярной технологии, скопилось немало, но мы остановимся на четырёх самых интересных.

1. PHP — решето

«Программы на PHP небезопасны» — распространённый повод для критики PHP.

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

Кстати, на курсе «Профессиональный PHP, уровень 1» мы сразу объясняем студентам только «лучшие практики» разработки на PHP, в том числе подробно затрагиваем и вопросы безопасности.

Конечно, иногда уязвимости находят и на уровне ядра PHP, но с другими языками происходит то же самое. Исследователи и хакеры ищут, а авторы языка быстро реагируют на такие проблемы, оперативно исправляют ошибки и закрывают уязвимости.

2. PHP медленный

Вопрос производительности любой технологии всегда вызывает бурные дискуссии.

Facebook, Wikipedia и «ВКонтакте» строят на PHP приложения разного масштаба, а скорость их работы может легко оценить любой наш читатель. При этом повышение производительности всегда стоит среди приоритетных задач разработчиков. Например, при переходе с версии 5.6 на 7 производительность PHP выросла от 15 до 20%. В последних, минорных версиях языка, работа над повышением скорости исполнения кода продолжается.

3. Технология X скоро вытеснит PHP

Миф о серебряной пуле особенно любят муссировать в IT-сообществе: технология X скоро вытеснит Y, и тому подобное. Инструментов, с помощью которых можно выполнять те же самые задачи, что и на PHP, много: JavaScript, Ruby, Python, C#, да и мало ли что ещё.

У каждой технологии есть свои фанаты и хейтеры, с любой из них можно писать плохой код или делать шедевры. Вопрос в другом.

PHP популярен уже много лет, и на нём работают продукты многих больших компаний. Это хорошее доказательство того, что язык востребован и будет востребован ещё долгое время. Здесь, конечно, меньше ажиотажа, чем в JavaScript-фреймворках, но PHP находится в зрелой стадии своего развития: эволюция вместо революции. Регулярно выходят новые версии, фреймворки развиваются, и вся экосистема в целом растёт.

А серебряной пули вообще не существует. Мы советуем своим читателям более прагматично относиться к выбору языка разработки: не слепо следовать моде, а здраво оценивать все плюсы и минусы.

4. На PHP пишут плохой код

Плохой код можно написать на любом языке программирования, и PHP здесь не исключение. Странно скрывать, что на нём действительно написано много плохого кода.

Начать программировать на PHP очень просто. Начинающий программист может легко решить многие задачи, но код будет с нюансами и вообще так себе. Помните — качество кода в первую очередь зависит от разработчика, его опыта и навыков. Чем он опытней, тем более качественный код напишет.

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

К счастью всех нас, те времена давно прошли, и появилась культура написания хорошего кода. Теперь у нас есть руководства по стилю, стандарты кодирования, линтеры и другие вещи, которые помогают писать хорошо.

PHP MySQLi Functions

Function Description
affected_rows() Returns the number of affected rows in the previous MySQL operation
autocommit() Turns on or off auto-committing database modifications
begin_transaction() Starts a transaction
change_user() Changes the user of the specified database connection
character_set_name() Returns the default character set for the database connection
close() Closes a previously opened database connection
commit() Commits the current transaction
connect() Opens a new connection to the MySQL server
connect_errno() Returns the error code from the last connection error
connect_error() Returns the error description from the last connection error
data_seek() Adjusts the result pointer to an arbitrary row in the result-set
debug() Performs debugging operations
dump_debug_info() Dumps debugging info into the log
errno() Returns the last error code for the most recent function call
error() Returns the last error description for the most recent function call
error_list() Returns a list of errors for the most recent function call
fetch_all() Fetches all result rows as an associative array, a numeric array, or both
fetch_array() Fetches a result row as an associative, a numeric array, or both
fetch_assoc() Fetches a result row as an associative array
fetch_field() Returns the next field in the result-set, as an object
fetch_field_direct() Returns meta-data for a single field in the result-set, as an object
fetch_fields() Returns an array of objects that represent the fields in a result-set
fetch_lengths() Returns the lengths of the columns of the current row in the result-set
fetch_object() Returns the current row of a result-set, as an object
fetch_row() Fetches one row from a result-set and returns it as an enumerated array
field_count() Returns the number of columns for the most recent query
field_seek() Sets the field cursor to the given field offset
get_charset() Returns a character set object
get_client_info() Returns the MySQL client library version
get_client_stats() Returns statistics about client per-process
get_client_version() Returns the MySQL client library version as an integer
get_connection_stats() Returns statistics about the client connection
get_host_info() Returns the MySQL server hostname and the connection type
get_proto_info() Returns the MySQL protocol version
get_server_info() Returns the MySQL server version
get_server_version() Returns the MySQL server version as an integer
info() Returns information about the last executed query
init() Initializes MySQLi and returns a resource for use with real_connect()
insert_id() Returns the auto-generated id from the last query
kill() Asks the server to kill a MySQL thread
more_results() Checks if there are more results from a multi query
multi_query() Performs one or more queries on the database
next_result() Prepares the next result-set from multi_query()
options() Sets extra connect options and affect behavior for a connection
ping() Pings a server connection, or tries to reconnect if the connection has gone down
poll() Polls connections
prepare() Prepares an SQL statement for execution
query() Performs a query against a database
real_connect() Opens a new connection to the MySQL server
real_escape_string() Escapes special characters in a string for use in an SQL statement
real_query() Executes a single SQL query
reap_async_query() Returns result from an async SQL query
refresh() Refreshes/flushes tables or caches, or resets the replication server information
rollback() Rolls back the current transaction for the database
select_db() Select the default database for database queries
set_charset() Sets the default client character set
set_local_infile_default() Unsets user defined handler for load local infile command
set_local_infile_handler() Set callback function for LOAD DATA LOCAL INFILE command
sqlstate() Returns the SQLSTATE error code for the error
ssl_set() Used to establish secure connections using SSL
stat() Returns the current system status
stmt_init() Initializes a statement and returns an object for use with stmt_prepare()
store_result() Transfers a result-set from the last query
thread_id() Returns the thread ID for the current connection
thread_safe() Returns whether the client library is compiled as thread-safe
use_result() Initiates the retrieval of a result-set from the last query executed
warning_count() Returns the number of warnings from the last query in the connection

Как получить ключи или значения ассоциативного PHP массива

Чтобы получить только ключи или только значения ассоциативного массива можно воспользоваться двумя php функциями: и . Они возвращают простой индексный массив, содержащие все ключи или значения соответственно.

$array = array(
	'key_1' => 'val_1',
	'key_2' => 'val_2',
	'key_3' => 'val_3',
	'key_4' => 'val_4',
	'key_5' => 'val_5'
);

// получение всех ключей массива
$keys = array_keys( $array );
/* Array(
	 => key_1
	 => key_2
	 => key_3
	 => key_4
	 => key_5
)*/

// получение всех значений массива
$values = array_values( $array );
/* Array(
	 => val_1
	 => val_2
	 => val_3
	 => val_4
	 => val_5
)*/

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

Плюсы, минусы и особенности PHP


Начнём с особенностей. У PHP слабая динамическая типизация: это значит, что типы переменных определяются во время выполнения программы, разные типы можно использовать вместе, а неявные преобразования выполняются автоматически.

Такая типизация — это и плюс, и минус. С одной стороны, код проще, гибче, он лучше читается и его легче писать, но, с другой стороны, вероятность ошибок выше, а найдёте вы их уже после запуска программы.

Плюсы

  1. PHP бесплатный, а его код лежит в открытом доступе.
  2. Для PHP создано множество библиотек, баз данных и фреймворков.
  3. PHP совместим почти со всеми современными серверами.
  4. PHP гибкий и даёт много свободы.
  5. PHP хорош для новичков, ему легко научиться.
  6. Простая и элегантная система классов и объектов.
  7. Простой синтаксис. Вот пример кода, выводящего надпись «Hello, World», в PHP:

Как видите, синтаксис очень простой, но обычно PHP вставлен в HTML, и тогда то же самое выглядит вот так:

Несмотря на то что этот код уже значительно длиннее, он всё равно простой и легко читается.

Кэшируйте страницы, управляемые базой данных

Кэширование PHP-страниц, управляемых базой данных – отличная идея для улучшения скорости загрузки и производительности своего скрипта. В действительности не так уж трудно создать и извлечь статические файлы содержимого при помощи нашего доброго друга ob_start(). Вот пример, взятый со Snipe.net:

PHP

// TOP of your script $cachefile = ‘cache/’.basename($_SERVER); $cachetime = 120 * 60; // 2 hours // Serve from the cache if it is younger than $cachetime if (file_exists($cachefile) && (time() — $cachetime < filemtime($cachefile))) { include($cachefile); echo «<!— Cached «.date(‘jS F Y H:i’, filemtime($cachefile)).» —>»; exit; } ob_start(); // start the output buffer // Your normal PHP script and HTML content here // BOTTOM of your script $fp = fopen($cachefile, ‘w’); // open the cache file for writing fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file fclose($fp); // close the file ob_end_flush(); // Send the output to the browser

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

// TOP of your script

$cachefile=’cache/’.basename($_SERVER’SCRIPT_URI’);

$cachetime=120*60;// 2 hours

// Serve from the cache if it is younger than $cachetime

if(file_exists($cachefile)&&(time()-$cachetime<filemtime($cachefile))){

include($cachefile);

echo»<!— Cached «.date(‘jS F Y H:i’,filemtime($cachefile)).» —>»;

exit;

}

ob_start();// start the output buffer

// Your normal PHP script and HTML content here // BOTTOM of your script

$fp=fopen($cachefile,’w’);// open the cache file for writing

fwrite($fp,ob_get_contents());// save the contents of output buffer to the file

fclose($fp);// close the file

ob_end_flush();// Send the output to the browser

Этот кусок кода использует кэшированную версию страницы, если с момента ее генерации прошло менее 2 часов.

Общий обзор языка программирования PHP

Последнее обновление: 20.10.2017

На сегодняшний день PHP является наиболее распространенным языком веб-программирования. Подавляющие большинство сайтов и веб-сервисов в интернете написано с помощью PHP. По некоторым оценкам PHP применяется более чем на 80% сайтов, среди которых такие сервисы, как facebook.com, vk.com, baidu.com и другие. И такая популярность неудивительна. Простота языка позволяет быстро и легко создавать сайты и порталы различной сложности.

PHP был создан в 1994 году датским программистом Расмусом Лердорфом и изначально представлял собой набор скриптов на другом языке Perl. Позже этот набор скриптов был переписан в интерпретатор на языке Си. И с самого возникновения PHP (сокращение от PHP: Hypertext Preprocessor — PHP: Препроцессор гипертекста) представлял удобный набор инструментов для упрощенного создания веб-сайтов и веб-приложений.

Какие преимущества предоставляет PHP?

  • Для всех наиболее распространенных операционных системам (Windows, MacOS, Linux) есть свои версии пакетов разработки на PHP, а это значит, что вы можете создавать веб-сайты на любой из этих операционных систем.

  • PHP может работать в связке с различными веб-серверами: Apache, Nginx, IIS

  • Простота и легкость освоения. Как правило, уже имея небольшой опыт в программировании на PHP, можно создавать простенькие веб-сайты

  • PHP похож на язык Си, поэтому, зная Си или один из языков с сиподобным синтаксисом, будет проще овладеть PHP

  • PHP поддерживает работу с множеством систем баз данных (MySQL, MSSQL, Oracle, Postgre, MongoDB и другие)

  • Распространенность хостинговых услуг и их дешевизна. Так как, как правило, хостинговые компании размещают веб-сайты на PHP на веб-серверах Apache или Nginx, которые работают на одной из операционных систем семейства Linux. И веб-серверы, и операционные системы на базе Linux бесплатны, что снижает общую стоимость использования хостинга

  • Постоянное развитие. PHP продолжает развиваться, выходят все новые версии, которые несут новые функции, адаптируя язык программирования к новым вызовам. И, как правило, перейти на новую версию не составляет труда.

    К настоящему моменту (октябрь 2017) текущей стабильной версией PHP является PHP 7.1.

А теперь создадим первый маленький сайт на PHP. Но перед его созданием нам надо загрузить и установить все необходимые инструменты для разработки сайтов.

Вперед

Удаление символов на концах строки

Чтобы прочистить концы строки от пробелов, табов и переносов есть функция . Но не все знают что этой функции можно передать второй параметр, чтобы удалить с концов строки указанный символ.

Также, не все знают что есть аналогичные функции:

  • — удаляет только справа строки
  • — удаляет только слева строки
Удаление пустых символов на концах строки
$str = '     Короткая строка.  ';

// Удалим все пустые символы: таб, пробел, перенос
echo trim( $str ); // 'Короткая строка.'

// Удалим все пустые символы справа
echo rtrim( $str ); // '   Короткая строка.'

// Удалим слева
echo ltrim( $str ); // 'Короткая строка.  '
Удаление указанных символов в начале и конце строки
$str = '1122Короткая строка.2211';

// Удалим один символ
echo trim( $str, '1' ); // '22Короткая строка.22'

// Удалим несколько символов
echo trim( $str, '12' ); // 'Короткая строка.'
echo trim( $str, '21' ); // 'Короткая строка.'

// тоже самое только на концах строки

// Удалим справа
echo rtrim( $str, '1' ); // '1122Короткая строка.22'
echo rtrim( $str, '21' ); // '1122Короткая строка.'

// Удалим слева
echo ltrim( $str, '1' ); // '22Короткая строка.2211'
echo ltrim( $str, '21' ); // 'Короткая строка.2211'

PHP — Static Methods

Static methods can be called directly — without creating an instance of a class.

Static methods are declared with the keyword:

<?php class ClassName {  public static function staticMethod() {    echo «Hello World!»;  }}?>

To access a static method use the class name, double colon (::), and the method name:

ClassName::staticMethod();

Let’s look at an example:

Example

<?phpclass greeting {  public static function welcome() {    echo «Hello World!»;  }}// Call static method greeting::welcome();?>

Example Explained

Here, we declare a static method: welcome(). Then, we call the static method by using the class name, double colon (::), and the method name (without creating a class first).

PHP $_GET

PHP $_GET is a PHP super global variable which is used to collect form data after submitting an HTML form with method=»get».

$_GET can also collect data sent in the URL.

Assume we have an HTML page that contains a hyperlink with parameters:

<html> <body> <a href=»test_get.php?subject=PHP&web=W3schools.com»>Test $GET</a> </body> </html>

When a user clicks on the link «Test $GET», the parameters «subject» and «web» are sent to «test_get.php», and you can then access their values in «test_get.php» with $_GET.

The example below shows the code in «test_get.php»:

Example

<html> <body> <?php echo «Study » . $_GET . » at » . $_GET;?> </body> </html>

Tip: You will learn more about $_GET in the PHP Forms chapter.


С этим читают