Pull to refresh

Comments 263

Так ещё немного и php начнут использовать в качестве встраиваемого скрипт-движка вместо python или lua…
А почему бы, собственно, и нет?

Потому, что в php перед каждой переменной надо ставить знак доллара ))

Много долларов — это плохо?

В Perl, это нечто большее, чем просто обозначение переменной, — это обозначение скалярной переменной и часть системы типизации. На ряду с $, переменная может содержать впереди себя @ или % что означает соответственно список (массив) и хеш (ассоцированный массив). Что в частности позволяет например писать $h{@a} = @b — что означает: присвоение ключам ассоциированного массива %h списка значений заданных массивом @b причем список имён ключей соответственно задан масивом @a. И т.п.

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

мечта — красивый и краткий способ записывать ещё и генерики :)
Для чего в PHP сделали чтобы надо было знак доллара перед переменными писать, почему нельзя было сделать без него, как в других языках?
Действительно! А ведь это главная и единственная причина, почему PHP так ненавидят и закапывают уже 20 лет!

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

Во-первых, это был сарказм. Во-вторых, она мешает только тем, кто не пишет на PHP (или пишет редко). В-третьих, придираться к синтаксису языка — это последнее, к чему в принципе стоит придираться, и стоит ли вообще? Аналогично можно придираться к тому, что после Питона забываешь про точки с запятыми в других языках. Это всего лишь вопрос привычки
Во-вторых, она мешает только тем, кто не пишет на PHP (или пишет редко)

Тем, кто не пишет на php, необходимость ставить доллар перед переменными в php не мешает )). А вот тем, кто пишет — логичным образом мешает.


В-третьих, придираться к синтаксису языка — это последнее, к чему в принципе стоит придираться, и стоит ли вообще?

Если синтаксис языка требует ставить один и тот же симво перед каждой переменной и это не даёт никаких плюсов, то безусловно стоит.


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

Необходимость ставить доллары перед переменными мешает, когда пишешь код на php, поэтому ваша аналогия тут не применима.

Они нужны для парсинга. Нельзя просто взять и убрать.

после введения AST можно. но, как минимум из-за обратной совместимости такое изменение делать нецелесообразно.

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

Ок. Как отличить константу от переменной вне класса, если не ставить $?

Да собственно примерно так же, как и сейчас — в константе все буквы заглавные.

UFO just landed and posted this here

Всё это можно сделать, но обычно константы называют заглавными буквами, а переменные маленькими. Вообще перед константами же const стоит?

UFO just landed and posted this here

Так в чём проблема то? Где-то в коде константа объявляется и там понятно, что это константа, а не переменная.

UFO just landed and posted this here
Не мешает этот знак доллара, когда ты пишешь на PHP достаточное время. Особенно с нынешними инструментами IDE.

Остальные аргументы об это убиваются. Если основной язык — другой, и периодически приходится переключаться, то безусловно это вносит неудобства, именно поэтому я и привел в пример Python с его «точкой с запятой». Лично для меня было бы удобно не использовать точку с запятой, если бы я использовал этот язык в качестве основного, НО как только я переключусь на любой Си-подобный, мне это будет доставлять дискомфорт.

Но речь о другом.

В дискуссиях ниже, Вы сами же объяснили, почему $ появился в этом языке, а теперь представьте, что разработчики языка, на котором Вы пишете несколько лет, взяли и поменяли синтаксис.

Тут речь даже не об удобстве разработчиков, которые используют этот язык, а скорее о труде разработчиков, которые разрабатывали ПО для поддержки этого языка или даже тех, кто писал статьи-книги про этот язык.
поменяли синтаксис

если удастся сделать так что бы небыло коллизий с константами — то не вижу проблемы. Отказ от $ в названии переменной не будет вызывать большого нарушения обратной совместимости.


Но это уже что-то вроде "традиции". Никто уже это не будет фиксить. Да и нужды нет.

про то и речь, я не говорю, что это сложно. Более того, я не знаю — сложно или нет.

И как Вы правильно заметили «нужды нет», потому что на самом деле — это самые последние из «проблем», которые есть у PHP, а те коллеги, которые цепляются именно к $ просто не могут объяснить реальные проблемы, которые есть у языка (а они безусловно есть, как и у любого другого).

**Update**
речь не только про обратную совместимость языка. Представьте, что команде JetBrains нужно будет переделывать PhpStorm, убирая оттуда подвязки к $, к поиску по этому символу (который, как отметили в последних комментариях может сокращать список возможных значений при автозаполнении), и так далее для остальных IDE, гайдов, книг и т.д.

Новичок в 2020 году покупает книги, читает статьи по языку, который не имеет $ в синтаксисе, хотя везде говорится об обратном.
те коллеги, которые цепляются именно к $ просто не могут объяснить реальные проблемы, которые есть у языка

Видите, какое дело. То, что проблему никто не собирается исправлять, потому что к ней все привыкли — не делает её не существующей. И тот факт, что она существует, но нередко её существование не признают, или вообще называют проблему фичей, меня изрядно удивляет.

не делает её не существующей

но делает несущественной. Все же надо расставлять приоритеты. Ну и опять же — есть другие языки, не стоит использовать только один.

Не мешает этот знак доллара, когда ты пишешь на PHP достаточное время.

Ко всему со временем привыкаешь, это известный феномен. Вот, например, Робу Пайку не мешает отсутствие подсветки синтаксиса, и он не один такой.


Остальные аргументы об это убиваются.

Как об это убивается аргумент, что необходимости ставить доллар перед переменной объективно нет? Что это не несёт никаких плюсов и только увеличивает вероятность поймать туннельный синдром?


В дискуссиях ниже, Вы сами же объяснили, почему $ появился в этом языке, а теперь представьте, что разработчики языка, на котором Вы пишете несколько лет, взяли и поменяли синтаксис.

Если бы речь шла о том, что значок доллара больше не нужно ставить, я бы обрадовался.


Тут речь даже не об удобстве разработчиков, которые используют этот язык, а скорее о труде разработчиков, которые разрабатывали ПО для поддержки этого языка или даже тех, кто писал статьи-книги про этот язык.

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

Жесть конечно, но ведь круто
$p1 = 'Привет';
$p2 = 'Пока';
$property_name = $_GET['property'];
print($$property_name);

localhost?property=p1
Привет

localhost?property=p2
Пока

Попробуйте в другом языке через значение переменной обратиться к другой переменной по имени.

Попробуйте в другом языке через значение переменной обратиться к другой переменной по имени.

Возможность интересная, но для её реализации достаточно попросить пользователя поставить один доллар перед property_name, когда хочешь через неё обратиться к другой переменной.

#!/usr/bin/perl
$v = 'first';
$first = 'second';
print $$v;
UFO just landed and posted this here

основы языков программирования. У вас есть динамические языки (php, js, python, etc) и статические (C++, D, Haskell).


Статические — это значит что информация о типах доступна в компайл тайме. Динамические — только в рантайме.


В вашем примере нам неизвестно значение var. Существуют языки которые могут описать это типами что позволит проверить корректность в компайлтайме


type data = {
    foo: string
    bar: number
}

const locals = () => data
let v: keyof data | null = null
locals()[v] // можно проверить в компайлтайме

В теории это можно замутить на темплейтах, но зачем вообще так делать?)

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

В том и суть. Это сахар. PHP не заставляет задумываться что тебе нужно (массив, список, справочник или даже объект), Ты можешь изголяться как хочешь:


  • Объект в массив? Легко!
  • Цикл по объекту? Без проблем!
  • Извлечь массив в переменные(по ключам)? Всего 1 комманда.
  • Добавление свойств классу на лету.
  • Конкатинация по отдельному символу для избежания затыков уровня JS.
  • Полноценное ООП

Не язык, а мечта мага.


Но ещё хотелось бы увидить пару фишек, например из питона:


  • именнованая передеча переменных в функцию
  • удобный выбор диапазонна в массиве
  • ну и кудаже без многопоточности
UFO just landed and posted this here
Полноценное ООП

а дайте ка определение

Это Вы ещё Perl не видели
В QBasic "$" стоял после переменной строкового типа, это был суффикс, а не префикс.
Именно это и имелось в виду. Плюс в стандартных функциях, возвращающих строку, если я правильно помню.

Исторически сложилось. Делалось для того, чтобы было удобно вставлять переменные в строки. Тогда никто не предполагал, что php станет настолько успешным и развитым языком, что доллары перед переменными на самом деле будут мешать.

