Вы находитесь на странице: 1из 23

1)Что такое SOLID, DRY

2) Применение public, private, protected


3) Абстрактный класс и интерфейс, их отличия
4) DI
5) Область видимости, namespace
6) Магические методы, какие знаете, с какими работали
7) И прям жить не могут не спросив: какие паттерны (шаблоны проектирования) Вы знаете и с какие работали, назовите 3,4,5.

PHP
– это широко используемый язык сценариев общего назначения с открытым исходным кодом.
Существует два вида синтаксиса:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement

$a=readline("a="); //input

intdiv — Целочисленное деление intdiv ( int $dividend , int $divisor ) : int

echo '<br />'; --- новая строка isset() – проверка на существование переменной


gettype(); - тип данных переменной unset() - уничтожение переменной

define(“pi”, 3.14); - объявление константы pi

x ? y : z – если х верно, то у, если ложно, то z

$x = 1;

do{

echo $x;

While($x++<10) – пока х меньше 10

//12345678910

Static значение статической переменной запоминается

htmlentities — Преобразует все возможные символы в соответствующие HTML-


сущности

isset — Определяет, была ли установлена переменная значением, отличным


от NULL
INCLUDE
include 'vars.php'; //Выражение include включает и выполняет указанный файл.
require аналогично include, за исключением того, что при ошибке он также выдаст фатальную ошибку
уровня E_COMPILE_ERROR. Другими словами, он остановит выполнение скрипта, тогда как include только
выдал бы предупреждение E_WARNING, которое позволило бы скрипту продолжить выполнение.
!!! require_once если видит, что подключаемый ранее файл уже был подключен, то ничего не делает
vars.php
<?php
$color = 'зеленое';
$fruit = 'яблоко';
?>
<?php
function foo()
{
    global $color;
    include 'vars.php';
    echo "Одно $color $fruit";
}

/* vars.php в той же области видимости, что и foo(),  *
* поэтому $fruit НЕ будет доступен за пределами этой области     *
* $color доступен, поскольку мы объявили переменную глобальной */

foo();                    // Одно зеленое яблоко
echo "Одно $color $fruit";   // Одно зеленое

?>
I. Открытие файла
FOPEN
fopen — Открывает файл или URL
<?php
$handle = fopen("c:\\folder\\resource.txt", "r");
?>

FILE
file — Читает содержимое файла и помещает его в массив
Можно также использовать функцию file_get_contents() для получения файла в виде строки.
 При вызове этой функции, каждая строка файла сохранятся в отдельном элементе указанного массива.
II. Манипуляции с данными файла
fwrite()
<?php
$fp = fopen("counter.txt", "a"); // Открываем файл в режиме записи
$mytext = "Это строку необходимо нам записать\r\n"; // Исходная строка
$test = fwrite($fp, $mytext); // Запись в файл
if ($test) echo 'Данные в файл успешно занесены.';
else echo 'Ошибка при записи в файл.';
fclose($fp); //Закрытие файла
?>
Для построчного считывания файла используют функцию fgets(). fgets ( resource $handle [, int $length ] ) 
<?php
$fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения
if ($fp)
{
while (!feof($fp))
{
$mytext = fgets($fp, 999);
echo $mytext."<br />";
}
}
else echo "Ошибка при открытии файла";
fclose($fp);
?>
Примечание: В данном примере значение 999 определяет количество символов, которые будут считываться до
тех пор, пока указатель не достигнет конца файла (EOF).
readfile(): открывает файл, отображает его содержимое в окне браузера, а затем закрывает файл:
fgetc() читает файл по символам:
<?php
$fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения
if ($fp)
{
  while(!feof($fp))
  {
  $char = fgetc($fp);
  if ($char == 'с') $i = $i + 1;// Находим символ «с»
  }
echo 'Количество букв "c" в файле: '. $i;
}
else echo "Ошибка при открытии файла";
?>

III. Закрытие файла

Закрытие файла происходит с помощью функции fclose()

1) Нам необходимо проверить существует ли тот или иной файл. Для этого мы воспользуемся
функцией file_exists().

