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»