Совершенно непонятно, чем мешает знак доллара перед переменной. Может, объясните? Потому как мне не мешает, скорее даже наоборот.

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

Вводится одной рукой — не вижу неприятностей. К тому же, никто, вроде, не мешает использовать какую-нибудь раскладку, где доллар без шифта.

Вводится одной рукой — не вижу неприятностей.

Вообще не рекомендуется набирать одной рукой комбинации, которые включают в себя 2 и более символов. Но в общем и целом гораздо лучше вообще не набирать символ, в наборе которого нет совершенно никакой объективной необходимости.

не рекомендуется набирать одной рукой комбинации

А вот тут можно подробней? alt+shift тоже к этому относятся? А заглавные бувкы?

Alt+Shit двумя руками зажать не проще, чем одной из-за неудобного расположения клавиш, увы. Кроме того, как правило, нужно зажимать Alt+Shift и ещё какую-то кнопку и тут уже совсем не возможно нажать одной рукой не больше одной кнопки.


К заглавным буквам рекомендация относится без оговорок.

я чет не очень понял… зачем двумя руками если можно одной? Это как-то связано с нагрузкой на запястье? Купите себе нормальную клавиатуру может...

зачем двумя руками если можно одной?

Двумя, как правило удобнее и меньше нагружает руку. Для знака доллара это вполне себе актуально.


Купите себе нормальную клавиатуру может

Что порекомендуете?

Для знака доллара это вполне себе актуально.

да как-то не особо

макбуковская родная, ничего примичательного. есть поинтереснее варианты где удобнее рука лежит. Но именно $ набирать в целом комфортно.

На мой взгляд, код читается лучше. Всегда понятно, где переменные, а где что-то еще. Набирать, при этом, совершенно не напрягает. Ну и плюс выделение переменной даёт всякие парсинговые вещи, вроде подстановки переменной в строку.
Я был бы против того, чтобы его убрать.
На мой взгляд, код читается лучше. Всегда понятно, где переменные, а где что-то еще.

Если писать код в блокноте, то в ваших словах есть определённая часть правды. Но сейчас код пишут в основном в IDE, там, благодаря подсветке, таких проблем нет.


Набирать, при этом, совершенно не напрягает.

Субъективно, понятно, что не напрягает, а объективно есть необходимость набирать дополнительный символ.


Ну и плюс выделение переменной даёт всякие парсинговые вещи, вроде подстановки переменной в строку.

Нет, не даёт. Безо всяких проблем можно убрать необходимость ставить доллары перед каждой переменной в коде и, если в строке встречается знак доллара и после него переменная — вставлять эту переменную в строку.

вроде подстановки переменной в строку

"Some $var" //можно
"Some other {$this->var}" //можно
"use some {constant}" // нельзя

вот так появляется неконсистентность языка. И это много хуже.

так никто и не делал. исторически из перла перешло, куда из шелла :)
Ну классика же:
image
Похоже, после каждого «Нам нужны значки, чтобы пояснять, о чём речь!» приходит озарение «Постойте, слова и сами справляются».
шутка такая есть — в перле используется вся клавиатура :)

в руби вот нашли интересное применение символам…
замена для this например… имхо както нетривиально. вобще язык хиптерский получился

Я вот не понимаю этого шума вокруг знака $. Не припомню чтобы мне когда либо мешал этот символ.


Скажу даже больше. Некоторым не хватает $ в других языках. Довольно часто встречаю случаи когда JavaScript разработчики используют $ в имени переменных (сам так не делаю). Поначалу мне думалось, что это php программисты переносят свои привычки в js, но сейчас так пишут код даже чистые фронтендеры, которые php в глаза не видели. Возможно это просто последствия.


Хотя есть свой смысл в использовании $ в контексте js. Например, в следующем примере без контекста невозможно понять, bar это переменные с некоторым значением или название функции, а foo это название функции или ссылка на функцию.


foo(bar);

Следующие примеры более очевидны


foo($bar);
$foo(bar);
$foo($bar);

И не подумайте. Я не поддерживаю идею использования $ в js.


Сейчас набегут хейтеры и скажут, что это недостатки самого языка и писать надо на питоне)))

Ну, в JS долларом удобно отделять «обычные» переменные от объектов jQuery, например. Если, конечно, на проекте используется jQuery)

Отсюда, видать, растёт фобия к PHP: с долларов начинаются джунгли
Когда ещё фуллстеком был (сейчас бекендер), тоже в js через $ отображал где просто dom-елемент, а где с jQuery-обёрткой. Тот факт что это вообще элемент, а не что-то другое обычно ясно по названию.
Руководства нет готового. Но раз есть модуль под apache, то штатный способ встраивать php в свой процесс должен быть. Надо будет покопать исходники апача.
Честно, не хочется вникать глубже, но вот сходу нашёл:

aptitude show libphp7.0-embed

This package provides the library /usr/lib/libphp7.0.so which can be used by application developers to embed PHP scripting functionality.

The following extensions are built in: Core date filter hash libxml openssl pcntl pcre Reflection session SPL standard zlib.

PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML.

WARNING: The embed SAPI is experimental and there's no guarantee that the API/ABI will be kept compatible even between minor releases. You have been warned.
Может потому, что PHP — сломанное и и плохо продуманное #####?
Плохому танцору… Жизнь — боль. Нет во всех отношениях хорошего языка, везде есть проблемы. А ещё легаси для обратной совместимости, которое часто мешает.
Согласен, но я лично считаю, что это — один из худших языков программирования.

Раз, два, и т.д.

Конечно же, есть wiki.theory.org/index.php/YourLanguageSucks, но всё же видно, что у PHP недостатков очень много.
Ну это ваше личное мнение. А у кого недостатков нет? Не, ну серьёзно, кто-то когда-то начал собирать странности и особенности PHP, остальные подхватили и теперь такая мощная пропаганда, что PHP — гадость. Особенно радует, когда люди апеллируют к «фракталу плохого дизайна». Статье, написанной в мохнатые времена, когда в ходу была ещё версия 5.1, Laravel не сущестовал даже как проект, а Symfony был… ну не будем об этом.

Если вам не нравится этот язык, его экосистема и инфраструктура, ну не программируйте на нём. Делать вброс вида «php sucks», имхо, не стоит. Уж хотя бы обосновали бы мнение своим личным опытом, не опытом постороннего дяди.

Я искренне желаю вам получать удовольствие от работы с тем инструментом, который вам нравится и с которым готовы прожить остаток жизни (не сарказм) :)
Согласен, немного переборщил. :)
Поработал я как-то с джавистами… и передумал уходить с пхп без везких аргументов на то — проблемы они не в языке, а в тех, кто его использует.

И самое главное — как используют!
Кто-то жаву для веб-сервисов, кто-то пхп для GUI...

Почему-то у вас в примерах джава программисты адекватные, а пхпшники какие-то безумные.

А почему бы не использовать Java для веб-сервисов?

Реализовывал уже году в 2006. Привинчивалось к Delphi 7 ;))))

PHP закапывают уже лет 10 если не больше. А он всё живой.
Больше, однозначно больше. Когда я десять лет назад его только начинал изучать — его к тому времени тоже уже давно закапывали.
не меньше 20, с 1997, выход ASP.NET, котрый обещал похоронить пхп. Ну и дальше по списку хоронильщиков — РубиРельсы, Питон, Нода…
Пока что я вижу как PHP сам закапывает Ruby с его рельсами, а теряет разве что в специфичных местах, когда появляются лучшие инструменты. Микросервисы, к примеру. Однако, в статье о том и говорится, что над языком работают в сторону того, чтобы и эти задачи он начинал выполнять также хорошо.
В каких проявлениях вы это видите? Я лично не встречал историй перевода проектов с Ruby на PHP, а только наоборот.
это потому, что после того как оно написано на руби, переводить уже нечего :)
UFO just landed and posted this here
Знаете, есть такая прекрасная имиджборда Danbooru.
Все бы ничего, но:
1. она написана на руби
2. её хрен запустишь на своем сервере

Если бы она была написана на PHP — лично мне было бы гораздо проще разобраться, что именно не работает. А так в этом может разобраться только 1 человек — автор.
UFO just landed and posted this here
UFO just landed and posted this here
Iphone 10 с этим не согласен
Стоп, а миллениум я когда пропустил?
6 уже пропустили, не так же часто. Правильно выше написали — теперь только 9 пропускать.
UFO just landed and posted this here
Лучше все непростые. 7, 11, 13…
UFO just landed and posted this here