2) Определяем размер файла с помощью функции filesize()

fseek($myfile, 0); // Устанавливаем указатель файла


echo fread($myfile, 1024); // выводим содержимое файла

fseek — Устанавливает смещение в файловом указателе

 SEEK_SET - Установить смещение в offset байт.


 SEEK_CUR - Установить смещение в текущее положение плюс offset.
 SEEK_END - Установить смещение в конец файла плюс offset.
exit  — Вывести сообщение и прекратить выполнение текущего скрипта.The die() and exit() functions do the
exact same thing.
Если status задан в виде строки, то эта функция выведет содержимое status перед выходом.
Если status задан в виде целого числа (integer), то это значение будет использовано как статус выхода и не
будет выведено. Статусы выхода должны быть в диапазоне от 0 до 254, статус выхода 255 зарезервирован
PHP и не должен использоваться. Статус выхода 0 используется для успешного завершения программы

Массивы

Если требуется начать массив с другого индекса, например, с 1, то необходимо явно это указать в
конструкции array():

<?php
  $arr = array(1 => "PHP",
               2 => "MySQL",
               3 => "Apache");
?>

или

<?php
  $arr[1] = "PHP";
  $arr[2] = "MySQL";
  $arr[3] = "Apache";
?>

Следует заметить, что число элементов в массиве не обязательно знать заранее — его можно вычислить при
помощи функции count():

<?php
  for ($i = 1; $i <= count($arr); $i++)
  {
    echo $arr[$i]." "; //echo "$arr[1] $arr[2] $arr[3]";
  }
?>

<?php
  $arr["first"] = "PHP";
  $arr["second"] = "MySQL";
  $arr["third"] = "Apache";
?>

В этом случае массив называется ассоциативным, а его индексы называются ключами. Для вывода элемента
массива в строке кавычки (ни двойные, ни одинарные) указывать не следует:

<?php
  echo "$arr[first] $arr[second] $arr[third]";
?>

Так как у ассоциативных массивов нет индексов, для обхода их введён специальный вид цикла — foreach:
<?php
  foreach($arr as $key => $value)
  {
     echo "$key = $value <br />";
  }
?>

Вывод:
first = PHP
second = MySQL
third = Apache

Конструкция "$key =>", позволяющая получить доступ к ключу массива на каждом из циклов является не
обязательно и может быть опущена:

<?php
  foreach($arr as $value)
  {
     echo "$value <br />";
  }
?>

explode(), которая позволяет разбить строку на несколько фрагментов, каждый из которых помещается в
отдельный элемент массива
$str = "345|mail@mail.ru|http://www.softtime.ru|login|password";
  $arr = explode("|",$str);
implode(), которая объединяет, элементы массива в строку, используя для этого заданный разделитель:
$str = implode("##",$arr);

Многомерные массивы

Двумерный массив:

<?php
  $arr = array( array(‘Вася’, ‘слесарь’, 2500 ),
            array(‘Миша’,’строитель’, 3000),
            array(‘Андрей’, ‘шофер’, 2700));
?>

1) Определения числа элементов в массиве count()


2) Объединение массивов

Пусть необходимо создать массив $c, которые будет содержать как элементы массива $a так и массива $b:

<?php
  $a = array("a"=>"aa", "x"=>"xx");
  $b = array("c"=>"cc", "d"=>"dd");
  $c = $a + $b;
  echo "<pre>";
  print_r($c);
  echo "</pre>";
?>

Результат:

Array
(
    [a] => aa
    [x] => xx
    [c] => cc
    [d] => dd
)
НО если массив числовой:
$c = array_merge($a,$b);
3) Сортировка массива
sort($name); // если требуется отсортировать массив в алфавитном порядке

