ћерион Ќетворкс

44 минуты чтени€

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

–уководство по изучению PHP с нул€ с примерами

ƒл€ чего используетс€ PHP?

PHP используетс€ примерно на 80% веб-сайтов, чей серверный €зык известен. ќбычно он используетс€ на веб-сайтах дл€ динамического создани€ содержимого веб-страницы.

—ценарии использовани€ включают:

  • —айты и веб-приложени€ (серверные скрипты)
  • —крипты командной строки
  • ƒесктопные (GUI) приложени€

ќбычно он используетс€ дл€ динамического создани€ содержимого веб-страницы. Ќапример, если у вас есть веб-сайт блога, вы можете написать несколько скриптов PHP дл€ извлечени€ сообщений вашего блога из базы данных и их отображени€. ƒругие варианты использовани€ PHP-скриптов:

  • ќбработка и сохранение пользовательского ввода из данных формы
  • Ќастройка и работа с файлами cookie веб-сайта
  • ќграничение доступа к определенным страницам вашего сайта

Facebook, крупнейша€ платформа социальных сетей, написана с использованием PHP.

ѕочему именно PHP?

  • PHP работает на различных платформах (Windows, Linux, Unix, Mac OS X и так далее)
  • PHP совместим практически со всеми используемыми сегодн€ серверами (Apache, IIS и так далее)
  • PHP поддерживает широкий спектр баз данных
  • PHP бесплатный
  • PHP прост в изучении и эффективно работает на стороне сервера

„то такое файл PHP?

  • ‘айлы PHP могут содержать текст, HTML, CSS, JavaScript и код PHP
  •  од PHP выполн€етс€ на сервере, а результат возвращаетс€ в браузер в виде обычного HTML
  • ‘айлы PHP имеют расширение .php

 ак работает PHP?

¬есь PHP-код выполн€етс€ только на веб-сервере, а не на вашем локальном компьютере. Ќапример, если вы заполн€ете форму на веб-сайте и отправл€ете ее или щелкаете ссылку на веб-страницу, написанную на PHP, на вашем компьютере не запускаетс€ реальный код PHP. ¬место этого данные формы или запрос веб-страницы отправл€ютс€ на веб-сервер дл€ обработки скриптами PHP. «атем веб-сервер отправл€ет обработанный HTML-код обратно вам и ваш веб-браузер отображает результаты. ѕо этой причине вы не можете видеть PHP-код веб-сайта, а только результирующий HTML-код, созданный скриптами PHP.

PHP - это интерпретируемый €зык. Ёто означает, что, когда вы вносите изменени€ в исходный код, вы можете немедленно протестировать эти изменени€ без предварительной компил€ции исходного кода в двоичную форму. ѕропуск этапа компил€ции значительно ускор€ет процесс разработки.

 од PHP заключен между тегами <?php и ?> и затем может быть встроен в HTML.


”становка

PHP можно установить с веб-сервером или без него.

GNU/Linux

¬ дистрибутивах GNU/Linux на основе Debian вы можете установить PHP так:

sudo apt install php

Ќа Centos 6 или 7 вы можете установить PHP так:

sudo yum install php

ѕосле установки вы можете запускать любые файлы PHP, просто сделав это в терминале:

php file.php

¬ы также можете установить локальный сервер дл€ запуска веб-сайтов PHP. ƒл€ установки веб-сервера Apache:

sudo apt install apache2 libapache2-mod-php

»ли вы также можете установить PHP, MySQL и веб-сервер, установив XAMPP (бесплатный кроссплатформенный пакет стека решений дл€ веб-серверов с открытым исходным кодом) или аналогичные пакеты, такие как WAMP или Open Server.


PHP-фреймворки

ѕоскольку написание всего кода дл€ веб-сайта нецелесообразно дл€ большинства проектов, большинство разработчиков склонны использовать фреймворки дл€ веб-разработки. ѕреимущество использовани€ фреймворка в том, что:

  • ¬ам не придетс€ изобретать велосипед каждый раз, когда вы создаете проект, многие нюансы уже позаботились о вас.
  • ќбычно они хорошо структурированы, что помогает разделить проблемы.
  • Ѕольшинство фреймворков следуют лучшим практикам €зыка.
  • ћногие из них следуют шаблону MVC (модель-представление-контроллер), так что он отдел€ет уровень представлени€ от логики.

ѕопул€рные фреймворки PHP:


Ѕазовый синтаксис

—крипты PHP могут быть размещены в любом месте документа и всегда начинаютс€ с <?php и заканчиваютс€ ?>.  роме того, операторы PHP заканчиваютс€ точкой с зап€той ;.

¬от простой скрипт, который использует встроенную функцию echo дл€ вывода на страницу текста Hello World!

<!DOCTYPE html>
<html>
<body>

<h1>Merion Networks</h1>

<?php echo "Hello World!"; ?>

</body>
</html> 	

–езультатом этого будет:

Merion Networks

Hello World!

“акже дл€ вывода можно использовать фунцию print.

–азличи€ между ними невелики: echo не имеет возвращаемого значени€, в то врем€ как print имеет возвращаемое значение 1, поэтому его можно использовать в выражени€х. echo может принимать несколько параметров, в то врем€ как print может принимать один аргумент.

 омментарии

PHP поддерживает несколько способов комментировани€:

ќднострочные комментарии

<?php
   // Ёто однострочный комментарий
  
   # ¬ы также можете делать однострочные комментарии, подобные этому
?> 	

ћногострочные комментарии

<? php
/ *
Ётот блок комментариев охватывает
несколько
строк
* /
?>	

„увствительность к регистру

¬се ключевые слова, классы и функции Ќ≈ чувствительны к регистру.

¬ приведенном ниже примере действительны все три оператора echo

<?php
ECHO "Hello!<br>";
echo "Welcome to Developer News<br>";
EcHo "Enjoy all of the ad-free articles<br>";
?>	

ќднако все имена переменных чувствительны к регистру. ¬ приведенном ниже примере действительна только перва€ инструкци€, котора€ отображает значение переменной $name. $NAME и $NaMe рассматриваютс€ как разные переменные:

<?php
$name = "Alex";
echo "Hi! My name is " . $name . "<br>";
echo "Hi! My name is " . $NAME . "<br>";
echo "Hi! My name is " . $NaMe . "<br>";
?>	

ѕеременные