Диковатая мысль в голове — трансляция в WebAssembly. И тогда PHP начнёт просачиваться в браузеры :)

> Known issues
>
>Memory leak

Их тестовая страница стабильно выгружает мне Chrome Android
Почему же диковатая? Сам давно копаю на досуге в эту сторону.
Может быть пора наводить порядок в именах bundled функции? Добавить новые с унифицированными именами и задепрекейтить старые в 7.3-7.4
Не не. Я спустя несколько лет наконец запомнил порядок аргументов в array_map и array_filter. Пусть оставляют как есть.

хотите лайфхак как быстрее запомнить?


в array_map второй аргумент на самом деле variadic. А в reduce/filter — нет.


function zip(array ...$arrays) {
    return array_map(null, ...$arrays);
}
zip([1, 2, 3], ['a', 'b', 'c']); // [[1, 'a'], [2, 'b'], [3, 'c']]

Зачем вообще запоминать, если Шторм подсказывает?

Потому что всё равно будет мини-запинка при каждом обращении к такой функции. Да, Шторм покажет, но это всё равно чуток собьёт плавный процесс написания кода. Совсем чуток, но собьёт. А таких запинок может быть очень много раз за день. Может и небольшая проблема, но во многих других языках можно писать вообще не спотыкаясь об такое. Соответственно писать приятнее.
очень много использований array_filter/array_map в день — признак плохого дизайна кода. Неплохо было бы поревьювить код и подумать — может пора юзать объекты вместо массивов?

И получим мы массив объектов, который нужно так же обрабатывать. Не, можно конечно запилить коллекции, но там уже внутри коллекции будет filter/map…
А еще нужно не забывать про легаси, которое нельзя вот сразу взять и сделать идеальным, вот и приходится городить… Ну и про хайлоад не стоит забывать, где оборачивание строки в объект чтобы было удобнее слишком жирно.

признак плохого дизайна кода.

мне кажется в вашей логической цепочке пропущены важные штуки. Если объекты будут использоваться вместо массивов (коллекции например) как это избавит код от map-ов и редьюсов? Что будет внутри вместо?


Словом, поясните свою мысль.

Так там кроме array_filter/array_map просто тьма такого.

Вот только сегодня столкнулся. Парсю URL:
$parse = parse_url($url);


Далее преобразовываю параметры в массив. По аналогии написал бы так:
$query = parse_str($parse['query']);


А правильно вот так:
parse_str($parse['query'], $query);


Всё это нужно либо помнить, либо вникать в подсказки IDE. А это хоть на пару секунд, но выбивает из потока. Писать уже не так приятно.

С другой стороны в современных PHP-проектах всё равно гораздо больше работы с библиотекой фреймворка или с новыми возможностями языка, где всё структурировано и стандартизировано, чем со стандартной библиотекой. Поэтому считаю подобное скорее досадным легаси, чем фатальным недостатком.
Подстройте свой поток под обстоятельства :)
UFO just landed and posted this here

зачем, в статье ж говорится что будет прелоадинг кода, можно просто на php как композер пакет.

UFO just landed and posted this here
но никто не пишет, все просто ноют.
UFO just landed and posted this here
Напиши свою библиотеку и все. Я например для массивов и строк себе такую сделал.
PHP хороший язык не потому что академический, а потому что он имеет кучу полезных в работе расширений, которые можно использовать сразу из коробки. Пока этого не поймут остальные PHP будет спокойно наблюдать как гаснут звёзды. (Если конечно не найдутся «добрые» люди и не добавят туда вместо практически полезного, академически нужное: шаблоны, генерики, метопрограммироване, монады и еще что-нибудь чтоб «как у всех»)
ps: Я бы еще добавил в стандартную комплектацию phalcon т.к. это не затратно, быстро и очень близко к тому для чего это язык применяют.
UFO just landed and posted this here
Ну, драгоценный камушек уже потускнел чутка например. Уже нет такого хайпа вокруг него, как был на старте.
UFO just landed and posted this here
Яваскрипт — не конкурент php, скорее это общепринятый симбиоз.

Так оно и было, пока фракция javascript не выпустила nodeJS.

Мне кажется они и сейчас не конкуренты. PHP и Node применяются для разных задач по сути. Как-то тут выходила статья «PHP создан чтобы умирать» — пошутили и ладно, но с другой стороны это даже «плюс» PHP, то что каждый процесс создается заново.
PHP и Node применяются для разных задач по сути.

Раскройте свою мысль. Где, где применяют php, применить node будет ошибкой?

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

Я не хочу с вами поспорить, я хочу понять вашу точку зрения. Однако, хочу отметить, что для того, чтобы констатировать, что php и node сейчас не конкуренты, с вами должно согласиться подавляющее большинство программистов. Иначе эти программисты будут применять эти инструменты для решения одних и тех же задач.

Моя точка зрения была изложена в самом начале: «Мне кажется они и сейчас не конкуренты» :)

В целом каждый пользуется тем, чем ему удобнее решить поставленную задачу. Если вы умеете это делать на С++, то почему бы и нет? :)
Плюс в PHP есть отличная экосистема для создания веб-бэкэнда, которая значительно масштабнее, чем в любом другом языке. Хорошие фреймворки (Symfony, Laravel), библиотеки, сообщество, можно быстро получить ответ практически на любой вопрос. Для меня отсутствие нормальной асинхронности — последний рубеж, который не позволяет использовать PHP вообще для всего бэкэнда.

С другой стороны, PHP уже проспали микросервисы (да и обработку Websockets без геморроя на PHP не сделать), возможно через какое-то время проспят ещё какой-нибудь юзеркейс.

А по поводу того как лучше писать, if (number in [1,2,3]) или if (in_array($number, [1,2,3])), то первое конечно писать приятнее, но недостатки легаси — это такая мелочь по сравнению со всем остальным.
Ну, у меня есть сервис, у которого несколько PHP-демонов асинхронно выполняют несколько задач (пробовал и треды и процессы), «общаются» между собой вне зависимости от того на каком сервере они находятся и т.д. и т.п.
Все в продакшене уже почти год и единственное, что меня не устраивает — это то, что у RabbitMQ нет возможности получить список задач очереди или включить защиту от дублей, но к PHP это отношения не имеет.

Сначала хотел использовать ноду, но как оказалось на тот момент она все равно была однопоточная (для реальной многопоточности нужен был какой-то геммор), плюс… ну нафига мне плодить разные языки в проекте? Все на PHP — и вся кодовая база едина, очень удобно.

P.S. Вообще «нормальную» асинхронность найти очень сложно, как мне кажется. Потому как сама по себе асинхронность сложна и всегда будут какие-то неудобства.
Плюс в PHP есть отличная экосистема для создания веб-бэкэнда, которая значительно масштабнее, чем в любом другом языке.

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

Не весь мир — тонкие API и микросервисы.

слово "тонкие" тут не уместно. Ну и опять же, JS прекрасно српавляется с рендрингом старых добрых страничек) порой даже лучше чем php.


Вообще по хорошему спор кто лучше тут не имеет смысла.

UFO just landed and posted this here
по версии TIOBE руби 11 вот прямо сейчас
эта, а че это вы перл закопали то? Вон большие проекты на нем люди пилят, букинг ком (внезапно) внутри вполне себе на перле.
UFO just landed and posted this here
UFO just landed and posted this here
О да, в контексте упоминания предзагрузки классов сразу думается про phalcon. Не думаю, что его включат в коробку ибо сейчас он и так как расширение ставиться без проблем.
Из действительно хороших вещей в PHP, пожалуй, только низкий порог вхождения. Еще популярность — но это косвенный фактор, исторически вытекший из низкого порога.