<?php
  $name = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx');
  $min = strlen($name[0]);
  $nam = $name[0];
  for ($i=1; $i < count($name); $i++)
  {
    $len = strlen($name[$i]);
    if ($len < $min)
    {
      $nam = $name[$i];
      $min = strlen($nam);
    }
  }
  echo 'Наименьшая длина - '.$nam;
?>
Вывод в обратном порядке:
<?php
 $num = array(1,2,3,4,5,6,7,8,9,10);
  $end = end($num);
  While ($end)
  {
    echo $end.' - ';
    $end = prev($num);
  }
?>
Функции next(), each() перемещают указатель на один элемент вперед. Функция reset() возвращает указатель
на 1 элемент в массиве.

Суперглобальные переменные
Некоторые предопределённые переменные в PHP являются "суперглобальными", что означает, что они
доступны в любом месте скрипта. Нет необходимости использовать синтаксис global $variable; для доступа к
ним в функциях и методах.
Суперглобальными переменными являются:

 $GLOBALS
 $_SERVER
 $_GET
 $_POST
 $_FILES
 $_COOKIE
 $_SESSION
 $_REQUEST
 $_ENV

$GLOBALS - Ссылки на все переменные глобальной области видимости. Имена переменных являются
ключами массива.
<?php
function test() {
    $foo = "локальная переменная";

    echo '$foo в глобальной области видимости: ' . $GLOBALS["foo"] . "\n";
    echo '$foo в текущей области видимости: ' . $foo . "\n";
}

$foo = "Пример содержимого";
test();
?>

Результатом выполнения данного примера будет что-то подобное:

$foo в глобальной области видимости: Пример содержимого


$foo в текущей области видимости: локальная переменная

$_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов.
Записи в этом массиве создаются веб-сервером.
Примеры индексов:
'PHP_SELF'
Имя файла скрипта, который сейчас выполняется, относительно корня документов. 
'SERVER_ADDR'
IP-адрес сервера, на котором выполняется текущий скрипт.
'SERVER_NAME'
Имя хоста, на котором выполняется текущий скрипт. 

$_SESSION Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего
скрипта.
Сессии - это механизм, позволяющий однозначно идентифицировать браузер и создающий для этого браузера
файл на сервере, в котором хранятся переменные сеанса.
HTML-формы (GET и POST) 
HTTP методы GET и POST используются для отправки данных на сервер. Данные попадают в
суперглобальные массивы $_GET и $_POST. Массивы $_GET и $_POST являются ассоциативными. Таким
образом, переданный на сервер параметр с именем "user_name", будет доступен
как $_GET['user_name'] или $_POST['user_name'] в зависимости от используемого метода. Основное отличие
метода GET от POST в способе передачи данных.
Запрос GET передает данные в URL в виде пар "имя-значение" (другими словами, через ссылку), а запрос
POST передает данные в теле запроса (подробно показано в примерах ниже).
Страница, созданная методом GET, может быть открыта повторно множество раз. Из этого следует, что
метод GET следует использовать для получения данных от сервера и не желательно в запросах,
предполагающих внесений изменений в ресурс. Например, можно использовать метод GET в HTML форме
фильтра товаров: когда нужно, исходя из данных введенных пользователем, переправить его на страницу с
отфильтрованными товарами, соответствующими его выбору.
Запрос, выполненный методом POST, напротив следует использовать в случаях, когда нужно вносить
изменение в ресурс (выполнить авторизацию, отправить форму обратной связи, форму онлайн заявки).
Повторный переход по конечной ссылке не вызовет повторную обработку запроса, так как не будет содержать
переданных ранее параметров. Метод POST имеет большую степень защиты данных, чем GET: параметры
запроса не видны пользователю без использования специального ПО, что дает методу преимущество при
пересылке конфиденциальных данных, например в формах авторизации.

