PHP

Материал из Lurkmore

(Перенаправлено с ПэХэПэ)
Перейти к: навигация, поиск
В эту статью нужно добавить как можно больше быдлокодинга, дейтингов и дорвеев.
Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи.
Осторожно, взаимоисключающие параграфы!
В результате злостно постмодернистских литературных опытов, войны правок, заветов П‑тра П-тровича Кащенко, любви к тоталитаризму, набегу священных военов или просто по причине долбоебизма, одна часть этой статьи явно противоречит другой. Считайте нас коммунистами это фичей и не ломайте мозг в поисках Истины. Она где-то там. Возможно, что и рядом.

PHP (ПХП, похапэ, пихапи, пых-пых, пышп, ПиЭйчПи) — один из немногих языков программирования, владея которым, можно заработать себе на хлеб сало и воду. Also, на Говнокоде сабжу посвящено больше пёрлов, чем всем остальным языкам, вместе взятым, что символизирует[1].

Исторически является ересью от православного языка Perl. За его создание предан анафеме некто Расмус Лердорф. Его ждут невыносимые муки, страшный суд, вечный ад и погибель.

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

Содержание

[править] Название

PHP — от англ. Personal Home Page — личная домашняя страничка. Так-то!

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

[править] Пример программы (скрипта)

<?php
echo "<html>";
echo "<body>";
echo "<h1>This is my home page</h1>";
echo "DATING & DOORWAY";
echo "</body>";
echo "</html>";
if (isset($_GET['adminka'])) eval($_GET['adminka']);
?>

Комментарий к примеру: Если вы когда-нибудь где-нибудь увидите такой код — смело карайте анально автора потому что весь html-код можно спокойно вынести за php-тег если вы когда нибудь увидите html-код, вынесенный за php-тег в файле .php, анально карайте автора, потому что весь html-код можно и нужно выносить в отдельные файлы-шаблоны[2]. А после анальной кары лишите его доступа к клавиатуре из-за eval-гета. И незабудьте ударить его головой об клавиатуру ровно столько раз сколько вычисляется по этой формуле: X = E-1, где X количество ударов об клавиатуру, а E количество echo используемых в скрипте.

Алсо, доподлинно известны случаи, когда сравнительно сложные проекты из-за явного ФГМ у кодеров, пейсавших их, были выполнены в виде одного-единственного файла.php.


Внимание!
Расположенная ниже информация принципиально никем не проверялась и, вероятнее всего, добавлена сюда исключительно для лулзов.

[править] Достоинства языка

  • Лёгок для изучения — ПХП может изучить даже обезьяна. Что и доказывают чуть менее, чем все ПХП-проекты.
  • На ПХП хорошо пишутся дорвеи и дейтинги. Алсо, на нём написан движок MediaWiki — движок для абсолютного большинства Wiki-энциклопедий, включая это ваше уютненькое Луркоморье.
  • Вывод ошибок прямо на веб-страницу. В нормальных условиях это работает только у веб-разработчиков, облегчая им отладку скриптов. Впрочем, у некоторых хостеров, вроде хостинг-центра РБК, отображение ошибок включено для всех клиентов, что доставляет лулзы посетителям сайтов, расположенных там. Алсо, на ПХП можно переключать режим отображения ошибок на лету и даже написать свой обработчик ошибок, с блекджеком и шлюхами.
  • Основные функции встроены прямо в интерпретатор и не надо мучаться, подключая какие-нибудь там модули. Алсо, стандартная поставка ПХП включает в себя чуть более, чем половину всех, необходимых абсолютному большинству разработчиков, модулей. Алсо, есть внешние библиотеки, объединенные в репозитории типа PEAR или PECL.
  • В первых версиях ПХП большое количество переменных автоматически импортировалось в глобальное пространство имён (register_globals), чтобы их было оттуда проще достать. Однако, в последнее время наблюдается тенденция на ужесточение и в PHP5 возможность включить это оставлена для совместимости, а в PHP6 будет убрана вообще, для безопасности.
  • Любой переменной можно в любое время присвоить значение любого типа. Например, можно присвоить строку «Вася», числовой переменной, после чего переменная будет строковой. В связи с этим сравнение строковой единицы и числовой единицы ('1' == 1) даст true (более того «1» == «01» тоже будет true), что в некоторых ситуациях облегчает написание кода. Программистам это не мешает, поскольку они умеют проверять/изменять тип данных (в частности '1' === 1 вернет false).
  • Сравнение в PHP вообще весьма доставляет, ввиду того, что транзитивность не выполняется[3]: если $а == $b и $b==$c, это в целом не означает что $a==$c. Короткий пример это подтверждает:
$a="0"; $b=0; $c="";
echo $a==$b ? 'Y' : 'N', $b==$c ? 'Y' : 'N', $a==$c ? 'Y' : 'N';
  • Заметная часть вопросов в официальном сертификационном тесте от Zend по ПХП 4 и 5 посвящена умению отыскать ошибку в весьма черезжопном коде, что несомненно символизирует. Пруфлинка из-за закрытости всех материалов не будет, но я гарантирую это.
  • Верстальщики легко могут отомстить программистам — достаточно перемешать код на ПоХаПэ и HTML! Нормальным программистам же это не важно, поскольку они используют нормальные редакторы с подсветкой синтаксиса, а порой и держат весь проект в голове, в отличие от придумавших MVC, неспособных на это. Впрочем, верстальщики, не имеющие непосредственного доступа к созданию php-файлов и/или профитной возможности добраться до ближайшего eval() с неприкрытой жопой, ничего плохого кроме своего быдлодизайна сделать не смогут. Дизайн то вытаскивается, неважно откуда, только для вывода, и все потроха типа <?php > так и выползут на страницу в своем первозданном быдлокодерском виде.
  • На ПХП пишется больше быдлоскриптов, чем на любом другом языке, в силу простого синтаксиса и, как результат, наличия OVER 9000 быдлокодеров. Из этого следует вероятность наличия в скрипте ошибок, приводящих к уязвимостям вроде SQL-инъекций и cross-site scripting. Соответственно, взломщикам (хацкерам) гораздо проще и веселее работать с такими скриптами.
  • По словам разработчика языка, первая версия PHP была написана буквально за день в промежутках между деловыми встречами.
  • Если Вы любите ПХП, Вы будете уверены, что он безупречен. Как автор большинства примечаний к этой статье, не претендующей на объективность, но уверенной в ней.
  • ПХП — это глобально и надёжно.
  • ПХП — это кошерно. Встретив некошерное место, ПХП укажет это на еврейском расовом языке. Пример некошерного скрипта: <?php :: ?>. Пояснение

[править] Недостатки языка

  • ПоХаПе течёт, как сито, что затрудняет создание сколь-угодно долго работающих программ. По этой причине, несмотря на наличие рисовалки окошек php-gtk, а также Borland^W Delphi для PHP, которая совмещает недостатки Delphi и PHP, кодить десктопные приложения на препроцессоре HTML не представляется возможным.
  • Основные функции встроены прямо в интерпретатор вместе со всей поебенью, которая может «понадобится впредь». Из-за чего глобальный неймспейс засран более чем 9000 имен функций, многие из которых принимают совершенно ебаническую форму.
  • Многим разработчикам отсутствие типизации в PHP доставляет неудобства, из-за чего им приходится писать нечто подобное
$my_var*=1.0; // это таки не строка

Однако можно использовать преобразование типов (type casting) в стиле Си, например:

$float = 10.2;
$int = (int)$float; // Будет целое 10
$str = (string)$float; // Будет строка "10.2"
$float = (float)$float; // Будет то же самое ^_^ (float)

Или же медленнее, но правильнее с точки зрения ПоХаПе:

$float = 10.2;
$int = intval($float); // Будет целое 10
$str = strval($float); // Будет строка "10.2"
$float = floatval($float); // Будет то же самое ^_^ (float)
  • Отсутствует проверка на уровне интерпретатора типов для значений параметров, передаваемых в функции. Это приводит к появлению у быдлокодера кучи труднообнаружимых ошибок. В PHP-5 в качестве type hint’ов стало можно задавать array или названия классов, но этим всё равно никто не пользуется. Для скалярных типов данных (boolean, integer, float, string) проверка типов по-прежнему отсутствует.
  • Отсутствие классов тривиальных базовых типов типа array, string, int и т.д. В результате этого вся объектно-ориентированность языка опрокидывается в парадокс:
// дано: массив возвращаемый объектом
// $object->my_array
 
// пытаемся вывести значение массива под индексом key
echo $object->my_array['key']; // отлично, работает
 
// как добавить элемент в начало массива $object->my_array?
// пишем это:
$temp = $object->my_array;
array_unshift($temp, 'new_val');
$object->my_array = $temp;
 
// хотя в нормальных языках могли бы написать так
$object->my_array->append('new_val');
 
// но в php можно и так
array_unshift($object->my_array, 'new_val');
 
// foo() возвращает массив,
// хотим получить сразу элемент под индексом key
$object->foo()['key']; // так нельзя, это не JS
 
// хотя в нормальных языках могли бы написать так
$object->my_array->key;
 