Включение популярных расширений в ядро языка — спорное решение. С одной стороны хорошо, что при выходе новой версии авторы проверяют все на совместимость. С другой — при наличии менеджера пакетов (как npm/nuget/gem/...) гораздо легче обновлять пакеты на актуальную версию, не завися от хостера.
а я думаю что в PHP плох только синтаксис, но в остальном он уделывает все скриптовые языки.
Перечислять плохо сделанные части PHP можно очень долго — статья довольно старая, но большинство вещей из нее все еще актуальны.
Серьезно? Может быть заглянем в ядро Symfony 4, например? В 2008 может так и было, сейчас все усложнилось на порядок, буквально.
Причем тут ядро Symfony?
Сегодня никто не пишет без фреймов и половина из них по сложности выше среднего. Вы начинаете про низкий порог. Какой еще низкий порог?
Не надо мешать порог вхождения в конкретный язык и ваше представление о современной веб-разработке в целом. Для PHP он действительно ниже, чем для других backend-языков.
«никто» — это слишком ультимативное заявление.
Симфони это исключение из правил. Мне кажется они там придумывают новые слои абстракции совершенно не задумываясь нужно ли это комуто вообще. Другое дело Ларавел — прочитал несколько статей «быстрый старт», открыл справочник классов и методов и пошел писать.
Мне кажется они там придумывают новые слои абстракции совершенно не задумываясь нужно ли это комуто вообще.

А можете пример привести? По-моему конечного пользователя все эти абстракции не касаются

Поленюсь, уж простите, тащить исходники, но мне как человеку, который всегда старается сначала разобраться, как именно работает инструмент перед тем, как использовать, разбираться в исходниках Symfony — сущее наказание. Для чего так всё переусложнено — понять невозможно.
UFO just landed and posted this here
разбираться в исходниках Symfony — сущее наказание.

для того что бы разобраться как работает симфони не обязательно копаться в исходниках. Главное в начале уловить концепты основные.


p.s. использую симфони 6 лет, это лучшее что есть в php, и там все плохо.

Для меня самой большой проблемой является то, что Сифмони заставляется меня безукоснительно следовать СОЛИДу. СОЛИД это конечно хорошо, но реальная жизнь ведь намного сложнее. Я так и не разобрался как мне дернуть чтото из базы, если я нахожусь не в контроллере. Нужно создавать какието менеджеры, контейнеры, те в свою очередь хотят чтоб я им инъектил чтото и тп. Документацию опять же на подобные действия хрен найдешь, потому что это же не по СОЛИДу! В ларавеле у меня таких проблем не было, я чувствовал себя полностью свободным, в том числе и в написании говнокода, без которого в реальной жизни очень сложно приходится.
Сифмони заставляется меня безукоснительно следовать СОЛИДу.

Я так понимаю что вы не очень понимаете что такое SOLID.


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

Вы можете в симфони так же как и в ларавель херачить все в контроллерах. Так собственно половина людей делают. Солиды — никто не заморачивается по этим принципам. А если кто-то заморачивается и заставляет вас классы-менеджеры делать — он просто не понимает что делает.


без которого в реальной жизни очень сложно приходится.

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

Это вы не поняли мой пример :). Я уже точно не помню свой юзер кейс. Я только помню, что гуглил как же мне получить чтото из базы, везде были примеры того как это делается в контроллере, потому что контроллер уже имеет встроенный менеджер сущностей, который дает доступ к базе. Если у тебя какойто свой левый класс, то хрен тебе — надо танцевать с бубном и инъекциями, чтоб этот менеджер сущностей организовать.
контроллер уже имеет встроенный менеджер сущностей, который дает доступ к базе

контроллер (на тот момент, сейчас это не рекомендуется) имеет доступ к контейнеру зависимостей. в контейнере собственно все лежит. Там лежит менеджер сущностей (штука которую тоже не стоит так вот в открытую юзать но это детали), которая позволяет достать репозиторий (коллекцию сущностей) и там уже можно забрать из коллекции то что надо. Это не сильно отличается от Model::find() просто контроля больше. Ну и да, вас никто не заставляет юзать доктрину с симфони, ставите рядом любую AR библиотеку и радуетесь.


надо танцевать с бубном и инъекциями

я просто надеюсь что мне не придется сталкиваться с проектами написанными вами.


И да, к SOLID это все никакого отношения не имеет. Они про то как делать что бы было проще менять. Если вам не проще — вы что-то делаете не так. И если для вас проще бездумно собирать код из документации — сами понимаете какой будет эффект.

Нет, это сильно отличается. Вы опять ничего не поняли. У меня нет никакого контейнера, нет никакого менеджера сущностей. У меня просто есть нулёвый левый класс, в котором мне нужно написать какуюто магию. И тут симфони вместо того чтоб просто дать мне нужный инструмент для работы с базой, начинает мне заливать про контейнеры и менеджеры, которые в моем учебном говно проекте мне даром не нужны. Это называется высокий порог вхождения. О чем собственно речь и была в начале ветки.
Это называется высокий порог вхождения.

это называется низкий уровень разработчиков.

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here

А с autoconfigure и конфиг писать не надо. Просто говорим в конструкторе какие зависимости нам нужны.

UFO just landed and posted this here
Несколько расстроило то, что в 8-ке хотят реализовать асинхронщину в рантайме лишь частично. Я не понимаю — это вообще как? Часть ввода-вывода на низком уровне сделают неблокирующим, часть блокирующим? Или добавят ворох функций «на _nb», которые будут точно неблокирующими? ИМХО лучше сразу сделать нормальные зелёные потоки, в которых все операции будут выглядеть блокирующими, а в действительности при IO будет передаваться управление циклу событий / планировщику зелёных потоков — тогда не нужно будет придумывать новые функции, а просто старые будут на низком уровне делать только неблокирующий ввод-вывод (ну или блокирующий, но только в режиме единственного зелёного потока, что сложнее).
Ни слова про asynс-await.

А раздел "асинхронность" для кого? async/await в целом это лишь сахар, корутины есть, не хватает лишь event loop-а из коробки и промисов (что бы стандарт а не как в ноде первые 5 лет). Без этого нет смысла говорить о добавлении сахара.


Более того, посмотрите на тот же amphp:


try {
    $gh = "https://github.com/";
    $response = yield  $http->request($gh);
} catch (HttpException $e)  {
    // handle error
}

это код который вы можете писать уже сегодня. Проблема в том что область применения ограничена так как стандартные функции для работы с I/O все еще синхронны и людям приходится делать все с нуля.

Дайте дженерики хотя бы стандарт в док коменты. А то с промисами совсем беда.

Это я так скоро смогу писать игры не слезая с ПХП?
Я вот думаю. Если PHP все же выкарабкается из своей ипостаси «только для говнокодеров», кто главные претендент на то, чтобы занять его место? :)
не выберется. Слишком большой BC break. Однако perl в целом в узких кругах считается хуже)
Массовый пользователь про Перл уже и не помнит. Все больше Java, JS, Python, C[++,#] и т.п. :)
Надо из них выбирать. Я ставлю на JS, слишком много шуток вокруг него из серии «угадай, что этот код делает в JS»…

З.ы. ну и про бесконечные фреймворки, конечно…

JS как язык конечно говно, но развивается он намного лучше php. Особенно со всеми этими бабелями и т.д. Ну и есть typescript/flow и webassembly.


честно сказать я получаю больше удовольствия от написания кода на js чем от php. Инфраструктура решает.

Скорей всего постепенно массово на смену js придёт typescript а там уже особо не «говнокодиш»
Не факт: Фейсбук довольно активно пилит его прямого конкурента в виде Flow и довольно интересный проект Reason.
Быть может ещё что-то придумают… Одним словом Js сейчас идёт в сторону типизации и стандартизации. Я уже сам редко пишу на «чистом js», как бы не сказать что практически не пишу))
По мне в том-то и проблема JS: слишком много параллельных решений. Тот же PHP, он один. Не перепутаешь. Порог вхождения ~= прочитать любую книгу по PHP.
А какой порог вхождения в JS? Серверный JS, фронт? Ноды, редуксы, реакты, ангуляры, тайпскрипты, байбелы, йарны, прости, Господи… Не ясно за что хвататься.
Мало того, что ванильный JS постоянно развивается, так параллельно еще и куча наворотов.

З.Ы. и это при том, что я в целом люблю JS. :D
А какой порог вхождения в JS

ниже чем вы можете себе представить. Тут как с php. порог входа низкий, ограничений мало, и пошло поехало.


Не ясно за что хвататься.

каждый день люди спрашивают тупости типа "путь изучения php" и всякий раз в топе будет вопрос "поучи симфони/ларавель/yii". Я это к тому что язык тут не важен, проблема с комьюнити. У JS с этим пока все же лучше но не намного.

Ноды, редуксы, реакты, ангуляры, тайпскрипты, байбелы, йарны, прости, Господи…