$_GET Ассоциативный массив параметров, переданных скрипту через URL. Метод GET отправляет
закодированную пользовательскую информацию, добавленную к запросу страницы. Страница и
закодированная информация разделены символом ?.
<?php
echo 'Привет ' . htmlspecialchars($_GET["name"]) . '!';
?>
Подразумевается, что пользователь ввел в браузере адрес http://example.com/?name=Hannes
GET относится также к QUERY_STRING (информация в URL после '?'). Так,
например, http://www.example.com/test.php?id=3 содержит GET-данные, доступные как $_GET['id']. 

?php
if( $_GET["name"] || $_GET["age"] ) {
echo "Welcome ". $_GET['name']. "<br />";
echo "You are ". $_GET['age']. " years old.";

exit();
}
?>
<html>
<body>

<form action = "<?php $_PHP_SELF ?>" method = "GET">


Name: <input type = "text" name = "name" />
Age: <input type = "text" name = "age" />
<input type = "submit" />
</form>

</body>
</html>

$_POST
Метод POST передает информацию через заголовки HTTP. Информация кодируется, как описано в случае
метода GET
<form action="action.php" method="post">
<p>Ваше имя: <input type="text" name="name" /></p>
<p>Ваш возраст: <input type="text" name="age" /></p>
<p><input type="submit" /></p>
</form>
Когда пользователь заполнит форму и нажмет кнопку отправки, будет вызвана страница action.php. В этом
файле может быть что-то вроде:
Здравствуйте, <?php echo htmlspecialchars($_POST['name']); ?>.
Вам <?php echo (int)$_POST['age']; ?> лет.
htmlspecialchars() обеспечивает правильную кодировку "особых" HTML-символов так, чтобы вредоносный
HTML или Javascript не был вставлен на вашу страницу. 
В примере показана простая HTML форма авторизации.
Запрос состоит из области заголовков и тела запроса.

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

$_REQUEST
Ассоциативный массив (array), который по умолчанию содержит данные
переменных $_GET, $_POST и $_COOKIE.
htmlspecialchars — Преобразует специальные символы в HTML-сущности
Функции для работы с MySQL
Типичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов:

1. Установить подключение к серверу СУБД, передав необходимые параметры: адрес, логин, пароль.

2. Убедиться, что подключение прошло успешно: сервер СУБД доступен, логин и пароль верные и так
далее.

3. Сформировать правильный SQL запрос (например, на чтение данных из таблицы).

4. Убедиться, что запрос был выполнен успешно.

5. Получить результат от СУБД в виде массива из записей.

6. Использовать полученные записи в своём сценарии (например, показать их в виде таблицы).

Перед началом работы с данными внутри MySQL, нужно открыть соединение с сервером СУБД.
mysqli_connect(<адрес сервера>, <имя пользователя>, <пароль>, <имя базы данных>);
Функция возвращает результат — ресурс соединения, принимает все конфигурационные настройки и
подключается к серверу. Данный ресурс используется для всех следующих операций с MySQL.

Если подключение к MySQL не удалось, то функция  mysqli_connect()  вместо ресурса вернет логическое
значение типа «ложь» —  false .
Хорошей практикой будет всегда проверять значение результа выполнения этой функции и сравнивать его
с ложью.
Установка кодировки: mysqli_set_charset($con, "utf8");
ВЫПОЛНЕНИЕ ЗАПРОСОВ
Следует разделять все SQL-запросы на две группы:
1. Чтение информации (SELECT).
2. Модификация (UPDATE, INSERT, DELETE).
При выполнении запросов из среды PHP, запросы из второй группы возвращают только результат
их исполнения: успех или ошибку.
Запросы первой группы при успешном выполнении возвращают специальный ресурс результата. Его, в свою
очередь, можно преобразовать в ассоциативный массив (если нужна одна запись) или в двумерный массив
(если требуется список записей).
Составим корректный SQL-запрос, а затем выполним его путём передачи этого запроса
в функцию  mysqli_query() . Первым параметром для функциии  mysqli_query()  является ресурс подключения,
полученный от функции  mysqli_connect() , вторым параметром следует строка с SQL-запросом.

