Slide 1

Slide 1 text

Epic PHP #1 Рома Лапин, Evercode Lab

Slide 2

Slide 2 text

• В веб-разработке с 2005-го года • В 2011 соосновал Evercode Lab • Хобби: кикер, книги, подкасты, сноуборд, путешествия

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

История PHP

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

1994 Расмус Лердорф (Rasmus Lerdorf), датский программист, пишет набор скриптов на Perl/ CGI для вывода и учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов. ! PHP – Personal Home Page

Slide 7

Slide 7 text

1995 Расмус переписывает все на C и добавляет больше возможностей и суперспособностей. ! PHP/FI — Personal Home Page/Forms Interpreter

Slide 8

Slide 8 text

1997 PHP/FI 2.0 — 1 % (приблизительно 50 тысяч) всех интернет-доменов мира.

Slide 9

Slide 9 text

1998 PHP3.0 — два израильских программиста, Энди Гутманс и Зеев Сураски, полностью переписали код интерпретатора. ! Возможность расширения за счет модулей. ! PHP: Hypertext Preprocessor

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

2000 • PHP 4.0 (Zend Engine внутри) • улучшение производительности • поддержка сессий • буферизация вывода • более безопасные способы обработки вводимой пользователем информации • несколько новых языковых конструкций.

Slide 12

Slide 12 text

2004 PHP 5.0 ! обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП

Slide 13

Slide 13 text

2006 PHP 5.2 !

Slide 14

Slide 14 text

2008 Конец поддержки PHP 4 ! !

Slide 15

Slide 15 text

2009 PHP 5.3 ! !

Slide 16

Slide 16 text

2012 PHP 5.4 ! !

Slide 17

Slide 17 text

2014 На курс Epic PHP записываются будущие профессионалы и лидеры разработки на PHP. ! На вид они все отличные ребята. ;)

Slide 18

Slide 18 text

Hello world, good bye previous life

Slide 19

Slide 19 text

Попробуем? http://writecodeonline.com/php/ http://sandbox.onlinephpfunctions.com/

Slide 20

Slide 20 text

classic

Slide 21

Slide 21 text

classic extended

Slide 22

Slide 22 text

Первое правило клуба Точка с запятой после каждого выражения.

Slide 23

Slide 23 text

Установка и настройка

Slide 24

Slide 24 text

5.4 лучше 5.3 • 5.4 работает быстрее. Сильно быстрее. • У него есть встроенный сервер (не нужен apache/nginx/... • У него есть новые фичи

Slide 25

Slide 25 text

Но 5.3 иногда нужен • Так как 5.4 есть далеко не на всех хостингах (хинт: просите суппорт) • Локальная среда разработки максимально должна быть приближена к серверу • 5.2 не признавать ни в коем случае

Slide 26

Slide 26 text

5.2?

Slide 27

Slide 27 text

5.2?

Slide 28

Slide 28 text

Mac • http://php-osx.liip.ch/ • homebrew

Slide 29

Slide 29 text

Windows • http://www.apachefriends.org/en/ xampp.html • http://www.wampserver.com/ • Следите, чтобы сборка поддерживалась и обновлялась

Slide 30

Slide 30 text

Linux

Slide 31

Slide 31 text

Linux • Если у вас линукс, то скорее всего вы и так знаете, как и что поставить и собрать.

Slide 32

Slide 32 text

Linux • Если у вас линукс, то скорее всего вы и так знаете, как и что поставить и собрать. • Нет?

Slide 33

Slide 33 text

Linux • Если у вас линукс, то скорее всего вы и так знаете, как и что поставить и собрать. • Нет? • Ок, начните с XAMPP :)

Slide 34

Slide 34 text

Linux • Если у вас линукс, то скорее всего вы и так знаете, как и что поставить и собрать. • Нет? • Ок, начните с XAMPP :) • Или: sudo apt-get install php5

Slide 35

Slide 35 text

Linux • Если у вас линукс, то скорее всего вы и так знаете, как и что поставить и собрать. • Нет? • Ок, начните с XAMPP :) • Или: sudo apt-get install php5 • и поработаем со встроенным сервером

Slide 36

Slide 36 text

Попробуем? Запустим сервер

Slide 37

Slide 37 text

Попробуем? http://localhost/

Slide 38

Slide 38 text

Попробуем? • C:\xampp\htdocs • Создайте папку epicphp • А в ней файл test.php • Выведите в нем “hello, world” • http://localhost/epicphp/test.php

Slide 39

Slide 39 text

Попробуем?

Slide 40

Slide 40 text

Основы синтаксиса

Slide 41

Slide 41 text