Почему тогда про php не говорите, что у него есть всякие симфони, доктрины, ларавели, смарти, компоузеры и еще много аналогичных страшных слов?
Потому что этот зоопарк на PHP всё-таки меньше, и он не так быстро меняется. По сути для базовой разработки на PHP нужен только менеджер зависимостей (в PHP общепризнан Composer, не приходится выбирать из зоопарка) и фреймворк (ну здесь как и в JS три общепринятых лидера плюс набор менее популярных фреймворков). Ну ещё выбрать шаблонизатор из Smarty, Twig или Blade, да и то не факт, сейчас модно делать шаблонизацию на стороне фронтэнда. Ну ORM ещё выбрать, но это нужно не во всех проектах, и как правило ORM привязана к фреймворку. И это всё, остальное подбирается уже под частные задачи.

Не нужно заботиться ни о диалектах языка (TypeScript или нет?), сборщиках, браузерных API и т.д. PHP развивается достаточно понятно, фреймворки тоже уже давно устоявшиеся. Плюс такое ощущение, что в JS зоопарк технологий меняется с куда большей скоростью.
Потому что этот зоопарк на PHP всё-таки меньше

ну в js тоже есть свои стандарты. И как-то в php среде не принято делать красивый пост на медиуме о новом крутом фреймворке. Хотя на рэддите раз в неделю кто-то выкидывает свои творения.


и он не так быстро меняется

я вижу в этом больше негативного нежели позитивного. При таком большом количестве php разработчиков так хреново развивать экосистему — это о много говорит. Да, в js комьюнити проблема другая — много недовелосипедов которые пиарятся неплохо, но… с этим можно смириться хотя бы.


В целом как по мне будущее не за "язык А лучше" а за возможостью более гибко их юзать совместно.


выбрать шаблонизатор из Smarty, Twig или Blade

в js комьюнити все тоже выбирают только из nunjucks/pug/mustash. Есть еще, но это не мэйнстрим. Так же как и для php есть куча разных о которых вы даже не подозреваете.


ORM привязана к фреймворку.

так только в плохих фреймворках. Ну и всеравно нормальных ORM для php нет. Разве что доктрина, и то не оч.


Не нужно заботиться ни о диалектах языка

я спокойно озабочусь диалектами если они позволят мне типы выражать без кастылей.


сборщиках, браузерных API и т.д.

вы ж под бэк писать собрались, зачем вам бандлеры?


фреймворки тоже уже давно устоявшиеся

стогнация?


такое ощущение

ощущение такое есть но… по факту этого нет. Тем более давайте будем честны, если вы возьмете именно серверную часть — там так же все давно устоялось. Есть express, koa и т.д. Не нужно просто всю экосистему JS в одну кучу смешивать и все будет куда проще.

Я изначально отвечал на
Ноды, редуксы, реакты, ангуляры, тайпскрипты, байбелы, йарны, прости, Господи…
, а это в основном про фронтэнд. Я думаю что на бэкэнде и для PHP и для Node.js ситуация устоялась не потому что болото и экосистема херово развивается, а потому что под все типовые задачи уже есть хорошие инструменты. В то время как для современного фронтэнда vanilla js совершенно недостаточно, и приходится придумывать кучу надстроек чтобы это решить.

ну если проанализировать ситуацию с фронтэндом вдруг тоже окажется что подходы устоялись. Дальше весь вопрос в мелочах — типа где делать diff стэйта, между приложением и UI или на уровне DOM и т.д.


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

PHP станет асинхронным! Все Node.js программисты начнут терять работ )
Господя. Может кто-то внятно объяснить зачем сейчас использовать ПХП, когда есть Go и нода, которые намного быстрее и в 100 раз проще в развертывании на продакшене?
Как минимум PHP объектно-ориентированный.
Одно дело написать микросервис на Го, другое — крупный энтерпрайс с миллионам строк кода. Там будет столько говнокода, что легаси проекты на PHP вам позавидуют
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Потому что PHP очень плохо подходит для микросервисов. Если в PHP появится нормальная асинхронность — я с радостью перейду с Node.js на PHP. Хотя бы потому что неудобно писать часть бэкэнда на Node, а часть — на PHP. Приходится дублировать библиотеки и т.д. По скорости как я понимаю особых преимуществ Node.js уже не даёт, а насчёт корявого легаси — это ещё можно поспорить где его больше, в Javascript или в PHP.
UFO just landed and posted this here
Хотя бы потому что это решения не из коробки. Swoole — это вообще расширение, т.е. с каждым переходом на новую версию PHP мне нужно будет смотреть, подходит ли Swoole для этой версии, обновился ли?
UFO just landed and posted this here
А есть какая-то прямая связь между асинхронностью в PHP и микросервисами?
nginx/apache + php-fpm при правильной конфигурации покажет соизмеримые результаты с нодой.
PHP объектно-ориентированный.

классо ориентированный*


Что до Go — у него есть структурный тайпинг и в целом я бы еще с вами мог поспорить чья модель выполнения больше вписывается в концепцию ОО. Как по мне Го тут только в выйгрыше (просто концепт объекта меняется). И да, и у того и у другого нет дженериков.


Там будет столько говнокода

Увы правда в том что в любом проекте на миллион строк будет говнокод. Такова природа энтропии. И го в этом плане опять же выигрывает.

Одна из причин, это когда на php запускаешь проект быстрее, пусть и с плохим кодом — главное работает! А вот если заработает, то можно и заплатить другим, чтобы переписали на «правильный» язык.
К сожалению, большинство проектов не запускается, но это никак не уменьшает количество кода на php, скорее прибавляет :)
Потому что больше людей на нём работает, потому что есть много готовых решений, потому что на любой вопрос скорее всего уже есть ответ, потому что просто отлаживать и поддерживать. Больше из основного я не вижу.
UFO just landed and posted this here

ИМХО 3 странички с базовой логикой на java, если не постоянно с ней работаешь, будет сложней, не говоря уже о том, что "условно нормальных" рецептов nginx+tomcat не нагуглить за 5 минут (не говоря уже о случаях, когда вдруг задеплоенный war валит сервер при старте выдавая кучу ошибок)

может быть просто надо забыть о сервлетах как о страшном сне?

Можно но тогда будут другие вопросы :) ведь банальной возможности скриптового php, когда можно смешать html+php и скормить интерпретатору установленному 1й командой практически в любом дистрибутиве, java, вроде, не имеет?, или я что-то пропустил?
p.s. специально "поспрашивал" яндекс с гуглом, везде jetty, tomcat и куча xml-ей в ide

> или я что-то пропустил?

github.com/reljicd/spring-boot-blog — ну вот посмотрите. Как по мне не сложнее всяких там ларавелей и симфони и при этом не php.

Ну а штуки где закинуть файлик по ftp и т.д. в коммерческой разработке должны умереть (их можно заменить другими вещами где не надо код писать вообще).

Так мы про 3 странички с базовой логикой для не владеющего java или про заказную коммерческую разработку (которая может угробить бизнес идею ещё до начала работы?), у меня есть перед глазами пример бизнес который появился только за счёт того что был php, в котором было не сложно разобраться знакомому владельца. При этом стоимость "коммерческой разработки как должно быть" никто бы оплачивать не стал :)

повторюсь — для трех страничек обычно не нужен даже php.

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

Мне нужно было сделать сайт по объявлениям, очень быстро. Набрал в гугл php script classifieds — получил кучу ссылок. Рабочий полностью сайт поднял за 1 час.

Набрал в гугл go script classifieds — выдает РНР решения.
Набрал golang script classifieds — нет РНР решений, но вижу набор не потребных ссылок.

Я не знаю есть ли готовое решение на GO, может оно и есть, тогда можно сказать, что гугл виноват. Но подозреваю что его все же нет.

Представьте что за эту работу я получил 5000 долларов. На РНР я заработал эти деньги за 1 час, на GO — неделя, месяц?

Профит?
Да я не спорю, что делать сайты (интернет магазины, блоги и прочее) удобнее и быстрее на пыхе, но зачем тогда все эти нововведения 8й версии, кому они нужны? Если нужно сделать какой-либо высоконагруженный сервис, то пыха здесь никак не подходит из-за низкой производительности и отсутствием многопоточности (про сторонние костыли я молчу).
Аналогичная практика жизни. Когда нужна быстро заработать то php «собрал из палок и г..», а когда нужно сделать качественный продукт с бледжеком и ш… то node, java в зависимости от задачи
Профит?