функция  mysqli_insert_id() .
Она принимает единственный аргумент — ресурс соединения, а возвращает идентификатор последней
добавленной записи.

// закрываем подключение
mysqli_close($link);

mysqli_fetch_all() извлекает все строки из результирующего набора и помещает их в ассоциативный массив,


обычный массив или в оба.
mysqli_fetch_array() - Выбирает одну строку из результирующего набора и помещает ее в ассоциативный
массив, обычный массив или в оба
HTTP Cookies 
Cookies - это механизм для хранения данных в удаленном браузере и, таким образом, отслеживание и
идентификации вернувшихся пользователей. Вы можете установить cookies, используя функцию setcookie().
setcookie — Отправляет cookie
После передачи клиенту cookie станут доступны через массив $_COOKIE при следующей загрузке страницы. 
API (программный интерфейс приложения, интерфейс прикладного программирования) — описание способов
(набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может
взаимодействовать с другой программой. Обычно входит в описание какого-либо интернет-протокола
(например, RFC), программного каркаса (фреймворка) или стандарта вызовов функций операционной
системы. Часто реализуется отдельной программной библиотекой или сервисом операционной системы.
Используется программистами при написании всевозможных приложений.

file_get_contents — Читает содержимое файла в строку


<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
$info = file_get_contents('https://api.vk.com/method/users.get.json?user_ids='.$user_id.'&fields=bdate&v=5.68');
SQL
Delete
Оператор DELETE удаляет строки из временных или постоянных базовых таблиц
DELETE FROM <имя таблицы >
[WHERE <предикат>];
Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления
Пусть требуется удалить те модели ПК из таблицы Product, для которых нет соответствующих строк в
таблице PC.

1. DELETE FROM Product


2. WHERE type = 'pc' AND
3. model NOT IN (SELECT model
4. FROM PC
5. );

Эту же задачу можно решить с помощью дополнительного предложения FROM следующим образом:

1. DELETE FROM Product


2. FROM Product pr LEFT JOIN
3. PC ON pr.model = PC.model
4. WHERE type = 'pc' AND
5. PC.model IS NULL;

Update
Оператор UPDATE изменяет имеющиеся данные в таблице. Команда имеет следующий синтаксис:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

Case
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;
Пусть требуется вывести список всех моделей ПК с указанием их цены. При этом если модель
отсутствует в продаже (ее нет в таблице РС), то вместо цены вывести текст «Нет в наличии».
Поскольку результатом оператора SELECT всегда является таблица, то все значения любого столбца должны
иметь один и тот же тип данных (с учетом неявного приведения типов). Поэтому мы не можем наряду с ценой
(числовой тип) выводить символьную константу. Вот почему к полю price применяется преобразование типов,
чтобы привести его значения к символьному представлению. 

1. SELECT DISTINCT product.model,


2. CASE
3. WHEN price IS NULL
4. THEN 'Нет в наличии'
5. ELSE CAST(price AS CHAR(20))
6. END price
7. FROM Product LEFT JOIN
8. PC ON Product.model = PC.model
9. WHERE product.type = 'pc';
Insert
Оператор INSERT вставляет новые записи в таблицу.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Create table
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);
Создание таблицы, используя другую:
CREATE TABLE new_table_name AS
    SELECT column1, column2,...
    FROM existing_table_name
    WHERE ....;

SQL COUNT(), AVG() and SUM() Functions


The COUNT() function returns the number of rows that matches a specified criteria. функция возвращающая
количество записей (строк) таблицы. Note: NULL values are not counted.
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
The AVG() function returns the average value of a numeric column. Note: NULL values are not counted.
SELECT AVG(column_name)
FROM table_name
WHERE condition;
The SUM() function returns the total sum of a numeric column. Note: NULL values are not counted.
SELECT SUM(column_name)
FROM table_name
WHERE condition;