Тэги ! 
 echo ‘тэги могут быть короткими’;
 ?> ! А есть еще немного более сокращенный вариант для echo $variable; ?> =$variable ?>

Slide 42

Slide 42 text

Тэги Если в файле только PHP-код, то закрывающий тэг НЕ ставим!!!

Slide 43

Slide 43 text

Переменные • Переменные обозначаются значком $ • Имя переменной содержит только латинские буквы, символ _ и цифры • Име переменной НЕ может начинаться с цифры

Slide 44

Slide 44 text

Переменные $typical_variable_name $camelCaseStyleVariableName $_anotherOne $_anotherOne2Or3 $1234errorWillBeHere

Slide 45

Slide 45 text

Переменные • Скалярные (простые): boolean, string, integer, float. • Составные: array, object. • Специальные: resource, null.

Slide 46

Slide 46 text

Переменные Variable Variables !

Slide 47

Slide 47 text

Комментарии Правило #1: ! // Эту строчку //интерпретатор //выполнять //не будет

Slide 48

Slide 48 text

Комментарии Правило #2: ! /* Эту строчку интерпретатор выполнять тоже не будет */

Slide 49

Slide 49 text

Комментарии

Slide 50

Slide 50 text

Комментарии Правило #3: ! $comments = true; /* Чем больше комментариев, тем проще разобраться потом. Но код надо стараться писать так, чтобы он был понятен и без комментариев. */

Slide 51

Slide 51 text

Комментарии Правило #4: ! /* В этом случае сначала следует комментарий, на следующей строчке действие */ ! $action_first = 0;

Slide 52

Slide 52 text

Комментарии Правило #5: ! $action_first = 1; // на одной строке действие идет первым

Slide 53

Slide 53 text

Комментарии /* this is commented */ but this is not */ ! ! # This is also a single line comment # New line comment ?> Here new line comment dont work, and this will be printed

Slide 54

Slide 54 text

Комментарии Задание ! Добавьте комментарии к примеру кода classic extended

Slide 55

Slide 55 text

Константы Не меняются по определению и не протухают =) !

Slide 56

Slide 56 text

Константы Задание ! Попробуйте задать свое имя как константу

Slide 57

Slide 57 text

