Исповедь PHP программиста

в 10:07, , рубрики: php, исповедь, Программирование, метки:

Вступление

Исповедь PHP программиста - 1 Для начала расскажу одну историю, которая будет знакома, возможно, большинству из тусовки хаба «PHP».

Будучи школьником, ты играл в GTA Vice City и CS 1.6 в компьютерных клубах в начале за 8, потом за 10 рублей в час (60 ночь). Деньги раздобыть было не проблемой, можно всегда навешать лапши на уши родителям, что завтра нужно срочно сдать на ремонт школьного крыльца. Потом родители купили тебе собственный компьютер (для учебы, конечно же). Буквально за пару лет компьютеры появились в каждой семье и компьютерные залы закрылись. Кто-то продолжает и сейчас только играть за компьютером, но не ты. Ты пассионарен и сразу захотел написать свою игру, либо гайд на героя из Доты в формате HTML и JS, либо создать свой форум по играм и разместить там в футере рекламу.

В школе ты учился на «4», редко скатывался в тройки. Среди парней ты был вторым по успеваемости. Ты мог учиться и на 5ки, как те два парня на параллели, но сидеть 2 часа и зубрить отличия метоза от мейоза — задача непосильная, когда дома есть компьютер, а в нем — какой-то сериальчик или возможность попробовать разместить счетчик на своем сайте. Какое тебе дело до этого метоза? И вообще, ты не понимаешь, зачем начинать делать курсовую работу сейчас, когда можно за день до сдачи погуглить, скачать, ознакомиться и своими словами навешать лапши на уши учителю.

Прошел год, ты все еще молод и дерзок. Именно ты пишешь говнокод на фрилансе и можешь продать его за большие деньги. Ведь ты продаешь не код и не час своей работы, как прилежные мальчики в костюмах. Ты продаешь решение проблемы заказчика и умеешь навешать лапши на уши кому угодно, даже самому себе, чтобы не терять драгоценное времени на объяснения непонятных вещей.

Вскоре ты уже являешься типичным представителем среднего класса. А те парни-отличники с твоей параллели получили два высших образования и теперь либо работают консультантом в разделе утюгов Эльдорадо, либо стали Java программистом и давно уехали в США, оставив Россию наедине с PHP.

Минусы PHP

Статья с содержанием «минусы PHP» выходит стабильно раз в год. Здесь не хочу снова мусолить темы, о которых все и так знают: нейминг SPL функций, нейминг операторов, неожиданное поведение функций, скорость выполнения сценариев. Все это мелочи, либо попытка вывести PHP вне своей весовой категории. Здесь я перечислю пару архитектурных минусов, чего не видел в других статьях, но это очень важно.

1. Отсутствие стандартизации на низком уровне. PHP — язык с нестрогой, динамической типизацией. Типизация PHP настолько нестрога, что я бы лучше поискал другое слово, в котором нет подстроки «строго» вообще. Например, пусть это будет добрая типизация, или типизация — бревно, тряпка и ***. Нельзя назвать это минусом, язык программирования не виноват, что его используют не по назначению, в высоконагруженных сложных системах, где типизация крайне важна. Но вот есть еще такой интересный момент, как стандартизация работы с типами:

<?php

//Эталонный набор данных типа "массив" из главной палаты мер и весов
$array = [
	'foo' => 1,
]; 
//Эталонный набор данных типа "объект" из главной палаты мер и весов
class Object {
	public $foo = 1;
}
$object = new Object; 

//Теперь создаем копию:
$arrayCopy = $array;
$objectCopy = $object;

//Подменяем данные:
$arrayCopy['foo'] = 2;
$objectCopy->foo = 2;

//Выведет 12
echo $array['foo'];
echo $object->foo;

Если вы попробуете изменить $objectCopy->foo, вы измените и $object->foo. А в случае с массивом, меняя foo в $arrayCopy, вы измените данные только в $arrayCopy, не касаясь $array.

Да-да, в PHP оператор присваивания "=" либо клонирует данные, либо передает их по ссылке в зависимости от того, данные какого типа следуют за оператором. Однажды пришлось тушить сидушку моего кресла, когда в сложной системе, где на ходу меняются типы, причиной бага оказалось именно эта «особенность» и я потратил полдня на дебаг.