ѕеременные - это основной способ хранени€ информации в программе PHP.

¬се переменные в PHP начинаютс€ с ведущего знака доллара, например $variable_name. „тобы назначить переменную, используйте оператор = с именем переменной слева и выражением, которое нужно оценить справа.

—интаксис:

<? php
// ѕрисваиваем значение "Hello!" к переменной greeting
$greeting = "Hello!";
// ѕрисваиваем значение 8 переменной month
$month = 8;
// ѕрисваиваем значение 2019 переменной year
$year = 2019;
?> 	

ѕравила дл€ переменных PHP

  • ќбъ€вление переменных начинаетс€ с символа $, за которым следует им€ переменной.
  • »мена переменных могут начинатьс€ только с заглавной или строчной буквы или символа подчеркивани€ _.
  • »мена переменных могут содержать только буквы, цифры или символы подчеркивани€ A Ц z, 0Ц9 и _. ƒругие специальные символы, например + - % () . & недействительны.
  • »мена переменных чувствительны к регистру.

Ќекоторые примеры разрешенных имен переменных:

  • $my_variable
  • $anotherVariable
  • $the2ndVariable

ѕредопределенные переменные

¬ PHP есть несколько специальных ключевых слов, которые, хот€ и €вл€ютс€ Ђдопустимымиї именами переменных, не могут использоватьс€ дл€ ваших переменных. ѕричина этого в том, что сам €зык уже определил эти переменные, и они используютс€ дл€ специальных целей. Ќесколько примеров приведены ниже, полный список можно найти на сайте документации PHP.

  • $this
  • $_GET
  • $_POST
  • $_SERVER
  • $_FILES

“ипы данных PHP

ѕеременные могут хранить данные разных типов, например:

  • —трока "Hello"
  • ÷елое число 5
  • „исло с плавающей точкой 1.0
  • Ћогический тип данных 1 or 0
  • ћассив array("I", "am", "an", "array")
  • ќбъект
  • NULL
  • –есурс

—троки

—трока - это последовательность символов. Ёто может быть любой текст в кавычках (одинарный или двойной):

$x = "Hello!";
$y = 'Hello!';

÷елые числа

÷елочисленный тип данных - это недес€тичное число от -2 147 483 648 до 2 147 483 647.

ѕравила дл€ целых чисел:

  • ÷елые числа должны содержать хот€ бы одну цифру.
  • ÷елые числа не должны иметь дес€тичной точки.
  • ÷елые числа могут быть как положительными, так и отрицательными.
$x = 5; 

„исло с плавающей зап€той

„исло с плавающей зап€той - это число с дес€тичной зап€той.

$x = 5.01;

Ћогический тип данных

Ћогическое значение представл€ет два возможных состо€ни€: TRUE (истина) или FALSE (ложь). Ћогические значени€ часто используютс€ в условном тестировании.

$x = true;
$y = false;

ћассивы

ћассив хранит несколько значений в одной переменной.

$colors = array("Red", "Green", "Blue");	

Null

Null - это особый тип данных, который может иметь только значение null. ѕеременные можно объ€вить без значени€ или очистить, установив значение null.  роме того, если переменна€ создаетс€ без присвоени€ значени€, ей автоматически присваиваетс€ значение null.
<?php
$greeting = "Hello!";

// очистите значение, установив дл€ него значение null
$greeting = null;
?>	

 лассы и объекты

 ласс - это структура данных, полезна€ дл€ моделировани€ вещей в реальном мире, и может содержать свойства и методы. ќбъекты представл€ют собой экземпл€ры класса и представл€ют собой удобный способ упаковки значений и функций, специфичных дл€ класса.

<?php
class Car {
    function Car() {
        $this->model = "Tesla";
    }
}

// создание объекта
$Lightning = new Car();

// показать свойства объекта
echo $Lightning->model;
?>	

–есурс PHP

–есурс - это специальна€ переменна€, содержаща€ ссылку на внешний ресурс. –есурсы создаютс€ и используютс€ специальными функци€ми. ¬ы можете использовать функцию getresourcetype(), чтобы увидеть тип ресурса.

<?php
$c = mysql_connect();
echo get_resource_type($c) . "\n";

$fp = fopen("foo", "w");
echo get_resource_type($fp) . "\n";

$doc = new_xmldoc("1.0");
echo get_resource_type($doc->doc) . "\n";

—троки

—трока (string) - это сери€ символов. »х можно использовать дл€ хранени€ любой текстовой информации в вашем приложении.

≈сть несколько различных способов создани€ строк в PHP.


ќдиночные кавычки

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

$name = 'Joe';

„тобы включить в строку одинарную кавычку, используйте обратную косую черту, чтобы экранировать ее.

$last_name = 'O\'Brian';

ƒвойные кавычки

¬ы также можете создавать строки, использу€ двойные кавычки.

$name = "Joe";

„тобы включить в строку двойные кавычки, используйте обратную косую черту, чтобы экранировать их.

$quote = "Mary said, \"I want some toast,\" and then ran away.";

—троки с двойными кавычками также допускают escape-последовательности. Ёто специальные коды, которые помещают в вашу строку символы, которые обычно представл€ют собой невидимые символы. ѕримеры включают символы новой строки \n, табул€ции \t и фактические обратные косые черты \\.

¬ы также можете встраивать переменные PHP в строки с двойными кавычками, чтобы их значени€ добавл€лись в строку.

$name = 'Joe';
$greeting = "Hello $name"; // теперь содержит строку "Hello Joe"	

—троковые функции

Ќайдите длину строки

‘ункци€ strlen() возвращает длину строки.

<?php
echo strlen("Developer News"); // выводит 14
?>	
Ќайдите количество слов в строке

‘ункци€ strwordcount() возвращает количество слов в строке:

<?php
echo str_word_count("Developer News"); // выводит 2
?>	
ѕеревернуть строку

‘ункци€ strrev() переворачивает строку:

<?php
echo strrev("Developer News"); // выводит sweN repoleveD
?>
ѕоиск текста в строке

‘ункци€ strpos() ищет текст в строке и возвращает позицию:

<?php
echo strpos("Developer News", "News"); // выводит 10
?>
«аменить текст внутри строки

‘ункци€ str_replace() замен€ет текст в строке:

<?php
echo str_replace("World", "Developer", "World News"); // выводит Developer News
?>

 онстанты

 онстанты - это тип переменных в PHP. ‘ункци€ define() дл€ установки константы принимает три аргумента - им€ ключа, значение ключа и логическое значение (true или false), которое определ€ет, €вл€етс€ ли им€ ключа нечувствительным к регистру (по умолчанию false). ѕосле установки значение константы изменить нельз€. ќни используетс€ дл€ значений, которые редко мен€ютс€ (например, пароль базы данных или ключ API).

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

<?php
define("freeCodeCamp", "Learn to code and help nonprofits", false);
echo freeCodeCamp;
>?	

 роме того, когда вы создаете классы, вы можете объ€вл€ть свои собственные константы.

class Human {
  const TYPE_MALE = 'm';
  const TYPE_FEMALE = 'f';
  const TYPE_UNKNOWN = 'u';
  
  .............
}
ѕримечание. ≈сли вы хотите использовать эти константы внутри класса Human, вы можете ссылатьс€ на них как на self::CONSTANT_NAME. ≈сли вы хотите использовать их вне класса, вам нужно называть их Human::CONSTANT_NAME.

“раблшутинг

‘ункци€ var_dump() выгружает информацию об одной или нескольких переменных. »нформаци€ содержит тип и значение переменной. ќна очень полезна во врем€ отладки кода.

<?php
$a = 32;
echo var_dump($a) . "<br>";

$b = "Hello world!";
echo var_dump($b) . "<br>";

$c = 32.5;
echo var_dump($c) . "<br>";

$d = array("red", "green", "blue");
echo var_dump($d) . "<br>";

$e = array(32, "Hello world!", 32.5, array("red", "green", "blue"));
echo var_dump($e) . "<br>";

// ƒамп двух переменных
echo var_dump($a, $b) . "<br>";
?>	

¬ывод:

int(32)
string(12) "Hello world!"
float(32.5)
array(3) { [0]=> string(3) "red" [1]=> string(5) "green" [2]=> string(4) "blue" }
array(4) { [0]=> int(32) [1]=> string(12) "Hello world!" [2]=> float(32.5) [3]=> array(3) { [0]=> string(3) "red" [1]=> string(5) "green" [2]=> string(4) "blue" } }
int(32) string(12) "Hello world!" 

ќператоры

PHP содержит все обычные операторы, которые можно ожидать от €зыка программировани€.

ќдиночный знак равенства = используетс€ в качестве оператора присваивани€, а двойной == или тройной === используетс€ дл€ сравнени€.

ќбычные символы < и > также можно использовать дл€ сравнени€, а += можно использовать дл€ добавлени€ значени€ и одновременного его присвоени€.

Ќаиболее примечательным €вл€етс€ использование символа . дл€ объединени€ строк и .= дл€ добавлени€ одной строки в конец другой.

Ќовым в PHP 7.0.X €вл€етс€ оператор spaceship (космический корабль) <=>. ќy возвращает -1, 0 или 1, когда $a меньше, равно или больше $b.

<?php

echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1	

ќператоры If / Else / Elseif

If / Else - это условное выражение, в котором в зависимости от истинности услови€ будут выполн€тьс€ разные действи€.

ѕримечание. —кобки {} необходимы только в том случае, если условие имеет более одного оператора действи€, однако лучше всего включать их в любом случае.

ќператор If

<?php

  if (condition) {
    statement1;
    statement2;
  }	
ѕримечание. ¬ы можете вложить столько операторов в блок if, сколько захотите.

ќператор Else

<?php

  if (condition) {
    statement1;
    statement2;
  } else {
    statement3;
    statement4;
  }	
ѕримечание. ќператор else не €вл€етс€ об€зательным.

ќператор Elseif

<?php

  if (condition1) {
    statement1;
    statement2;
  } elseif (condition2) {
    statement3;
    statement4;
  } else {
    statement5;
  }	
ѕримечание: elseif всегда следует записывать одним словом.

¬ложенный оператор If / Else

<?php

  if (condition1) {
      if (condition2) {
        statement1;
        statement2;
      } else {
        statement3;
        statement4;
      }
  } else {
      if (condition3) {
        statement5;
        statement6;
      } else {
        statement7;
        statement8;
      }
  }	

Ќесколько условий

ќдновременно можно использовать несколько условий с логическими операторами Ђилиї ||, xor и Ђиї &&.

Ќапример:

<?php

  if (condition1 && condition2) {
    echo 'Both conditions are true!';
  } elseif (condition 1 || condition2) {
    echo 'One condition is true!';
  } else (condition1 xor condition2) {
    echo 'One condition is true, and one condition is false!';
  }
ѕримечание. –екомендуетс€ заключать отдельные услови€ в скобки, если у вас их несколько (это может улучшить читаемость).

јльтернативный синтаксис If / Else

“акже существует альтернативный синтаксис дл€ управл€ющих структур.

if (condition1):
    statement1;
  else:
    statement5;
  endif;	

“ернарные операторы

“ернарные операторы в основном представл€ют собой однострочные операторы if / else.

ѕредположим, вам нужно отобразить Ђѕривет (им€ пользовател€)ї, если пользователь вошел в систему, и Ђѕривет, гостьї, если он не вошел в систему.