Условные операторы if($condition === true){ // будет выполнено это } elseif ($anotherCondition === true) { // будет выполнено это действие } else { // будет выполнено вообще другое }

Slide 58

Slide 58 text

Условные операторы Условие может быть выражением или функцией ! if( $homer_is_happy > 155){ if (you_are_hungry()) { if ($homer_is_fat = eat_donuts()) {

Slide 59

Slide 59 text

Условные операторы Условия могут быть вложенными ! if( /*если первое условие выполнено*/ ) { if( /*второе условие выполнено*/ ) { выполнить_дествие(); } }

Slide 60

Slide 60 text

Условные операторы Задание ! Задайте переменную $age, равную вашему возрасту. Сделайте условие: если вам меньше 20, то выведите «Все впереди, Jack» 20-30 — «Самое время взяться за ум, Jack» больше 30 — «У вас есть чему поучиться, Jack»

Slide 61

Slide 61 text

Циклы while (цикл с предусловием) ! while ($i <= 10) { echo $i++; /* the printed value would be $i before the increment (post-increment) */ }

Slide 62

Slide 62 text

Циклы do-while (цикл с постусловием) ! 0);

Slide 63

Slide 63 text

Циклы for (цикл со счетчиком) ! for ($i = 1; $i <= 3; $i++) { say_it($i); } shoot();

Slide 64

Slide 64 text

Циклы continue ! while (list($key, $value) = each($arr)) { if (!($key % 2)) { // skip odd members continue; } do_something_odd($value); }

Slide 65

Slide 65 text

Циклы break ! while (++$i) { switch ($i) { case 5: echo "At 5
\n"; break 1; /* Exit only the switch. */ case 10: echo "At 10; quitting
\n"; break 2; /* Exit the switch and the while. */ default: break; } }

Slide 66

Slide 66 text

Вы только что видели самый страшный слайд из этой презентации.

Slide 67

Slide 67 text

Циклы foreach ! foreach ($people_in_this_room as $person) { echo “You are awesome, “ . $person . “!”; }

Slide 68

Slide 68 text

Emergency Завершить работу скрипта !

Slide 69

Slide 69 text

Функции

Slide 70

Slide 70 text

Why, oh, why? • читаемость • удобство поддержки • разделение обязанностей и модульность • Учитель по информатике сказал мне, что так надо • Если не думать об этом, насмешки и глум последуют, и вы закончите жизнь на дне

Slide 71

Slide 71 text

Функции

Slide 72

Slide 72 text

Функции • Все фукнции в PHP возвращают значение (null, если явно ничего не прописано) • названия функций не чувствительны к регистру • MyFunctionName() = MyFuNcTiOnNaMe()

Slide 73

Slide 73 text

Функции • global $id; — использование в функции переменных извне (не повторяйте этого дома) • Можно задать значения параметров по умолчанию, даже если они передаются по ссылке

Slide 74

Slide 74 text

Функции • Даже не смотрите как оно раньше работало в PHP4 • В PHP5 объекты всегда передаются по ссылке, просто запомните • “_” валидное ли имя для функции?

Slide 75

Slide 75 text

Функции

Slide 76

Slide 76 text

Функции Задание ! Напишите функцию, которая будет выполнять условие выше. Оберните вызов функции в цикл для $age от 15 до 35.

Slide 77

Slide 77 text

Жизнь одного маленького запроса

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

Начало пути • Пользователь вводит в строке браузера http://epixx.ru • if (не указан IP получателя) • запрос на DNS сервер для получения адреса сервера • Формируется http запрос, который упаковывается и отправляется в сеть.

Slide 80

Slide 80 text

Дорога — мой дом • Пакет проходит через цепочку маршрутизаторов, каждый из которых проверяет пункт назначения и перенаправляет кратчайшим путем. • Запрос приходит к получателю – серверу • Распаковка и определение приложения, которое займется его обработкой.

Slide 81

Slide 81 text

Веб-сервер • веб-сервер начинает обработку • статические файлы (изображения, javascript) возвращаются без обработки • php файлы нужно выполнить на интерпретаторе и только после этого вернуть результат пользователю.

Slide 82

Slide 82 text

Веб-сервер • Epixx.ru работает на Wordpress, т.е. запросили php файл • поэтому сервер ищет файл index.php и передает его php интерпретатору

Slide 83

Slide 83 text

Интерпретатор • Интерпретатор выполняет код, при необходимости обращаясь к базе данных, файлам, другим сервисам и возвращает результат

Slide 84

Slide 84 text

Обратный путь • Полученный код упаковывается в http ответ, сетевой пакет и отправляется пользователю. • Браузер получает ответ от сервера и рендерит (рисует) его

Slide 85

Slide 85 text

Moar • http://www.phphighload.com/2012/05/ http.html • http://www.google.com/green/storyofsend/ desktop/

Slide 86

Slide 86 text

Ищем знания и ответы!

Slide 87

Slide 87 text

Suicide hotline • http://php.net/ • http://www.phptherightway.com/ • http://php-guide.evercodelab.com/ • http://stackoverflow.com/ • php.net/название_функции_или_модуля

Slide 88

Slide 88 text

Стандарты! • Вы не одни и не одиноки • Вы хотите использовать чужой код • А кто-то хочет использовать ваш • Пишите код так, будто потом его будет читать больной на всю голову психопат с целым арсеналом оружия

Slide 89

Slide 89 text

Стандарты! • http://www.php-fig.org/ • PSR-0 – конвенция именование файлов, классов и неймспейсов для удобного обмена кодом.

Slide 90

Slide 90 text

Стандарты! • PSR-1 – основные рекомендации по написанию кода. Не только отступы и переносы строк. • PSR-2 – правила для оформления кода.

Slide 91

Slide 91 text

Разминка

Slide 92

Slide 92 text

FizzBuzz Напишите программу, которая выводит числа от 1 до 100. Но! Если число кратно трем, то выводит “Fizz”, а если пяти — “Buzz”. Для чисел, которые кратны одновременно трем и пяти, программа должна выводить “FizzBuzz”.

Slide 93

Slide 93 text

FizzBuzz Напишите программу, которая выводит числа от 1 до 100. Но! Если число кратно трем, то выводит “Fizz”, а если пяти — “Buzz”. Для чисел, которые кратны одновременно трем и пяти, программа должна выводить “FizzBuzz”. Hint: % – остаток от деления

Slide 94

Slide 94 text

Разнообразие

Slide 95

Slide 95 text

http://php.net/manual/en/language.types.type-juggling.php ! $values = array('', 0, true, false, '0'); ! foreach ($values as $test) { echo $test . ' - '; if ($test != "") { echo 'yup'; } if ($test) { echo 'nope'; } echo "\n"; } Приведение типов

Slide 96

Slide 96 text

Мелочи • = — присвоение • == — проверяем равенство • === — проверяем равенство и братство • != — ? • !== — ? • http://php.net/manual/en/ language.operators.comparison.php

Slide 97

Slide 97 text

Мелочи http://php.net/manual/en/types.comparisons.php

Slide 98

Slide 98 text

Потренируемся • http://php.net/manual/en/ types.comparisons.php • Напишите скрипт, который выводит одну из трех таблиц со страниц выше.