2. Нестабильность архитектуры. В настоящий момент PHP разных версий похож на Perl, C++, Java. В каждом из перечисленных языков есть что-то свое, хорошее. Наверно, к этому хорошему стремились разработчики PHP, каждый раз поворачивая на 180 грудусов со своего пути. Наиболее эпичным стало добавление ООП в PHP, когда вода с низов давно утекла и утверждение «ООП — это когда все является объектом» к PHP применено быть уже не может, ведь в этом ЯП всё может является всем.

Если мы хотим хотябы на 99% объектно-ориентированный PHP проект, где мы будем «жестить» и наследовать низкоуровневые объекты типа «строка», нам придется делать некоторые страшные и глупые вещи, например:

<?php

class String {
	private $string;
	
	function __construct($string) {
		$this->string = $string;
	}
	
	function char($num) {
		$num = $num-1;
		//да-да, не удивляйтесь, мы используем метод объекта для возвращения символа строки как массива
		return $this->string[$num];
	}
}
//Выведем второй символ строки Hello World
echo (new String('Hello World'))->char(2);

Интересно, что мы не можем проверить тип $num в char ООП'шным способом: «function char(integer $num)», хотя этот integer в системе есть. Нам придется проверять тип функцией SPL, либо писать свой собственный class Integer, такой же как String.

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

3. Излишняя свобода. В PHP нестрогой является не только типизация. Тут вообще мир добра и единорогов. Можно взять и прямо в футере шаблона, посреди HTML кода, сделать подключение к базе и записать туда какие-то входящие от пользователя данные из глобальной переменной без экранирования. В других языках программирования за это светит синтаксическая ошибка. Но PHP создавался, как шаблонизатор и тянет за собой эту тяжелую ношу всю жизнь. Это является еще и плюсом.

Плюсы PHP

А теперь самое интересное. Перечислю конкретные плюсы PHP.

1. Мужественность. Я разрабатываю на PHP уже 10 лет. За это время мимо меня прошло куча модных альтернатив, типа Ruby (on rails) или NodeJS. У всех этих решений не было лишних конечностей или ампутированной головы, как у PHP. Но все они быстро приходили и куда-то уходили, оставив после себя кучу полуживых разрозненных островков готового кода. А PHP оставался и развивался, хоть и не в сторону усовершенствования языка. В итоге, мир получил мощную инфраструктуру веб-разработчика: любой маленький людишка может сесть за консоль и через Composer установить себе терабайт разных мелких и больших штучек под каждый чих.

2. Стабильность. PHP развивается, не отказываясь от прошлого. Это по-прежнему шаблонизатор, но в 2016 — еще и с надстроенными сверху этажами абстракции, которые по высоте обогнали все другие ЯП. Теперь на шаблонизаторе PHP может быть написан другой шаблонизатор, типа Smarty.

Недавно я встретил человека, который ушел из Java в PHP. Человек был вполне психически здоров, умен и востребован в мире Java. Тогда-то я и осознал, что архитектура в PHP на верхах уже очень хороша. И, что самое важное, в PHP уже можно писать все на верхах — о трудном детстве и деревянных игрушках PHP напоминают только разные странные операторы, ну и огромный костыль (или фишка) «магия» с этими нижними подчеркиваниями.

У меня вызывает уважение тот факт, что ребята все еще не плюнули и не переписали все с нуля, забыв о всех работающих проектах и людях, которые не хотят переучиваться.

3. Сообщество хороших парней. Нам, высокопассионарным парням, которые в учебе не дотягивали до отличников, но умели быстро мобилизироваться и самообучаться, PHP очень помог стать человеком. Тогда, будучи школьником, я бы не смог преодолеть порог языка со строгой типизацией, даже с хорошим учителем (это скучно и сложно). Как итог — я бы не стал программистом, не писал бы сейчас эту статью. Возможно, пил бы водку с наркоманами и проститутками, грабил прохожих. Благодаря PHP, я смог сам себе навешать лапши на уши, убедить себя, что программирование — это просто и интересно, сделать первый шаг, простой шаг, без типизации и ООП. Деньги пришли сразу, а все остальное приходит позже, на практике.

Cпасибо, PHP!

Автор: pistol

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js