ќператор If / Else:
if($user == !NULL {
  $message = 'Hello '. $user; 
} else {
  $message = 'Hello guest';
}
“ернарный оператор:

—интаксис:

$a = (условие) ? $b : $c;

Ёто значит, что если условие в скобках будет выполнено (true), то переменной $a будет присвоено значение переменной $b, а если нет, то $c

$message = 'Hello '.($user == !NULL ? $user : 'Guest');

Switch

¬ PHP оператор Switch очень похож на оператор Switch в JavaScript. Ёто позвол€ет проводить быстрое тестирование с множеством различных возможных условий, код также более читабелен.

<?php
	// Switch Statement Example
	switch ($i) {
    	case "free":
    	    echo "i is free";
    	    break;
    	case "code":
    	    echo "i is code";
    	    break;
    	case "camp":
    	    echo "i is camp";
    	    break;
    	default:
    	    echo "i is freecodecamp";
            break;
	}

Break

ќператор break; завершает switch и продолжает выполнение остальной части кода приложени€. ≈сли вы не используете оператор break;, вы можете запустить несколько вариантов и операторов, иногда это может быть желательно, и в этом случае вам не следует включать оператор break;.

ѕример такого поведени€ можно увидеть ниже:

<?php
    $j = 0;

    switch ($i) {
        case '2':
            $j++;
        case '1':
            $j++;
            break;
        default:
            break;
    }

≈сли $i = 1, значение $j будет:

1

≈сли $i = 2, значение $j будет:

2

’от€ в некоторых случа€х break; можно опустить, не вызыва€ проваливани€ внутрь, обычно рекомендуетс€ включать его дл€ удобочитаемости и безопасности:

<?php
    switch ($i) {
        case '1':
            return 1;
        case '2':
            return 2;
        default:
            break;
     }
<?php
    switch ($i) {
        case '1':
            return 1;
            break;
        case '2':
            return 2;
            break;
        default:
            break;
     }

ѕример:

<?php
//инициализировать случайным целым числом в пределах диапазона
$diceNumber = mt_rand(1, 6);

//инициализировать
$numText = "";

//используем switch
  switch($diceNumber) 
  {
  case 1:
    $numText = "One";
    break;
  case 2:
    $numText = "Two";
    break;
  case 3:
  case 4:
    // case 3 и 4 испол€тс€
    $numText = "Three or Four";
    break;
  case 5:
    $numText = "Five";
    echo $numText;
    // break; //без указани€ break или return он продолжит выполнение до следующего case.
  case 6:
    $numText = "Six";
    echo $numText;
    break;
  default:
    $numText = "unknown";
  }
  
  //показать результат
  echo 'Dice show number '.$numText.'.';

?>	

¬ывод:

если case = 1
> Dice show number One.

если case = 2
> Dice show number Two.

если case = 3
> Dice show number Three or Four.

если case = 4
> Dice show number Three or Four.

если case = 5
> FiveSixDice show number Six.

если case = 6
> SixDice show number Six.

если ничего из вышеперечисленного
> Dice show number unknown.	

÷иклы

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

»спользование прерывани€ break внутри цикла может остановить выполнение цикла.


÷икл for

ѕереберите блок кода определенное количество раз.

<?php
for($index = 0; $index < 5; $index ++)
{
    echo "Current loop counter ".$index.".\n";
}
?>

/*
Output:

Current loop counter 0.
Current loop counter 1.
Current loop counter 2.
Current loop counter 3.
Current loop counter 4.
*/	

÷икл while

ѕереберите блок кода, пока условие истинно.

<?php
$index = 10;
while ($index >= 0)
{
    echo "The index is ".$index.".\n";
    $index--;
}
?>

/*
Output:

The index is 10.
The index is 9.
The index is 8.
The index is 7.
The index is 6.
The index is 5.
The index is 4.
The index is 3.
The index is 2.
The index is 1.
The index is 0.
*/	

÷икл Do...While

ѕереберите один раз и продолжите цикл, если условие истинно.

<?php
$index = 3;
do
{
    // выполнить это хот€ бы 1 раз
    echo "Index: ".$index.".\n"; 
    $index --;
}
while ($index > 0);
?>

/*
Output:

Index: 3.
Index: 2.
Index: 1.
*/	

÷икл foreach

ѕереберите блок кода дл€ каждого значени€ в массиве.

÷икл foreach работает только с массивами и используетс€ дл€ перебора каждой пары ключ/значение в массиве.

—интаксис:

foreach ($array as $value) {
  code to be executed;
}

ƒл€ каждой итерации цикла значение текущего элемента массива присваиваетс€ $value, а указатель массива перемещаетс€ на единицу, пока не достигнет последнего элемента массива.

<?php
$fruits = array ("Orange", "Apple", "Banana",  "Cherry", " Mango");
foreach ( $fruits as $value )
{
echo  "$value<br />";
} 
?> 

Output:

Orange
Apple
Banana
Cherry
Mango 

‘ункции

‘ункци€ - это блок операторов, который можно многократно использовать в программе.

ѕроста€ функци€ и ее вызов:

function say_hello() {
  return "Hello!";
}

echo say_hello();	

ѕроста€ функци€ с параметром и ее вызов:

function say_hello($friend) {
  return "Hello " . $friend . "!";
}

echo say_hello('Tommy');

strtoupper - ƒелает все символы ЅќЋ№Ў»ћ»!

function makeItBIG($a_lot_of_names) {
  foreach($a_lot_of_names as $the_simpsons) {
    $BIG[] = strtoupper($the_simpsons);
  }
  return $BIG;
}

$a_lot_of_names = ['Homer', 'Marge', 'Bart', 'Maggy', 'Lisa'];
var_dump(makeItBIG($a_lot_of_names));

ћассивы

ћассивы похожи на обычные переменные, но содержат несколько значений в упор€доченном списке. Ёто может быть полезно, если у вас есть несколько значений, св€занных друг с другом, например список имен учащихс€ или список столиц.


“ипы массивов

¬ PHP есть два типа массивов: индексированные массивы и ассоциативные массивы. ” каждого есть свое применение, и мы рассмотрим, как создавать эти массивы.


»ндексированный массив

»ндексированный массив - это список упор€доченных значений.  аждому из этих значений в массиве присваиваетс€ пор€дковый номер. »ндексы дл€ массивов всегда начинаютс€ с 0 дл€ первого значени€, а затем увеличиваютс€ на единицу оттуда.

<?php
$shopping_list = array("eggs", "milk", "cheese");
?>	

$shopping_list[0] вернет "eggs", $shopping_list[1] вернет "milk", и $shopping_list[2] вернет "cheese".


јссоциативный массив

јссоциативный массив - это список значений, доступ к которым осуществл€етс€ с помощью ключа, а не номеров индексов.  лючом может быть любое значение, но оно должно быть уникальным дл€ массива.

<?php
$student_scores = array("Joe" => 83, "Frank" => "93", "Benji" => "90");
?>	

$student_scores['Joe'] вернет 83, $student_scores['Frank'] вернет 93, $student_scores['Benji'] вернет 90.


ћногомерный массив

ћногомерный массив - это массив, содержащий другие массивы. Ёто позвол€ет создавать сложные структуры данных, которые могут моделировать очень сложную группу данных.

<?php
$students = 
  array(
    array("first_name" => "Joe", "score" => 83, "last_name" => "Smith"),
    array("first_name" => "Frank", "score" => 92, "last_name" => "Barbson"),
    array("first_name" => "Benji", "score" => 90, "last_name" => "Warner")   
  );
?>	

“еперь вы можете получить first_name первого студента с помощью:

$students[0]['first_name']

ѕолучить длину массива

‘ункци€ count() используетс€ дл€ возврата длины (количества элементов) массива:

<?php
$cars = array("Volvo", "BMW", "Toyota");
echo count($cars);
?>	

—ортировка массивов

PHP предлагает несколько функций дл€ сортировки массивов. Ќа этой странице описаны различные функции и приведены примеры.


sort()

‘ункци€ sort() сортирует значени€ массива в возрастающем алфавитном / числовом пор€дке (например, A, B, C, D, E ... 5, 4, 3, 2, 1 ...)

<?php
$freecodecamp = array("free", "code", "camp");
sort($freecodecamp);
print_r($freecodecamp);
?>

¬ывод:

Array
(
    [0] => camp
    [1] => code
    [2] => free
)

rsort()

‘ункции rsort() сортируют значени€ массива в убывающем алфавитном / числовом пор€дке (например, Z, Y, X, W, V ... 5, 4, 3, 2, 1 ...)

<?php
$freecodecamp = array("free", "code", "camp");
rsort($freecodecamp);
print_r($freecodecamp);
?>	

¬ывод:

Array
(
    [0] => free
    [1] => code
    [2] => camp
)	

asort()

‘ункци€ asort() сортирует ассоциативный массив по его значени€м в возрастающем алфавитном / числовом пор€дке (например, A, B, C, D, E ... 5, 4, 3, 2, 1 ...)

<?php
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
asort($freecodecamp);
print_r($freecodecamp);
?>

¬ывод:

Array
(
    [two] => camp
    [one] => code
    [zero] => free
)	

ksort()

‘ункци€ ksort() сортирует ассоциативный массив по его ключам в возрастающем алфавитном / числовом пор€дке (например, A, B, C, D, E ... 5, 4, 3, 2, 1 ...)

<?php
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
ksort($freecodecamp);
print_r($freecodecamp);
?>

¬ывод:

Array
(
    [one] => code
    [two] => camp
    [zero] => free
)

arsort()

‘ункци€ arsort() сортирует ассоциативный массив по его значени€м в убывающем алфавитном / числовом пор€дке (например, Z, Y, X, W, V ... 5, 4, 3, 2, 1 ...)

<?php
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
arsort($freecodecamp);
print_r($freecodecamp);
?>	

¬ывод:

Array
(
    [zero] => free
    [one] => code
    [two] => camp
)

krsort()

‘ункци€ krsort() сортирует ассоциативный массив по его ключам в убывающем алфавитном / числовом пор€дке (например, Z, Y, X, W, V ... 5, 4, 3, 2, 1 ...)

<?php
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
krsort($freecodecamp);
print_r($freecodecamp);
?>

¬ывод:

Array
(
    [zero] => free
    [two] => camp
    [one] => code
)

‘ормы

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

„тобы форма работала на таких €зыках, как PHP, вам понадоб€тс€ некоторые базовые атрибуты в html. ¬ большинстве случаев PHP использует суперглобальные переменные post и get дл€ получени€ данных из формы.

<html>
<body>
  <form method="get" action="target_proccessor.php">
      <input type="search" name="search" /><br />
      <input type="submit" name="submit" value="Search" /><br />
  </form>
<body>
</html>	

јтрибут method здесь сообщает форме способ отправки данных формы. «атем атрибут action сообщает, куда отправл€ть данные формы дл€ обработки. јтрибут name очень важен, и он должен быть уникальным, потому что в PHP значение имени работает как идентификатор этого пол€ ввода.


ѕроверка требуемых вводов

¬ PHP есть несколько функций дл€ проверки выполнени€ необходимых входных данных. Ёто функции isset, empty и is_numeric.

ѕроверка формы, чтобы убедитьс€, что она установлена

isset провер€ет, установлено ли поле и не €вл€етс€ ли оно нулевым. ѕример:

$firstName = $_GET['firstName']

if(isset($firstName)){
  echo "firstName field is set". "<br>";
}
else{
  echo "The field is not set."."<br>";
}	

ќбработка ввода формы

ћожно получить входные данные формы с глобальными переменными $POST и $GET.

¬ приведенном ниже примере отображаетс€ проста€ HTML-форма с двум€ пол€ми ввода и кнопкой отправки:

<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html> 	
 огда пользователь заполн€ет форму выше и нажимает кнопку отправки, данные формы отправл€ютс€ дл€ обработки в файл PHP с именем welcome.php. ƒанные формы отправл€ютс€ методом HTTP POST.

„тобы отобразить отправленные данные, вы можете просто повторить все переменные. Welcome.php выгл€дит так:

<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html> 	

–езультат может быть примерно таким:

Welcome John
Your email address is john.doe@example.com 

“от же результат может быть достигнут с помощью метода HTTP GET.

GET vs POST

» GET, и POST создают массив (например, array (key1 => value1, key2 => value2, key3 => value3, ...)). Ётот массив содержит пары ключ/значение, где ключи - это имена элементов управлени€ формы, а значени€ - входные данные от пользовател€.

» GET, и POST рассматриваютс€ как $ _GET и $ _POST. Ёто суперглобальные объекты, что означает, что они всегда доступны независимо от области видимости - и вы можете получить к ним доступ из любой функции, класса или файла, не дела€ ничего особенного.

$_GET - это массив переменных, переданных текущему скрипту через параметры URL.

$_POST - это массив переменных, переданный текущему скрипту с помощью метода HTTP POST.

 огда использовать GET?

»нформаци€, отправленна€ из формы с помощью метода GET, видна всем (все имена и значени€ переменных отображаютс€ в URL-адресе). GET также имеет ограничени€ на объем отправл€емой информации. ќграничение составл€ет около 2000 символов. ќднако, поскольку переменные отображаютс€ в URL-адресе, можно добавить страницу в закладки. ¬ некоторых случа€х это может быть полезно.

GET может использоватьс€ дл€ отправки не конфиденциальных данных.

ѕримечание: GET Ќ» ќ√ƒј не следует использовать дл€ отправки паролей или другой конфиденциальной информации!
 огда использовать POST?

»нформаци€, отправл€ема€ из формы с помощью метода POST, невидима дл€ других (все имена или значени€ встроены в тело HTTP-запроса) и не имеет ограничений на объем отправл€емой информации.

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

ќднако, поскольку переменные не отображаютс€ в URL-адресе, добавить страницу в закладки невозможно.


¬ключаемые файлы PHP

ќператор include (или require) берет весь текст/код/ ?разметку, которые существуют в указанном файле, и копирует их в файл, который использует оператор include.

¬ключение файлов очень полезно, если вы хотите включить один и тот же PHP, HTML или текст на несколько страниц веб-сайта.


ќператоры PHP include и require

ћожно вставить содержимое одного файла PHP в другой файл PHP (до того, как сервер выполнит его), с помощью оператора include или require.

ќператоры include и require идентичны, за исключением того что в случае сбо€:

  • require выдаст фатальную ошибку E_COMPILE_ERROR и остановит скрипт
  • include выдаст только предупреждение E_WARNING, и сценарий продолжитс€

¬ключение файлов экономит много времени. Ёто означает, что вы можете создать стандартный файл верхнего (хедер), нижнего (футер) колонтитула или меню дл€ всех своих веб-страниц. «атем, когда необходимо обновить заголовок, вы можете обновить только включаемый файл заголовка.

—интаксис

Syntax
include 'filename';

or

require 'filename';

ѕример:

ѕредположим, у нас есть стандартный файл футера с именем footer.php, который выгл€дит так:

<?php
echo "<p>Copyright &copy; 1999-" . date("Y") . " wiki.merionet.ru</p>";
?>	

„тобы включить файл футера на страницу, используйте оператор include:

<html>
<body>

<h1>Welcome to my home page!</h1>
<p>Some text.</p>
<p>Some more text.</p>
<?php include 'footer.php';?>

</body>
</html> 

ќбработка файлов PHP

PHP имеет несколько функций дл€ создани€, чтени€, загрузки и редактировани€ файлов.


‘ункци€ PHP readfile ()

‘ункци€ readfile() читает файл и записывает его в выходной буфер.

ѕредположим, у нас есть текстовый файл с именем webdictionary.txt, хран€щийс€ на сервере, который выгл€дит следующим образом:

AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language	

 од PHP дл€ чтени€ файла и записи его в выходной буфер выгл€дит следующим образом (функци€ readfile() возвращает количество байтов, прочитанных в случае успеха):

 <?php
echo readfile("webdictionary.txt");
?> 	
AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language236 

‘ункци€ readfile() полезна, если все, что вам нужно сделать, это открыть файл и прочитать его содержимое.


ќткрыть файл PHP - fopen()

Ћучше всего открывать файлы с помощью функции fopen(). Ёта функци€ дает вам больше возможностей, чем функци€ readfile().

»спользуем тот же файл со словарем. ѕервый параметр fopen() содержит им€ открываемого файла, а второй параметр указывает, в каком режиме файл должен быть открыт. ¬ следующем примере также создаетс€ сообщение, если функци€ fopen() не может открыть указанный файл:


<!DOCTYPE html>
<html>
<body>

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>

</body>
</html>
AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language 	
‘ункци€ die() €вл€етс€ псевдонимом функции exit().‘ункци€ exit() печатает сообщение и завершает текущий скрипт.

‘айл можно открыть в одном из следующих режимов:

  • r - ќткрыть файл только дл€ чтени€. ”казатель файла начинаетс€ с начала файла
  • w - ќткрыть файл только дл€ записи. ”дал€ет содержимое файла или создает новый файл, если он не существует. ”казатель файла начинаетс€ с начала файла
  • a - ќткрыть файл только дл€ записи. —уществующие данные в файле сохран€ютс€. ”казатель файла начинаетс€ с конца файла. —оздает новый файл, если файл не существует
  • x - —оздает новый файл только дл€ записи. ¬озвращает FALSE и ошибку, если файл уже существует.
  • r+ - ќткрыть файл дл€ чтени€ или записи. ”казатель файла начинаетс€ с начала файла
  • w+ - ќткрыть файл дл€ чтени€ или записи. ”дал€ет содержимое файла или создает новый файл, если он не существует. ”казатель файла начинаетс€ с начала файла
  • a+ - ќткрыть файл дл€ чтени€ или записи. —уществующие данные в файле сохран€ютс€. ”казатель файла начинаетс€ с конца файла. —оздает новый файл, если файл не существует
  • x+ - —оздает новый файл дл€ чтени€ или записи. ¬озвращает FALSE и ошибку, если файл уже существует.

‘ункци€ fopen() также используетс€ дл€ создани€ файла. ¬озможно, это немного сбивает с толку, но в PHP файл создаетс€ с использованием той же функции, что и дл€ открыти€ файлов.

≈сли вы используете fopen() дл€ файла, который не существует, он создаст его, учитыва€, что файл открыт дл€ записи w или добавлени€ a.


‘ункци€ PHP fread()

‘ункци€ fread() читает из открытого файла.

ѕервый параметр fread() содержит им€ файла дл€ чтени€, а второй параметр определ€ет максимальное количество байтов дл€ чтени€.

—ледующий код PHP читает файл webdictionary.txt до конца:

fread($myfile,filesize("webdictionary.txt"));

‘ункци€ PHP fclose()

‘ункци€ fclose() используетс€ дл€ закрыти€ открытого файла.

’ороша€ практика программировани€ - закрывать все файлы после того, как вы закончили с ними. ¬ы же не хотите, чтобы открытый файл, бегающий по вашему серверу, занимал ресурсы!

ƒл€ fclose() требуетс€ им€ файла (или переменной, содержащей им€ файла), которую мы хотим закрыть:

<?php
$myfile = fopen("webdictionary.txt", "r");
// выполнение работы с файлом...
fclose($myfile);
?>

‘ункци€ PHP fwrite()

‘ункци€ fwrite() используетс€ дл€ записи в файл.

ѕервый параметр fwrite() содержит им€ файла дл€ записи, а второй параметр - это строка, которую нужно записать.

¬ приведенном ниже примере пара имен записываетс€ в новый файл с именем newfile.txt:

 <?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
$txt = "Jane Doe\n";
fwrite($myfile, $txt);
fclose($myfile);
?> 

PHP и JSON

„то такое JSON?

JSON (JavaScript Object Notation) представл€ет собой синтаксис дл€ хранени€ и обмена данными.

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

PHP имеет несколько встроенных функций дл€ обработки JSON.

–ассмотрим следующие две функции:

  • json_encode()
  • json_decode()

‘ункци€ PHP json_encode()

‘ункци€ json_encode() используетс€ дл€ кодировани€ значени€ в формат JSON.

¬ этом примере показано, как кодировать ассоциативный массив в объект JSON:

<!DOCTYPE html>
<html>
<body>

<?php
$age = array("Peter"=>35, "Ben"=>37, "Joe"=>43);

echo json_encode($age);
?>

</body>
</html>

¬ывод:

{"Peter":35,"Ben":37,"Joe":43} 	

‘ункци€ PHP json_decode()

‘ункци€ json_decode() используетс€ дл€ декодировани€ объекта JSON в объект PHP или ассоциативный массив.

¬ этом примере данные JSON декодируютс€ в объект PHP:

<!DOCTYPE html>
<html>
<body>

<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
 
var_dump(json_decode($jsonobj));
?>

</body>
</html>

¬ывод:

object(stdClass)#1 (3) { ["Peter"]=> int(35) ["Ben"]=> int(37) ["Joe"]=> int(43) } 	

‘ункци€ json_decode() по умолчанию возвращает объект. ‘ункци€ json_decode() имеет второй параметр, и если задано значение true, объекты JSON декодируютс€ в ассоциативные массивы.

<!DOCTYPE html>
<html>
<body>

<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
 
var_dump(json_decode($jsonobj, true));
?>

</body>
</html>	

¬ывод:

array(3) { ["Peter"]=> int(35) ["Ben"]=> int(37) ["Joe"]=> int(43) } 

»сключени€ PHP

„то такое исключение (exception) ? »сключением €вл€етс€ объект, описывающий ошибку или неожиданное поведение сценари€ PHP.

ћногие функции и классы PHP создают исключени€. ѕользовательские функции и классы также могут вызывать исключени€.

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


¬ыброс исключени€

ќператор throw позвол€ет определ€емой пользователем функции или методу вызывать исключение.  огда возникает исключение, следующий за ним код выполн€тьс€ не будет.

≈сли исключение не обнаружено, произойдет фатальна€ ошибка с сообщением Uncaught Exception.

ѕопробуем сгенерировать исключение, не улавлива€ его:

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

echo divide(5, 0);
?> 	

–езультат будет выгл€деть примерно так:

Fatal error: Uncaught Exception: Division by zero in C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4 

ќператоры try...catch

„тобы избежать ошибки из приведенного выше примера, мы можем использовать оператор try ... catch дл€ перехвата исключений и продолжени€ процесса.

—интаксис

try {
  код, который может генерировать исключени€
} catch(Exception $e) {
  код, который запускаетс€ при обнаружении исключени€
}

ѕример: показывать сообщение при возникновении исключени€:

<!DOCTYPE html>
<html>
<body>

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide.";
}
?>