INNER JOIN
U) users               D) departments
id name       d_id     id  name
-- ----       ----     --  ----
1  Владимир    1       1  Сейлз
2  Антон       2       2  Поддержка
3  Александр   6       3  Финансы
4  Борис       2       4  Логистика
5  Юрий        4
SELECT u.id, u.name, d.name AS d_name
FROM users u
INNER JOIN departments d ON u.d_id = d.id
id name       d_name
-- --------   ---------
1  Владимир    Сейлз
2  Антон       Поддержка
4  Борис       Поддержка
3  Юрий        Логистика
LEFT JOIN
SELECT u.id, u.name, d.name AS d_name
FROM users u
LEFT OUTER JOIN departments d ON u.d_id = d.id
id      name          d_name
--      --------      ---------
1       Владимир      Сейлз
2       Антон         Поддержка
3       Александр     NULL
4       Борис         Поддержка
5       Юрий          Логистика
Добавив условие

WHERE d.id IS NULL
в выборке останется только 3#Александр, так как у него не назначен департамент.
RIGHT JOIN
RIGHT OUTER JOIN вернет полный список департаментов (правая таблица) и сопоставленных пользователей.
SELECT u.id, u.name, d.name AS d_name
FROM users u
RIGHT OUTER JOIN departments d ON u.d_id = d.id
id      name        d_name
--      --------    ---------
1       Владимир    Сейлз
2       Антон       Поддержка
4       Борис       Поддержка
NULL    NULL        Финансы
5       Юрий        Логистика

SELECT d.id, d.name
FROM users u
RIGHT OUTER JOIN departments d ON u.d_id = d.id
WHERE u.id IS null