всегда было жаль клиентов которые платят кому-то $5K/h за скаченный скрипт и потом страдают с тем что бы кто-нибудь это дело потом поддерживал.

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

Я отвечал на конкретный вопрос — почему люди до сих пор выбирают РНР, вы куда-то не туда данную ветвь дискуссии повели.

В моем конкретном примере 5к заработано за 1 час работы, сделать нужно было быстро. Заказчик был впечатлен оперативностью. Далее был подписан контракт на поддержку и развитие проекта и никакой боли от этой поддержки и развития нет. Скрипт который был выбран вполне себе хорошо спроектирован и нормально написан на РНР.

Если проект в будущем взлетит и будет приносить 1млн в месяц, то уже можно будет нанять команду гошников или питонистов, которые радостно всё за год перепилят и на которых будет не жалко тратить заработанные деньги. А можно будет поступить по другому — потратить лишние N-к денег на дополнительные бэкенд сервера под РНР нагрузку, что опять же будет дешевле той самой команды питонистов или гошников.

Чтобы уж совсем все по полочкам разложить то расскажу еще одну историю. В предыдущей моей конторе ребята переписывали систему (кажется с питона) на GO. Делали они это 2 года! В итоге вместо 10 серверов они смогли тоже самое на 1-ом серваке развернуть. Только не помню уже точно детали, но кажется изначально дело было не в питоне, а криворукости тех питонистов, которые изначально написали систему. Можно посчитать сколько они бабла на программистов потратили за 2 года, там их около 5 человек было и когда это все добро окупится.
вы куда-то не туда данную ветвь дискуссии повели.

вы предложили поделиться своим опытом сравнения go и php. Который по сути заключается в "под go не нашел готовый солюшен, под php нашел и впарил клиенту за $5K то на что ушло час работы". На том все сравнение и заканчивается. К чему этот пример? К тому что клиенту пофигу на чем проект лишь бы работало? Так никто с этим и не спорит.


В вашем примере нет никакого анализа выбора инструмента под задачу. просто наброс. Почему изначально рассматривали go если задача настолько простая что найдется готовая система на php, которую можно не допиливая поднять за час? Какого-либо кастомного дизайна не было? Неужели клиенту было достаточно того что идет из коробки, или вы упростили рассказ?


то уже можно будет нанять команду гошников или питонистов, которые радостно всё за год перепилят

и весь этот год проект не будет развиваться? или мы закончим тем что у нас будут паралельно пилиться два проекта и один просто умрет (скорее всего тот, который еще не на продакшене). Или вам понадобится команда которая умеет и в php и в go, которая будет выстраивать пытаться делать более модульную архитектуру (присловутые микросервисы) в попытке планомерно перевести проект на go.


Обычно это "окупается" когда реально нет другого выхода. И обычно так делают не для оптимизации производительности (потому что маленький процент задач будет страдать из-за производительности php, 90% всех проблем можно решить внедрением сервера поверх php приложения, что бы то не умирало, и то для этого само приложение уже должно быть чуть получше чем среднестатистический мусор).


Мне не встречались ситуации, когда описанное вами было выгодно. А где это было чаще диктовалось не за счет рассудительного cost/benifit анализа, а скорее как крик отчаяния.


В итоге вместо 10 серверов они смогли тоже самое на 1-ом серваке развернуть.

2 года работы команды разработчиков намного дороже 9-ти лишних серваков. А потому вопрос — зачем они там что-то переписывали? Перепись была постепенная (то есть инкрементно на продакшен выкатывались новые фичи и была уже смесь python и go)? Или просто развлечение на 2 года?


У меня были ситуации когда нужно было интегрироваться с другими продуктами (например — после покупки одной компании другой компанией), где использовались какие-то кастомные решения. В этом случае были чуть другие стратегии. Но полная перепись это всегда провал (либо много лишних денег, в этом случае не мне судить).

Вы ограничиваете анализ для выбора технологий исключительно преимуществами технологий и не видите другой стороны. Я не делал выбор на основании того что тут быстрее работает, меньше проблем с памятью будет. Для меня анализ был простым — заработать 5к за 1 час или 5к за 3-6 месяцев работы. Плюс заказчику нужно было прямо вот как можно быстрее. Я сделал выбор в сторону 5к за 1 час. Ну ОК, вы с этим похоже уже и не спорите.

В тут комнду на GO набирали просто хороших программистов, многие были без опыта GO, но с желанием писать на нем, кто-то вообще без опыта в нем, но в процессе все его освоили. Делали инкрементально, не переписывали с нуля, а постепенно пошагово меняли куски проекта, поддержкой Питон кода тоже занимались все это время.
Для меня анализ был простым — заработать 5к за 1 час или 5к за 3-6 месяцев работы

И причем тут php vs go? По вашим критериям побеждает тот стэк технологий, под который подберется более качественное решение. И внезапно может оказаться что побеждает в этом конкретном случае вообще python (первое что нагуглил что получше чем страшные форки вордпресса и прочий ширпотреб на php из топа выдачи).


Изначально вопрос стоял о разработке гринфилд продуктов, а не "бложик поднять". Вполне себе живой вариант делать MVP вообще на google spreadsheets + zapier, и прочие дикие комбинации призванные убрать необходимость вообще свой сервер держать.


А потому я повторюсь — к чему ваши примеры если они вообще ничего не говорят о предмете дискуссии?


многие были без опыта GO, но с желанием писать на нем

то есть причина для выбора технологии — разработчикам было скучно и они решили поучить Go? Я не осуждаю такой подход — иногда это неплохой способ мотивации людей оставаться, но с точки зрения бизнеса плюс тут только в том что можно будет проще искать людей хайповыми технологиями.


Опять же этот пример лишь говорит о том, что ничего вы не выбирали осознанно. Сильно сомневаюсь что был хоть какой-то профит от перехода с python на go. Если это позволило проще разработчиков искать — хорошо, но практика показывает что найти адекватного go разработчика не проще чем найти python разработчика. А в связи с хайповостью еще и фильтровать нужно больше.

И причем тут php vs go?

при том что вопрос изначально был почему люди выбирают это говно РНР? На него я и отвечал, приведя в пример свой случай из жизни.

я по причине хайповости хотел сделать изначально на GO и проимпрувить скилы за чужой счет, но выбрал в итоге РНР, потому что это было быстро

по-моему вы вообще далеко ушли дискуссии и вопроса, с которого она в этой ветке началась

найти адекватного go разработчика не проще чем найти python разработчика


я вообще-то написал, что там просто искали просто хороших разработчиков, у некоторых вообще не было опыта на GO, но было желание (возможно даже у всех не было этого опыта, т.к. это происходило еще тогда когда GO только набирал свою хайповость, про которую вы говорите). Выбор был сделан тим лидом команды.

Почему он выбрал GO не скажу, но тим лид в той команде, который собственно и сделал выбор именно в пользу GO пишет на всем, что шевелится. И, кстати, испытывает ненависть к РНР и давно уже его не использует. Проект был на Питоне, его нужно было переделывать, вот и переделали сразу на гоше.
это говно РНР?

в вашем случае вы выбирали не язык а готовое решение. Не важно на каком языке оно будет. "час работы" -> только конфигурация, никаких изменений в исходниках. А шаблончик подправить можно хоть на хаскеле.


и проимпрувить скилы за чужой счет

добавлю — жаль клиентов которые работают с такими исполнителями

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

А если бы было такое же готовое решение на go и я бы также заработал 5к за 1 час вам бы было жать клиента? Или вы бы мне рукоплескали? За вашей жалостью какое-то другое чувство скрывается.
UFO just landed and posted this here
Да нет, вы похоже тоже сути не уловили, иначе вы бы возможно привели в пример saleor (сильно не изучал вопрос, первое что нашлось в гугле), а не джанго, тогда бы я возможно не спорил. Хотя первый взгляд на него говорит мне о том, что не богатый там функционал, нужно смотреть.

На пайтон джанго вам нужно будет модели создавать, разрабатывать структуру базы, продумывать ее. В моем случае под каждый тип объявления формы кастомизировать. Для автомобилей есть объем движка, для недвижимости есть объем площади и т.д. и т.п. Вы это за 1 час сделаете на пайтон джанго? CMS назовите мне, которая на пайтоне все это даст мне за 1 час, я попробую.

За час у вас будет админка и авторизаци и только.