</body>
</html>

–езультат:

Unable to divide. 	

Ѕлок catch указывает, какой тип исключени€ следует перехватить, и им€ переменной, котора€ может использоватьс€ дл€ доступа к исключению. ¬ приведенном выше примере тип исключени€ - Exception, а им€ переменной - $e.

ќператор try ... catch ... finally может использоватьс€ дл€ перехвата исключений.  од в блоке finally всегда будет выполн€тьс€ независимо от того, было ли обнаружено исключение. ≈сли присутствует finally, блок catch не об€зателен.

—интаксис:

try {
  код, который может генерировать исключени€
} catch(Exception $e) {
  код, который запускаетс€ при обнаружении исключени€
} finally {
  код, который всегда выполн€етс€ независимо от того, было ли обнаружено исключение

ќќѕ в PHP

Ќачина€ с PHP5, вы также можете писать PHP-код в объектно-ориентированном стиле.

ќбъектно-ориентированное программирование выполн€етс€ быстрее и проще.


„то такое ќќѕ?

ќќѕ означает объектно-ориентированное программирование.

ѕроцедурное программирование - это создание процедур или функций, выполн€ющих операции с данными, а объектно-ориентированное программирование - это создание объектов, содержащих как данные, так и функции.

ќбъектно-ориентированное программирование имеет несколько преимуществ перед процедурным программированием:

  • ќќѕ быстрее и проще в исполнении
  • ќќѕ обеспечивает четкую структуру программ
  • ќќѕ упрощает обслуживание, изменение и отладку кода
  • ќќѕ позвол€ет создавать полностью повторно используемые приложени€ с меньшим количеством кода и более коротким временем разработки

 лассы и объекты - это два основных аспекта объектно-ориентированного программировани€.

 ласс - это шаблон дл€ объектов, а объект - это экземпл€р класса.

 огда создаютс€ отдельные объекты, они наследуют все свойства и поведение класса, но каждый объект будет иметь разные значени€ свойств.


ќпределить класс

 ласс определ€етс€ с помощью ключевого слова class, за которым следует им€ класса и пара фигурных скобок {}. ¬се его свойства и методы заключены в фигурные скобки:

 <?php
class Fruit {
  // здесь будет код...
}
?> 	

Ќиже мы объ€вл€ем класс с именем Fruit, состо€щий из двух свойств $name и $color и двух методов set_name() и get_name() дл€ установки и получени€ свойства $name:

<?php
class Fruit {
  // Properties
  public $name;
  public $color;

  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}
?>	
ѕримечание. ¬ классе переменные называютс€ свойствами, а функции - методами.

ќпределить объекты

 лассы - ничто без объектов. ћы можем создать несколько объектов из класса.  аждый объект имеет все свойства и методы, определенные в классе, но у них будут разные значени€ свойств.

ќбъекты класса создаютс€ с использованием ключевого слова new.

¬ приведенном ниже примере $apple и $banana €вл€ютс€ экземпл€рами класса Fruit:

 <?php
class Fruit {
  // Properties
  public $name;
  public $color;

  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}

$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');

echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?> 	

ѕолучим такой вывод:

Apple
Banana	

 лючевое слово $ this

 лючевое слово $this относитс€ к текущему объекту и доступно только внутри методов.

¬згл€ните на следующий пример:

 <?php
class Fruit {
  public $name;
}
$apple = new Fruit();
?> 	

»так, где мы можем изменить значение свойства $name? ≈сть два пути:

1. ¬нутри класса (добавив метод set_name() и использу€ $this):

<?php
class Fruit {
  public $name;
  function set_name($name) {
    $this->name = $name;
  }
}
$apple = new Fruit();
$apple->set_name("Apple");
?>	

2. ¬не класса (путем пр€мого изменени€ значени€ свойства):

 <?php
class Fruit {
  public $name;
}
$apple = new Fruit();
$apple->name = "Apple";
?> 	

Ѕаза данных PHP MySQL

— помощью PHP вы можете подключатьс€ к базам данных и управл€ть ими.

MySQL - сама€ попул€рна€ система баз данных, используема€ с PHP.

Ѕазы данных полезны дл€ категориального хранени€ информации.


ѕодключитьс€ к MySQL

PHP 5 и более поздние версии могут работать с базой данных MySQL, использу€:

  • –асширение MySQLi
  • (PHP Data Objects)
„то следует использовать: MySQLi или PDO?

» MySQLi, и PDO имеют свои преимущества:

PDO будет работать с 12 различными системами баз данных, тогда как MySQLi будет работать только с базами данных MySQL.

»так, если вам нужно переключить свой проект на использование другой базы данных, PDO упрощает этот процесс. ¬ам нужно только изменить строку подключени€ и несколько запросов. — MySQLi вам нужно будет переписать весь код, включа€ запросы.

ќба €вл€ютс€ объектно-ориентированными, но MySQLi также предлагает процедурный API.

ќба поддерживают подготовленные за€влени€. ѕодготовленные операторы защищают от внедрени€ SQL-кода и очень важны дл€ безопасности веб-приложений.

»нстукцию по установке MySQLi можно прочитать тут, а по установке PDO тут


ќткрыть соединение с MySQL

ѕрежде чем мы сможем получить доступ к данным в базе данных MySQL, нам необходимо подключитьс€ к серверу:

ѕример (объектно-ориентированный MySQLi):

 <?php
$servername = "localhost";
$username = "username";
$password = "password";

// —оздать соединение
$conn = new mysqli($servername, $username, $password);

// ѕроверить соединение
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?> 

ѕример (процедура MySQLi):

 <?php
$servername = "localhost";
$username = "username";
$password = "password";

// —оздать соединение
$conn = mysqli_connect($servername, $username, $password);

// ѕроверить соединение
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?> 

ѕример PDO:

 <?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
  $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?> 
ѕримечание. ¬ приведенном выше примере PDO мы также указали базу данных (myDB). PDO требуетс€ действующа€ база данных дл€ подключени€. ≈сли база данных не указана, выдаетс€ исключение.

«акрыть соединение

—оединение будет закрыто автоматически, когда скрипт завершитс€. „тобы закрыть соединение раньше, используйте следующее:

ѕример (объектно-ориентированный MySQLi):

$conn->close(); 

ѕример (процедура MySQLi):

mysqli_close($conn); 

ѕример PDO:

$conn = null; 

PHP MySQL ¬ставить данные

¬от несколько правил синтаксиса, которым нужно следовать:

  • SQL-запрос должен быть заключен в кавычки в PHP.
  • —троковые значени€ внутри SQL-запроса должны быть заключены в кавычки.
  • „исловые значени€ не должны указыватьс€.
  • —лово NULL нельз€ заключать в кавычки.

ќператор INSERT INTO используетс€ дл€ добавлени€ новых записей в таблицу MySQL:

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...) 

