PHP Web

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

                            <html>
                                    <:head>
                                     <:title>PHP Test<:/title>
                                    <:/head>
                                    <:body>
                                    <:?php echo '<:p>Hello World<:/p>'; ?>
                                    <:/body>
                                   <:/html>
                    

Сохраните код выше в файл index.php и в этой же папке запустите встроенный в php веб-сервер php -S localhost:5555. Затем откройте в браузере адрес localhost:5555. Вы увидите, что вывелась строчка Hello World. Подобное не сработает больше ни в одном другом языке программирования.

Весь секрет кода выше в том, что php-файлы могут содержать html-разметку, именно по этой причине необходимо использовать тег <?php ?>. Интерпретатор должен как-то узнавать где разметка, а где код, который нужно обрабатывать.

Со временем та простая страница превращается в подобный код:

                            <:?php
                            if ($_POST['process'] == 1) {
                              $first_name = htmlentities($_POST['first_name']);
                              $last_name = htmlentities($_POST['last_name']);
                              if (empty($last_name)){
                                echo "<:p class=\"error\">Your last name cannot be blank<:/p>";
                              } else {
                                echo "<:p>Hello there, ".$first_name." ".$last_name."<:/p>";
                              }
                            }
                          ?>
                          
                          <:!DOCTYPE html>
                          <:html>
                            <:head>
                              <:meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                              <:title>Form validation example<:/title>
                              <:style>
                                .error{color:red;}
                                input{display:block; margin-bottom:10px;}
                              <:/style>
                            <:/head>
                          
                            <:body>
                              <:h1>Form Validation Example<:/h1>
                              <:h2>Please enter your name<:/h2>
                          
                              <:form action="validation_example_2.php" method="post">
                                <:label for="first_name">First name:<:/label>
                                <:input name="first_name" id="first_name" type="text" value="<:?php echo($first_name); ?>" />
                          
                                <:label for="last_name">Last name:<:/label>
                                <:input name="last_name" id="last_name" type="text" value="<:?php echo($last_name); ?>" />
                          
                                <:input type="hidden" name="process" value="1" />
                                <:input type="submit" value="Submit" />
                              <:/form>
                            <:/body>
                          <:/html>
                          
                    

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

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

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