У меня за час был готов сайт с админкой, авторизацией, всеми типами объявлений, форм, кастомизациями, статистикой, спам фильтрацией, премиум объявлений, платежами и прочим. Единственное, что действительно пришлось допилить — это переделать поиск с MySQL Full text search на sphinx. Я уже выше писал, что скрипт нормально написан, я в нем легко разобрался и переделал поиск на Sphinx за 1 вечер. И это не прототип был, а готовый сайт по объявлениям, который на следующий день был вылит на хостинг.
UFO just landed and posted this here
ну вы дискуссию то почитайте всю

я набрал в гугле «php classifieds scripts»
скачал скрипт, установил за 1 час, все готово

тот же самый запрос с упоминанием GO не дал результатов, т.е. задача за 1 час не решается

тот же самый запрос с Python кое-что показал мне, возможно можно брать упомянутый мной выше saleor

а отвечал я на вопрос «почему люди выбирают РНР вместо GO или ноды?» Я на него и ответил исходя из своего профессионального опыта.

С удовольствием бы сделал тоже самое на GO, если бы ставка была 5000к в час. И еще бы выбирал технологии с недельку за те же деньги.

Вообще запросы с ГО и Питон мне зачастую выдавали РНР решения. Ну может и правда гугл виноват.
UFO just landed and posted this here
Это как сайт авито или гумтри сделать.

Я не утвержадю, что оно должно находиться, но для РНР находится. И у меня была задача сделать такой сайт. И это мой ответ на вопрос — почему люди выбирают РНР вместо…
На счет $ в переменных выскажу такое мнение. Он не мешает — он помогает! Глаз сразу цепляется, сразу точно видно где переменная, а где нет. Кроме того автокомплит сразу ищет по переменным, а не выдает километровые списки.
Вообще-то это сделано в первую очередь для интерполяции строк (то есть подстановка значений переменных внутри строк). Чтобы парсер за доллары хорошо цеплялся. А то, что за них ещё и глаз цепляется — приятный бонус.

ну и еще что бы константы от переменных отличать. Дизайн php как языка до версии 5.3 в целом был весьма стихийный. И не стоит искать более глубокий смысл в $ кроме как "весь синтаксис можно было описать регуляркой в былые дни без этих ваших лексеров и AST".

О, константы в пыхе — это отдельная история со своим сюжетом. Слово «стихийно» — это очень и очень мягкое описание констант.
Выскажу непопулярное мнение, но у того же С++ синтаксис намного хуже, чем у PHP. Однако никто не бежит его из-за этого хоронить.
Тут скорее зависит от того, кто с чего начинал. Мне как начинавшему программирование, по-сути, с PHP — его синтаксис понятен и удобен… Например я в первый раз сегодня узнал, что кому-то мешает доллар… =)
UFO just landed and posted this here

14 лет пишу на php. Пробовал питон и руби – и меня никто, ни за какие деньги не заставит писать на них)))

UFO just landed and posted this here

Вообще это была шутка. В плане стадий отрицания, с руби и питоном я дальше первой не ушел. Покапал немного, написал несколько простеньких програмулин, но не зашло. А вот php зашёл с самых первых строк. Так зашёл, что до сих пор не отпускает)))

Может тогда стоит отбросить хвост и перейти на другие человеческие языки? :)

тут больше вопрос в том сколько пробовали писать. Мне не нравится python ровно до тех пор пока не пришлось с ним более плотно работать. Ruby — мне не нравятся рельсы а так язык очень даже ничего.

выскажу непопулярное мнение что синтаксис языка это дело привычки и не более. Не стоит судить о языке по синтаксису. А вот если отбросить вопросы синтаксиса и больше на выразительность и возможности глянуть — php будет далеко не в первой десятке. И в целом я бы никогда не стал рекомендовать в 2018-ом человеку учить php. Особенно первым языком. Вообще первый язык должен обладать рядом существенных ограничений. например — отсутствие оператора присваивания неплохое такое ограничение для последовательного обучения.


С++ никто не хоронит потому что много легаси. Вон кобал уже лет 50 хоронят и ничего, все еще живет и продолжает гнить.

Последние две недели пробую начать программировать на C++ (вполне успешно, т.к. после 15 лет опыта есть существенная база, пусть даже большая часть опыта на PHP, который в том числе отлично парсит бинарные данные, можно писать криптографический ад, работать с COM-портами и страшными устройствами на них, так что опыт на PHP тоже бывает разный).
Учусь по книжке С++ 11 за авторством Страструпа (по короткой книжке на 80 страниц с кратким изложением основных понятий). Вполне успешно пишу код (допиливаю Bitcoin под свои нужды).
Немного теряюсь в указателях и ссылках, вопрос привычки. Что мне действительно не нравится, так это то что интерфейсы, абстрактные классы, классы, колбеки, контейнеры — являются одной сущностью, и у меня сложилось мнение что именно из-за этого в языке есть такая ужасная вещь как «шаблоны» (молчу про перегрузку операторов и макросы — тот ещё кошмар, — специально сделали чтобы никто не знал как работает код). У меня стойкое ощущение, что нормальные интерфейсы по большей части заменили бы шаблоны и код стал бы намного яснее.
у меня сложилось мнение что именно из-за этого в языке есть такая ужасная вещь как «шаблоны»

метапрограммирование это не такая уж и страшная вещь. Опять же — вам просто непривычна эта концепция.


специально сделали чтобы никто не знал как работает код

У меня сложилось впечатление что подавляющее большинство разработчиков очень плохо понимает понятие абстракции. С чем это связано — понятия не имею.


У меня стойкое ощущение, что нормальные интерфейсы по большей части заменили бы шаблоны

Люди уже пытались — вышла java. Потом в java пришлось добавлять дженерики (только в 5-ой версии они появились). Потом отдельно лямбды, потом дефолтные методы для интерфейсов. А вот protected в С++ даже Страуступ считал ошибкой. Как и friend классы. Как он говорил — это те вещи которые стоит использовать один два раза за всю карьеру.


C++ далеко не самый лучший язык на свете. И многие вещи там непривычны и опасны. Но если вы понимаете что зачем и почему можно делать прекрасные вещи (или ужасные). Проблема именно в том как сделать обучение последовательным что бы привить понимание вещей и избавить от желания сделать очень плохо.


Взять то же ООП. Люди привыкли уже что ООП это когда у тебя код по классам разбит и т.д. А посмотреть на тот же smalltalk где даже штуки типа if или там for были просто методами объектов (что больше роднит этот язык с какими-нибудь функциональными языками, нежели с джавой той же). Или что в целом мы можем взять erlang и воспринимать один микротред, который может принимать/отправлять сообщения и иметь приватный стэйт как объект.


Словом люди всегда найдут способ сместить фокус внимания с важных вещей (концепции, идеи) на неважные (синтаксис, конкретная реализация). Так много идей погибло. ООП, SOA, TDD, микросервисы сейчас вот добивают...

у того же С++ синтаксис намного хуже, чем у PHP
У плюсов своя ниша (высокая производительность), в которой альтернатив практически нет. Возможно, ситуацию изменит Rust, но пока он все еще мало распространен. С вебом же ситуация противоположная — для написания бэкендов есть штук десять популярных языков, и можно выбирать то, что больше нравится.