ѕример (объектно-ориентированный MySQLi):

 <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 	

ѕример (процедура MySQLi):

 <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if (mysqli_query($conn, $sql)) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?> 	

ѕример PDO:

 <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql = "INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('John', 'Doe', 'john@example.com')";
  // use exec() because no results are returned
  $conn->exec($sql);
  echo "New record created successfully";
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?> 	

PHP MySQL ¬ыбрать данные

ќператор SELECT используетс€ дл€ выбора данных из одной или нескольких таблиц:

SELECT column_name(s) FROM table_name

»ли мы можем использовать символ * дл€ выбора всех столбцов из таблицы:

SELECT * FROM table_name 

ѕример (объектно-ориентированный MySQLi):

 <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}
$conn->close();
?> 	

—начала мы настраиваем SQL-запрос, который выбирает столбцы id, firstname и lastname из таблицы MyGests. —ледующа€ строка кода выполн€ет запрос и помещает полученные данные в переменную с именем $result.

«атем функци€ num_rows() провер€ет, было ли возвращено больше нул€ строк.

≈сли возвращаетс€ более нул€ строк, функци€ fetch_assoc() помещает все результаты в ассоциативный массив, который мы можем просмотреть в цикле. ÷икл while() просматривает набор результатов и выводит данные из столбцов id, firstname и lastname.