В нашем примере указав WHERE u.id IS null, мы выберем департаменты, в которых не числятся пользователи.
(3#Финансы)
FULL JOIN возвращает `объединение` объединений LEFT и RIGHT таблиц, комбинируя результат двух
запросов.
GROUP BY
The GROUP BY statement groups rows that have the same values into summary rows, like "find the number of
customers in each country".
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
The following SQL statement lists the number of customers in each country, sorted high to low:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC; //ASC|DESC;
Работа сетей
Веб сервер принимает запросы пользователей и выдает им документ, страницу или сайт
Веб сервер хранит информацию, получает запросы, запускает программы на языках программирования,
формирует веб страницы, отправляет назад пользователю, защищает информацию, проводит идентификацию
и тд
Принципы передачи информации в сети:
Протоколы
Когда пользователь вложит адрес, браузер передает запрос, кодируя информацию по правилам протокола
Хост, к которому привязан адрес, запускает программы сервера
Получаемые данные расшифровываются, команды выполняются, формируется гипертекст, кодируется и
отправляется обратно
Браузер получает ответ, преобразовывает код в хтмл и показывает на экране страницу

Хост - любое устройство сети, ip адрес или сервер


Гипертекст - совокупность связанных ссылками документов, система из текстовых страниц, имеющих
перекрестные ссылки (язык гипертекстовой разметки - хтмл)
Apache - оболочка систем управления серверами (аналогия: библиотекарь - оболочка, библиотека - сервер);
ПО, которое позволяет развернуть сервер на компьютере. По определенному открытому порту позволяет
принимать запросы и отвечать.

URL - универсальный указатель ресурса. Запрос передается серверу доменных имён (DNS), он преобразует
URL в IP адрес. Далее браузер по IP определяет сервер с контентом и отправляет ему запрос, запрос
обрабатывается и данные возвращаются пользователю.

DNS - система доменных имён. Первым делом после запроса браузер выясняет, известен ли сайт в днс сервере
провайдера.
Существуют корневые серверы имён (root name server), который ссылается на нужный сервер имен домена
(например .com name server).
Для ускорения получения ip адресов используется кэширование (24 часа после посещения).

Протокол - стандартизированный формат для передачи данных между двумя устройствами. Протоколы
позволяют обмениваться данными независимо от ПО и ОС.
Набор протоколов интернета: стек TCP/IP.
Прикладной уровень протоколов: протоколы создания данных и их передачи через интернет (http, FTP,
SMTP).
Канальный уровень: определяет способ подключения маршрутизаторов друг к другу по сети
Транспортный уровень: контролирует назначение портов и взаимодействие компьютеров
Сетевой уровень: определяет способ адресации и механизм маршрутизации данных, передаваемых по сети

Веб протоколы различаются по типу запрашиваемых данных, способу сжатия и механизму взаимодействия
клиента и сервера: FTP (передача крупных файлов, клиент подключается к файловому серверу, а не веб
серверу), SMTP (простой протокол пересылки почты, стандартный протокол обмена электронной почты через
интернет; часто отправка по этому, а получение почты по POP), RTP (протокол передачи в реальном времени:
доставка аудио и видео)
HTTP - протокол передачи гипертекста. Однонаправленный (затруднение в отправке и получении больших
файлов) протокол без хранения состояния (запросы удаляются, не засоряется память —> но сохранение имён
пользователей и сеансов браузера осуществляется с помощью других средств).
HTTPS - защищённый вариант. Объединяет http и протокол обеспечения безопасности.

Веб сервер - это компьютер со специализированным программным обеспечением. Все веб серверы имеют IP
адреса. Виртуальный хостинг - несколько сайтов на одном IP. Разделяемый хостинг - сайт на веб сервере
вместе с другими сайтами, при выделенном хостинге для сайта отдельный сервер. Веб стэк - набор программ,
которые обрабатывают веб страницы и возвращают их браузерам. Веб стэк: ОС, веб сервер, сервер баз
данных, язык программирования (стэк lamp: Linux, Apache, MySQL, PHP/Python; wamp).
Сети
Ethernet - локальная сеть, проводные соединения и электрические сигналы на физ уровне
MAC адрес (зашит в карту) - уникальный идентификатор сетевого интерфейса для реализации коммуникации
устройств в сети на физ уровне.
Маршрутизация - процесс определения маршрута данных в сетях связи
Топологии сетей, которые неэффективны в случае появления разрыва:
1 Линейная шина (все узлы к одному кабелю)
2 Кольцо (узлы между собой)
3 Звезда (центральное звено - коммутатор/свитч [устройство для соединения нескольких узлов в комп сети]).
ARP протокол предназначен для определения MAC адреса по IP адресу другого компьютера
Сетевой шлюз - аппаратный маршрутизатор, служит для сопряжения комп сетей, использующих разные
протоколы.
Маска подсети - битовая маска, определяющая, какая часть IP адреса узла сети относится к адресу сети, а
какая - к адресу самого узла в этой сети.

Протоколы позволяют запаковывать и распаковывать данные вне зависимости от железа/ОС.


Преимущества TCP:
1 100% доставка данных
2 отправка потоками
3 разделение на пакеты
4 выбирает максимально быстрый путь
ООП

объекты отражают реальные сущности - люди, товары, карточки, статьи в блогах и др. Это во многом
упрощает задачу, когда вы только начинаете проектировать свое приложение, так как назначение каждого
объекта, как и цель отношений между объектами, будет ясно и понятно.
Легче писать модульные программы: ООП предполагает написание модулей. Разделяя код на модули,
вам будет легче им управлять, дебажить и расширять его. Объект — это совокупность характеристик и
поведений, которое соответствует некой сущности. Объект - это переменная специального типа, которая
создается через класс. Он содержит действительные данные и функции для манипулирования ими. Чтобы
создать объект в программе, нужно описать шаблон для этого объекта, который называется классом.
Характеристики объекта в классе описываются в виде переменных, которые называются полями.
Поведение объекта в классе описывается функциями, которые называются методами.
Объектно ориентированное программирование базируется на принципах:
 инкапсуляция
 наследование
 абстракция
 полиморфизм
Инкапсуляция — объединение полей и методов в классе, с целью закрыть прямой доступ к полям и открыть
его для методов, которые этими полями управляют.
Согласно инкапсуляции, доступ к полям рекомендуется закрывать используя соответствующие
спецификаторы доступа. Чтобы предоставить возможность вносить изменения или получать значения полей,
создаются специальные методы.
Метод, возвращающий значение поля, называется геттер (от английского get — «получать»).
Метод, устанавливающий значение поля, называется сеттер (от английского set — «устанавливать»).
public function getField()
{
return $this->field;
}
public function setField($newValue)
{
if ($newValue < 0) {
$newValue = -1;
}
return $this->field = $newValue;
}

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

Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод. Он описан в программе,
имеет поля, методы и не может использоваться для непосредственного создания объекта. То есть от
абстрактного класса можно только наследовать. Объекты создаются только на основе производных классов,
наследованных от абстрактного.

Полиморфизм —  в программировании означает возможность использования одного имени для методов


разных классов находящихся в одной иерархии наследования (т.е. в родственных классах) с целью
выполнения схожих действий.
Создание в производном классе метода с таким же именем что и имя метода родительского класса,
называется переопределением метода.
Суть переопределения метода — производный класс в переопределяемом методе делает похожее, но
отличающееся действие, чем действие метода родительского класса
abstract class Post {
abstract public function printType();
}
class News extends Post {
public function printType()
{
echo "News";
}
}
class Article extends Post {
public function printType()
{
echo "Article";
}
}
Создать объект можно с помощью ключевого слова new:
new ClassName()
Этот код создаст объект класса ClassName.
$member = new Member();
Есть 3 идентификатора доступа для переменных класса, которые можно добавлять в класс:
 Открытые переменные класса (public): доступны - т.е. их можно прочитать и/или изменять - в любом
месте скрипта, независимо от того, где находится этот код - внутри класса или за его пределами
 Частные переменные класса (private): доступны только методам класса. Лучше всего делать
переменные класса именно частными, чтобы отделить объекты от остальной части кода.
 Защищенные переменные класса (protected): доступны методам собственного класса, а также методам
наследуемых классов
Для получения доступа к переменной того или иного объекта используется оператор ->:
$object->propertyName
____
<?php
class Member
{
public $username = "";
}
$member = new Member();
$member->username = "Fred";
echo $member->username; // Выведет "Fred"
?>
____

Методы класса:
class ClassName
{
public function methodName() {
// (код)
}
__
<?php
class Member
{
public $username = "";
private $loggedIn = false;
public function login() {
$this->loggedIn = true;
}
public function logout() {
$this->loggedIn = false;
}
public function isLoggedIn() {
return $this->loggedIn;
}
}
?>
Вы наверное заметили, что мы использовали новое ключевое слово $this. В контексте методов объекта
специальная переменная $this ссылается на сам объект. Используя $this в методе объекта, метод может
получить доступ к любой переменной класса и методу объекта.
Например, метод login() может получить доступ к переменной класса $loggedIn объекта через $this->loggedIn.

Чтобы вызвать метод объекта, воспользуйтесь оператором ->.


$object->methodName()

Мы добавили некоторые методы в наш класс, теперь давайте попробуем их применить для чего-то:
view sourceprint?
<?php
class Member
{
public $username = "";
private $loggedIn = false;
public function login() {
$this->loggedIn = true;
}
public function logout() {
$this->loggedIn = false;
}
public function isLoggedIn() {
return $this->loggedIn;
}
}
$member = new Member();
$member->username = "Fred";
echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>";
$member->login();
echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>";
$member->logout();
echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>";
?>
Данный скрипт отобразит следующее:
Fred is logged out
Fred is logged in
Fred is logged out