его синтаксис понятен и удобен
Если вы начинающий программист и PHP оказался вашим первым языком — возможно, вы просто не знаете, что может быть по-другому. Чисто ради интереса изучите какой-нибудь другой язык (из хорошо продуманных могу посоветовать C# и Python). Может оказаться, что вы всю жизнь ели суп вилкой.
Пока Rust только долго запрягает. Главное чтобы когда запряжёт, кобыла не сдохла.
Пробовал C# лет 5-10 тому назад, — возникли определённые трудности с переносимостью кода на Windows / Linux. На том же C++ сейчас вообще таких проблем не встретил, хотя в стек добавился ещё и MacOS.
Python — не нравится принципиально, т.к. с ним неудобно работать в блокноте из-за принудительных работ по выставлению пробелов. Под давлением силы обстоятельств имею привычку вносить мелкие правки в код удалённо с телефона, — на телефоне студию не запустишь и все возможности vim'а не применишь. Не должен язык меня заставлять ставить пробелы.
По поводу Python — отступы нужны в первую очередь для программиста. Язык спроектирован таким образом, чтобы мотивировать программистов писать понятный и читаемый код.

Возможно, решение лежит не в технологической плоскости, а в организационной: разделять время на рабочее (когда у вас есть все необходимое для эффективной работы) и нерабочее (когда вы отдыхаете и не возвращаетесь к рабочим делам).

В мире C# с тех пор все сильно поменялось. Рантайм .NET Core вполне нормально работает на трех основных операционках, хотя он пока поддерживает только бэкенды для сайтов.
Я понимаю, что отступы нужны для меня. Их для меня ставит студия. Когда у меня нет под рукой студии — мне отступы, помимо уже имеющихся, — не нужны (от добавления десятка строк без отступов, — никто не помрёт, — на другой день я поставлю эти отступы в студии и положу в репозиторий). Просто не надо заставлять меня это делать.

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

Рад за C#, только вот зачем он мне под бекэнды для сайтов, когда я гораздо быстрее решу задачу на привычном стеке? Пока на сайте нет существенной аудитории — нет нужды его оптимизировать (при условии, что изначально не писать совсем уж нарочно тормозной код), поэтому какой-то выгоды от применения C# (конкретно треды в PHP страдают, а в C# вроде работают) для бекэнда сайта — мне не видно. Будет достаточная аудитория, — будет отдельный разговор как дальше жить (скорее всего на Java дальше жить, выбирая между Java и C#, я всё же выберу Java, либо правильно применять PHP, — он тоже много всего умеет).
Пока привычный стек всем устраивает — конечно, пользуйтесь. Желание расти должно прийти изнутри :)
Вы это так написали, как будто расти можно только в питон (пайтон?) или, не дай Бог, в C#. Рост может быть не только вширь, но и вглубь. Соответственно расти можно и в рамках имеющегося стека технологий, и в некоторых ситуациях — это будет более ценно для работодателя, нежели рост вширь.
PS: Ещё вы так написали, что у меня сложилось ощущение будто бы я не расту. Это не так, — чуть выше я писал про свой опыт с С++. В моём случае был выбор без выбора, но даже будь выбор — он бы не пал на C# или Python, т.к. это шило на мыло с моей точки зрения.
Опасно высказывать непопулярные мнения… :-)
приятно наблюдать, как развивается твой любимый язык программирования :)
Я уже много лет использую PHP и очень доволен, но в последнее время он нравится всё меньше и меньше. Больше всего меня беспокоит:
  • Отсутствие асинхронности из коробки. Распараллелить 2 исходящих HTTP-запроса — не тривиальная задача.
  • Объёмный синтаксис. Например:
    // PHP
    list('foo' => $foo, 'bar' => $bar) = ['foo' => 1, 'bar' => 2];
    
    VS
    // JavaScript
    let {foo, bar} = {foo: 1, bar: 2};
    
  • Необходимость инициировать объекты приложения при каждом HTTP-запросе, что уменьшает производительность системы. Для решения этой проблемы есть решения, которые не назовёшь идеальными: контейнер сервисов, ReactPHP.

Радует, что разработчики PHP взяли курс на асинхронность. Хотелось бы уже в первой версии видеть все низкоуровневые операции ввода/вывода асинхронными.
Распараллелить 2 исходящих HTTP-запроса — не тривиальная задача.

https://github.com/mpyw/co


[$google, $bing] = Co::wait([
    get('https://google.com'),
    get('https://bing.com')
]);

вполне себе тривиальная задача.


Объёмный синтаксис. Например:

в целом не обязательно писать list(...). есть сокращенный вариант, но да, в JS в этом плане намного лаконичнее. А так же меня лично бесит неконсистентность фич. Очень бы хотелось видеть что-то типа такого:


$fn = ([$foo, ...$rest]) => [...$rest, 'foo' => 'new foo']
$fn(['foo' => 1, 'bar' => 2]);

контейнер сервисов

они решают несколько другую проблему. Ну и помимо вариантов на reactphp/amphp есть еще spiral/roadrunner. Он как по мне выглядит намного приятнее. А то что оно на go — вас же не смущает что php-fpm на Си.

https://github.com/mpyw/co

Для PHP это скорее исключение, чем правило. Тоже самое можно сделать с помощью Guzzle. А вот параллельно с этим сделать отправку email или запрос к БД уже так просто не получится.

справедливости ради, в подавляющем большинстве случаев эти кейсы где надо распаралелить отправку писем и запросы в базу решаются через очереди. В остальных случаях старая добрая синхронная модель выполнения намного проще для разработчика. Да, это не самая эффективная модель выполнения с точки зрения утилизации ресурсов (потому есть Go), но зато проще в поддержке. Да и лэтенси вам это не сильно уменьшить.
Мне кажется, что вы путаете асинхронность, параллельность и конкурентность.

Я имею ввиду любой способ сделать 2 дела одновременно без больших усилий. Каким образом — дело второе.

Всем привет! Пишу на PHP более 10 лет, письмо Зеева заставило слегка задуматься что будет дальше.
Очень жаль что асинхронность откладывается всё дальше, как по мне, то выбирая между JIT и асинхронностью, я бы выбрал последнее. Наличие таких проектов как ReactPHP, swoole, amphp, конечно, радует, но как мне кажется, это всё — костыли. Решение из коробки очень было бы очень кстати, особенно, когда речь идёт про Windows платформу.
Если сравнивать NodeJS и PHP (куда же без этого), то NodeJS в текущем виде мне напоминает времена PHP4, нет нормального ООП, автозагрузки, простанств имён, плюс инфраструктура NodeJS это какой-то ад, два пакетных менеджера npm/yarn, модули могут быть написаны на TypeScript/CoffeeScript что сильно снижает способность разобраться как работает модуль, для сборки какого-нибудь мелкого проекта надо вытянуть тысячи зависимостей, отсутствие универсального фреймворка типа yii/laravel (expressjs для меня всего лишь продвинутый роутер, не более), с нормальным подходом MVC, как цельное решение, без необходимости собирать всё из отдельных кусочков. Для NodeJS я не встречал проектов уровня Wordpress, Magento, Prestashop, Drupal, NextCloud и др (может кто подскажет?)

Из вашего описания понятно только одно:


  1. вы совершенно не знаете JS (вы автозагрузку с нэймеспейсами считаете благом а не кастылем в связи с отсутствием модулей, да и ООП у вас какое-то не такое, хотя в JS оно идеологически даже лучше, особенно с последними редакциями ecmascript).
  2. вы не хотите думать, то есть вот все есть из коробки и ничего делать не надо. А тот факт что на гитхабе валяются сотни разных сборок этих сотен модулей, где так же ничего особо делать не надо вас не смущает. Учитывая что даже в PHP такие монолитные фреймворки как Yii уже считаются морально устаревшими. Даже в Laravel все не так гвоздями прибито.
  3. вы подменяете понятия. Миру не нужен еще один вордпресс (блоговых CMS на ноде много, но большинство склоняется либо к сервисам либо к генерации статических сайтов), или еще одна магенту (это вообще тот еще адок). Да и количество CMS под ноду в целом немаленькое. Вы просто не искали.

У ноды есть проблемы, в частности это признают авторы оной. Но то что вы описали больше подчеркивает отсутствие представления как делать что-то НЕ на php.

Для людей ненавидящих знак доллара в переменных и для тех кто считает что Shift+4 зажимать вредно:
Есть прога AutoHotkey и на клавиатуре есть очень удобно расположенная и крайне бесполезная клавиша CapsLock (кошмарная бесполезная фигня ИМХО).
Так вот — через AutoHotkey можно заменить нажатие на CapsLock на вывод знака "$" (можно даже дополнить комбинацией Ctrl+Space если у вас IDE выводит подсказки только после такой комбинации).
Также можно Shift+CapsLock заменить на вывод "$this->" или "$this".
Если же вы по каким-то мистическим причинам используете CapsLock, то можно повесить его на Alt+CapsLock.
Команды (Shift = +; Alt = !, Ctrl = ^):
Capslock:: Send $
+Capslock::Send $this->
^Capslock::Send ->
!Capslock::SendInput {Capslock}

Кстати, если вы недовольны раскладкой своей клавиатуры — с помощью AutoHotkey можно поменять почти все что угодно. Я вот на своей клавиатуре поменял кнопки на блоке «Home/Enf/Del/PgUp/PgDown» так как мне нужно и по сути исправил для себя единственный минус этой клавиатуры. Можно еще NumLock отключить или переназначить клавиши на NumPad'е.
Sign up to leave a comment.