¬ следующем примере показано то же, что и в примере выше, в процедурном отношении MySQLi:

ѕример (процедура MySQLi):

 <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}

mysqli_close($conn);
?> 

ѕример PDO. ќн выбирает столбцы id, firstname и lastname из таблицы MyGests и отображает их в таблице HTML:

 <?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";

class TableRows extends RecursiveIteratorIterator {
  function __construct($it) {
    parent::__construct($it, self::LEAVES_ONLY);
  }

  function current() {
    return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
  }

  function beginChildren() {
    echo "<tr>";
  }

  function endChildren() {
    echo "</tr>" . "\n";
  }
}

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
  $stmt->execute();

  // set the resulting array to associative
  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
    echo $v;
  }
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?> 

ƒл€ фильтрации используетс€ WHERE, дл€ извлечени€ только тех записей, которые соответствуют указанному условию.

SELECT column_name(s) FROM table_name WHERE column_name operator value 

»тог

¬ этом руководстве мы изучили следующие темы об основах PHP:

  • ƒл€ чего используетс€ PHP?
  •  ак работает PHP?
  • ”становка PHP
  • PHP-фреймворки
  • Ѕазовый синтаксис PHP
  • ѕеременные PHP
  • “ипы данных PHP
  • “раблшутинг
  • ќператоры
  • ÷иклы
  • ‘ункции
  • ћассивы
  • ‘ормы
  • –абота с файлами в PHP
  • –абота с JSON в PHP
  • »сключени€ PHP
  • ќќѕ в PHP
  • –абота с Ѕƒ MySQL в PHP

Ѕольше статей и руководств по разработке можно найти в нашем разделе.

“акже вам может быть интересно наше –уководство по изучению Python с нул€ с примерами


—кидки 50% в Merion Academy

¬ыбрать курс