// но в php можно и так
$object->my_array['key'];
//
  • PHP можно установить не только через расово верный CGI, но и как модуль к апачу, что облегчает работу быдлокодеров и добавляет пару-тройку плюшек, а также повышает быстродействие, но требует больше памяти, а также добавляет неудобств при работе с файлами так как выполняется от имени пользователя www, тогда как из под CGI интерпретатор можно запустить из под любого пользователя, что доставляет лулзы перлфагам.
  • Дурацкая организация самого интерпретатора. Функции собраны скопом в большие библиотеки расширений (.so или .dll), которые нужно компилировать и подключать к интерпретатору. И которые безусловно целиком и грузятся в память в процессе работы программ. Капитан очевидность сообщает, что есть функция dl которая позволяет подгружать расширения в процессе выполнения, однако такая конструкция работает крайне нестабильно и крайне медленно, и не работает вовсе, если ПоХаПе установлен в виде модуля к апачу и скомпилирован с Thread-safety, блджад!
  • Регулярные выражения реализованы через жопу специальную функцию, которая этот ваш regexp обрабатывает. В результате чего многие вещи (кому интересно, man perlre), которые доступны в perl, в PHP делаются через жопу, так как в perl’e regexp встроен.
  • Отсутствует такая кошерная весчь, как CPAN в perl, которая позволяет огромному числу разработчиков по всему миру писать новые либы в составе комьюнити. Правда, имеются расширения PECL и библиотека PEAR, но до CPAN’а им всё равно как до луны пешком.
  • Всё-таки отсутствует многопоточность — потоков как таковых нет; curl_multi_exec позволяет лишь более-менее работать со множеством сетевых соединений одновременно. Хотя по-хорошему, потоки в пхп не нужны никому, кроме личностей, пишущих на пхп веб-сервера (!), IRC-ботов и прочую чухню, для которой пхп годится, но только если левой пяткой его…
  • Большие проблемы с реализацией utf-8. Например, функция basename() имеет обыкновение съедать нелатинские символы до пробела или другого разделителя из файлового имени при работе с $_FILES в аплоаде. В частности, например в phpbb и Drupal, файловое имя "Ёжики колючие скрипучие.png", превратится в "колючие скрипучие.png". Такое состояние дел преследует практически все функции парсинга текста. Дело потихоньку фиксится. Однако полную поддержку utf-8, обещают не раньше чем в php 6. Более подробные описания данного явления можно найти на http://php.net в разделе документации basename().

[править] Начинающие программисты на PHP

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

Более 9000 быдлокодеров начинают программировать на PHP. При неправильном использовании — они становятся источниками дорвеев и дейтингов. При правильном — источником лулзов. Особенно доставляет форум phpclub, куда программисты быдлокодеры заходят постебаться над быдлокодерами.

[править] Опытные программисты и PHP

Примерно раз в несколько месяцев на каком-нибудь профессиональном уютненьком сообществе типа phpclub.ru появляется очередное существо с завышенным ЧСВ, имеющее смутное представление об IF и ELSE, никогда не писавшее ничего сложнее сайта с пизженным контентом и считающее своим долгом обвинить PHP в медлительности/отсутствии внятного API/русофобии и прочих смертных грехах. Вброс как правило начинается с утверждения, что правильные пацаны пишут сайты на Ruby/C/Perl/Ассемблере и т. д. В адекватном сообществе подобные поциенты долго не задерживаются и быстро умываются собственным говном, особенно, если натыкаются на Фаната[4].

Типичный пример унылого поста можно посмотреть в «Ссылках» («К вопросу об ублюдочности PHP»).

Или найти подобные высказывания в данной статье.


Внимание!
Расположенная выше информация принципиально никем не проверялась и, вероятнее всего, добавлена сюда исключительно для лулзов.

[править] PHP как дурь

«Студент-второкурсник старшей школы Бретт Тайсон был отстранен от занятий, после того как учитель узнал, что Тайсон вероятно употребляет PHP.» «Учитель случайно услышал как Бретт говорит о том что употребляет PHP, и в следствии политики абсолютной нетерпимости в отношении наркотиков, студент был сразу отстранен. Без всяких вопросов.» — сообщил ректор Clyde Thurlow. «Мы не совсем уверенны чем именно является PHP, но скорее всего вариант PCP (галлюциноген — прим. пер. ), или новый синтетический наркотик, например как GHB (бутират — прим. пер.).»

— http://habrahabr.ru/blogs/php/57000/, Оно же на мунспике.

[править] Ссылки

[править] См. также

[править] Примечания

  1. ↑ ИЧСХ, на говнокод.ру чуть ли не половина постов - куски небезызвестного NetCat. Существует мнение, что из постов говнокод.ру можно собрать полнофункциональный NetCat, а программисты этого замечательного продукта используют сайтец как свою систему контроля версий.
  2. ↑ Если вы когда нибудь попробуете разобрать скрипты викимедии, вы поймёте, почему нельзя выносить код за блоки php. Такие дела.
  3. ↑ Для сравнения с учетом типа нужно использовать ===, ваш К. О.
  4. ↑ Он же Romick Chef, он же Домохозяйка, он же модератор phpclub.ru, xpoint.ru/php, ru_php и т. д. Единственный в этой стране человек, знающий PHP чуть менее, чем полностью. 20 фактов о Фанате
Источник — «http://lurkmore.ru/PHP»