LINUX.ORG.RU
решено ФорумTalks

Почему php считается плохим языком программирования?


1

1

Хоть я только начинаю на нем писать, но на мой взгляд он довольно таки хорош.

Плюсы:

- Легок в изучении

- Обширная документация, разжеванные примеры

- Хостинг дешевле

- Процесс кодинга подобен процессу творчества

- Динамическая типизация

- eval()

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



Последнее исправление: puding (всего исправлений: 1)
Ответ на: комментарий от KRoN73

А bottlepy.org часто висит как сейчас? ;)

какой тонкий вброс :) Судя по тому что сервер не пингуется проблема не в питоне.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

какой тонкий вброс :)

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

deb
()

Для новичков рекомендую это:

http://readthedocs.org/docs/bottle/en/latest/tutorial_app.html

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

deb
()
Ответ на: комментарий от deb

У кого сайты постоянно падают, могу здесь привести - это весь код wiki на bottle.py. Очень кратко и очень наглядно.

# coding: utf-8

from bottle import run, route, debug, redirect, request
import sqlite3
import re

def template(name,content):
    return '<html><body><h1>%s</h1>%s</body></html>' % (name,content)

def wiki(content):
    content = content.replace('\n','<br/>\n')
    content = re.sub(r'\[(.+?)\]', r'<a href="\1">\1</a>', content)
    content = re.sub(r'\*\*(.+?)\*\*', r'<b>\1</b>', content)
    return content

def dbInit():
    conn = sqlite3.connect('wiki.db')
    cur = conn.cursor()
    cur.execute('CREATE TABLE IF NOT EXISTS pages(name TEXT, content TEXT)')
    conn.commit()

def dbGetPage(name):
    conn = sqlite3.connect('wiki.db')
    cur = conn.cursor()
    cur.execute('SELECT content FROM pages WHERE name=?', (name,))
    r = cur.fetchone()
    if r: return r[0]
    return ''

def dbSavePage(name,content):
    conn = sqlite3.connect('wiki.db')
    cur = conn.cursor()
    cur.execute('SELECT name FROM pages WHERE name=?', (name,))
    r = cur.fetchone()
    if r: # page exsist
        cur.execute('UPDATE pages SET content=? WHERE name=?', (content,name))
    else:
        cur.execute('INSERT INTO pages (name,content) VALUES(?,?)', (name,content))
    conn.commit()

@route('/')
@route('/:name')
def index(name='main'):
    content = dbGetPage(name)
    if not content: content = 'page not found. <a href="/edit/%s">create %s page?</a>' % (name,name)
    else: content = wiki(content) + '<hr/><a href="/edit/%s">edit</a>' % name
    return template(name, content)

@route('/edit/:name')
def edit(name):
    content = dbGetPage(name)
    content = '<form method=POST action="/save/%s"><textarea cols=60 rows=20 name=content>%s</textarea><input type=submit /></form>' % (name,content)
    return template(name, content)

@route('/save/:name', method='POST')
def save(name):
    content = request.POST.get('content','')
    dbSavePage(name, content)
    redirect('/%s' % name, 303)

dbInit()
debug(True)
run(port=8080,reloader=True)
deb
()
Ответ на: комментарий от deb

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

deb
()
Ответ на: комментарий от true_admin

посмотри тогда flask, это те же яйца.

Для совсем начинающих bottle.py намного проще.

deb
()
Ответ на: комментарий от drBatty

Что я забыл упомянуть? Traits? Просвятите, отстал я видимо от времени.

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

Seraph
()
Ответ на: комментарий от drBatty

Да бесспорно вы правы насчет оперативности языка, но что - то мне мало верится в то, что в коде Facebook таится знатный быдлокод. Заслуга php именно в том, что есть возможность быстро конвертировать поток сознания в работающий код и дать начало отличному стартапу. Вероятно пример я привожу зря, но вы скорее всего видели фильм «Социальная сеть», помните как Марку в головоу сваливались идеи? Я думаю вам знакомо это фееричное чувство осознания наличия в голове идеи, которой у другого человека, в данный момент времени явно нет. Самое страшное тут то, что не забыть все тонкости за время сна - очень тяжело. Я считаю только из - за здравых понятий что и каким инструментом нужно делать, приведенные мной примеры людей добились успеха, ведь схема проста: Идея -> Быстрая реализация. Быстрая реализация = PHP, это просто работает, пора смириться =)

Seraph
()
Ответ на: комментарий от deb

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

Seraph
()
Ответ на: комментарий от deb

wiki на bottle.py за 23 минуты

Вот эта херь меня всегда бесила. Очевидно же, что это тупо маркетинговый ход. Блог на рельсах за 10 минут, вики на боттл.пай за 23 минуты...

В итоге мы видим убогие прототипы, которые до полноценного приложения еще довольно долго допиливать и дебажить. Однако это преподносится как киллер-фича

И второй нюанс: эти 23 минуты потребовались, чтобы _повторить_ уже написанный код. Т.е. никаких проб и ошибок, обязательно присутствующих в первой реализации прототипа по ТЗ, мы не видим. Исключительно сухая выжимка с набором буковок и вуаля! Смотрите, как мы круты

Я привык, что подобные разделы в документации обычно называются Getting started и не преподносятся как дар богов убогим быдлокодерам, уставшим от плохого PHP

boombick ★★★★★
()
Ответ на: комментарий от Seraph

foreach станет быстрее коллбэка

Вам надо методику замера времени исполнения менять, мне кажется. foreach на данный момент работает быстрее всех остальных способов обхода массива. Инфа 100%

boombick ★★★★★
()
Ответ на: комментарий от Seraph

что - то мне мало верится в то, что в коде Facebook таится знатный быдлокод

Там жопа на самом деле :) Фейсбуковцы рассказывали, что им огромного труда стоило строить правильную архитектуру параллельно с текущей. Когда на них свалились реальные нагрузки, код быстро оброс стройной системой костылей и подпорок и поддерживать его стало невозможно. Цена внесения новой фичи стала очень высока и они потратили очень много сил на то, чтобы мягко и незаметно убрать пых из бизнес-логики. Сейчас у них на пыхе прототипы и сборщик шаблонов, AFAIK

boombick ★★★★★
()
Ответ на: комментарий от Seraph

быстро конвертировать поток сознания в работающий код

Вот для подобных вещей, кстати, куда лучше подходят суперлегкие фреймворки типа bottle.py

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

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

boombick ★★★★★
()
Ответ на: комментарий от Seraph

http://boombick.org/blog/posts/87

Я писал про это пару лет назад :) Как раз когда зарелизился php 5.3 и стали доступны вкусности типа замыканий.

На данный момент примерно ту же картину показывает xhprof (фейсбуковский, кстати, инструмент :))

boombick ★★★★★
()
Ответ на: комментарий от Seraph

А если вообще юзать for (foreach, по сути, это синтаксический сахар для for), то будет еще быстрее :) Правда, хэш с помощью голого for обойти не получится.

Вот вам реальный косяк пыха, кстати: списки являются частным случаем хэша, а не списками в привычном понимании

boombick ★★★★★
()
Ответ на: комментарий от boombick

Правда, хэш с помощью голого for обойти не получится.

$ php -r '$x=array("x"=>1, "y"=>2, "z"); for(;list($idx,$val)=each($x);) echo "$idx: $val\n";'
x: 1
y: 2
0: z

Ну, можно ещё array_keys() заюзать. Правда, зачем извращаться непонятно :)

$ time php -r 'for($i=0; $i<10; $i++) { $xs=range(1,1000000); $s=0; foreach($xs as $x) $s+=$x; print $s.PHP_EOL; }' 
500000500000
…
real	0m6.603s
user	0m6.187s
sys	0m0.283s

$ time php -r 'function sum($x) { global $s; $s+=$x; } for($i=0; $i<10; $i++) { $xs=range(1,1000000); $s=0; array_walk($xs, "sum"); print $s.PHP_EOL; }'
500000500000
...
real	0m17.526s
user	0m17.064s
sys	0m0.250s

$ time php -r 'for($i=0; $i<10; $i++) { $xs=range(1,1000000); $s=0; array_walk($xs, function ($x) use (&$s) { $s+=$x; }); print $s.PHP_EOL; }'
...
real	0m17.849s
user	0m16.951s
sys	0m0.304s

?

KRoN73 ★★★★★
()
Ответ на: комментарий от boombick

foreach на данный момент работает быстрее всех остальных способов обхода массива

По-моему, всегда так было, начиная с PHP5. Это в PHP4 (если не в PHP3 даже, не помню точно) foreach был медленный и народ даже городил более быстрые while(...each(...))...

KRoN73 ★★★★★
()
Ответ на: комментарий от boombick

Вот вам реальный косяк пыха, кстати: списки являются частным случаем хэша

Сильно облегчающий жизнь момент PHP, замену которому я ищу в Питоне :) — Аналог режима PHP для Python/Ruby (комментарий)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Ну вот видишь :) Три страницы спорим о вкусах, как оказалось :) Что, как известно, является самым бесполезным времяпровождением :)

boombick ★★★★★
()
Ответ на: комментарий от KRoN73

$ php -r '$x=array(«x»=>1, «y»=>2, «z»); for(;list($idx,$val)=each($x);) echo «$idx: $val\n»;'

Хм. Интересное решение, спасибо ) Конечно, оно представляет сугубо академический интерес, но это его не портит :)

boombick ★★★★★
()
Ответ на: комментарий от boombick

Отсюда вывод: ЛОР - не нужен :)

Скорее: ЛОР невкусный

deb
()
Ответ на: комментарий от boombick

Вот эта херь меня всегда бесила. Очевидно же, что это тупо маркетинговый ход. Блог на рельсах за 10 минут, вики на боттл.пай за 23 минуты...

И второй нюанс: эти 23 минуты потребовались, чтобы _повторить_ уже написанный код. Т.е. никаких проб и ошибок, обязательно присутствующих в первой реализации прототипа по ТЗ, мы не видим. Исключительно сухая выжимка с набором буковок и вуаля! Смотрите, как мы круты

Глупость какая-то. Во-первых, творческому человеку гораздо сложнее повторить уже придуманное, чем придумать новое (а нетворческие пишут на php и не высовываются :), во-вторых, чтобы повторить этот код, достаточно и 5 минут, а в-третьих, автор только открывал для себя bottle.py, если я не ошибаюсь, и поэтому это была скорее проверка себя.

Какие пробки и ошибки? Очевидная задача, решение которой на bottle.py может целиком поместиться в голове.

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

deb
()
Ответ на: комментарий от Seraph

Я не видел фильм про какие-то сети, и слабо себе представляю, кто такой Марк, но дело в том, чудачок, что на bottle.py ты будешь писать БЫСТРЕЕ, при этом знать тебе надо МЕНЬШЕ (чтобы на php начать писать эффективно, тебе нужно несколько лет вдумчиво и тщательно разбираться со многим, а тогда уже твой проект мхом покроется, и в моде будут какие-то другие сети).

Быстрая реализация = PHP

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

Тот, кто будет торопиться, напишет на php, скорее всего, что-то, начинающееся с 17 вставок if, непонятно как и почему работающее, и потом, со временем, у него с каждым новым шагом будет отнимать всё больше и больше времени процесс развития и исправления.

Кто на bottle.py писал, тот с «php - это быстро» смеётся.

deb
()
Ответ на: комментарий от deb

И, вуаля, вики готова для всего.

Осталось понять, годится ли bottle.py для реальных приложений или заточен сугубо под написание вики за 23 минуты? :)

А если кроме шуток, то свое мнение касательно именно bottle.py я написал выше. Неплохой инструмент для быстрого прототипирования, но реализацию прототипов я бы на нем писать не стал. Слишком много придется дописывать.

Вообще на питоне, по сравнению с другими языками, написано удивительно много таких вот легких и хороших фреймворков, которые можно использовать «здесь и сейчас» для решения простых задач. Я говорю в контексте web-разработки, ибо занимаюсь исключительно вебнёй, в остальных сферах не силен особо. Да и не лезу, честно говоря :)

boombick ★★★★★
()
Ответ на: комментарий от deb

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

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

boombick ★★★★★
()
Ответ на: комментарий от deb

на bottle.py ты будешь писать БЫСТРЕЕ, при этом знать тебе надо МЕНЬШЕ

А когда все это успешно загнется в production-окружении, ты всегда сможешь сказать: «а вот если б писали на php, это загнулось бы гораздо раньше»

boombick ★★★★★
()
Ответ на: комментарий от boombick

Осталось понять, годится ли bottle.py для реальных приложений или заточен сугубо под написание вики за 23 минуты? :)

Смотря что считать под реальными приложениями. Если то, для чего используется 90% мощей php - то есть написать какую-нибудь домашнюю страничку с гостевой книжкой, интернет-ларёк, доску объявлений или галерею - то годится куда лучше, чем php.

Про остальное пока рассуждать не буду.

А если кроме шуток, то свое мнение касательно именно bottle.py я написал выше. Неплохой инструмент для быстрого прототипирования, но реализацию прототипов я бы на нем писать не стал. Слишком много придется дописывать.

Не согласен, но не настаиваю. :)

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

При этом bottle.py явно выделяется из flask, webpy и ещё кучи подобных вещей именно тем, что он простой, как три рубля - самое то для новичка. И веб-сайт с туториалами приятный, и сам фреймворк умеет только необходимое (для новичка) и не перегружен лишним.

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

deb
()
Ответ на: комментарий от boombick

А когда все это успешно загнется в production-окружении, ты всегда сможешь сказать: «а вот если б писали на php, это загнулось бы гораздо раньше»

По тестам bottle.py самый быстрый, как мы неделю назад выяснили. :)

deb
()
Ответ на: комментарий от deb

Я думаю, что для того, чтобы создавать действительно качественные и успешные продукты, надо стремиться знать БОЛЬШЕ и БОЛЬШЕ, стараясь охватить выбранную сферу деятельности со всех сторон. Так что сомнительный какой-то довод

Опять-таки, БЫСТРО редко бывает КАЧЕСТВЕННО. Для прототипа - ок. Для коммерческого продукта - цена ошибки слишком высока.

boombick ★★★★★
()
Ответ на: комментарий от boombick

Я говорю в контексте web-разработки, ибо занимаюсь исключительно вебнёй, в остальных сферах не силен особо. Да и не лезу, честно говоря :)

Есть ещё такая замечательная вещь, как pygame, который можно использовать и для создания игр, и для генерации красивых картинок для веба.

deb
()
Ответ на: комментарий от boombick

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

Если новичок на php и новичок на bottle.py заходят написать какой-то проект, то у новичка на php в большинстве случаев получится кривой, небезопасный и проблемный проект. А новичок на bottle.py будет на реализацию неочевидных вещей заглядывать в справочник, и смотреть, как там будет правильно. И, в процессе немного поднимет свой опыт (на php если ты выучил if, file, for, echo и fwrite - ты уже герой и можешь уже делать проект любой сложности, справочники - это скучно, и просто так в них никто не полезет), и у него получится или более-менее приемлемый проект, или он не будет это реализовывать, если столкнётся с трудностью.

deb
()
Ответ на: комментарий от boombick

Я думаю, что для того, чтобы создавать действительно качественные и успешные продукты, надо стремиться знать БОЛЬШЕ и БОЛЬШЕ, стараясь охватить выбранную сферу деятельности со всех сторон. Так что сомнительный какой-то довод

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

Опять-таки, БЫСТРО редко бывает КАЧЕСТВЕННО. Для прототипа - ок. Для коммерческого продукта - цена ошибки слишком высока.

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

deb
()

Зашёл на фейсбук, о котором так много говорят, чтобы хоть увидеть, что это такое. А там какая-то страшная картинка и какая-то скучная форма. Я такое и в 1997 году на html+js делал. :)

deb
()
Ответ на: комментарий от deb

про какую-то простоту php, что его может каждый школьник легко освоить

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

для чего используется 90% мощей php

Мне повезло наверное, я вхожу в оставшиеся 10% :) Причем на пыхе не зацикливаюсь, как справедливо отметили выше, предпочитаю выбирать инструмент под задачу.

Я занимаюсь разработкой веб-проектов, заточенных под большой трафик (ну не 300к rps конечно, но последний проект на данный момент уверенно держит 10к в секунду) и могу с уверенностью сказать: на пхп это написать можно, но пары гостевух в анамнезе явно недостаточно. Как и одной вики на bottle.py, если мы выберем питон. Вот поэтому для бложеков и хоумпейджей используют вордпресс (если пых) или тот же bottle.py, например (если питон). А в реальном продакшене в качестве application-сервера берут Yii (если пых) или Zope (если питон). Только потому, что это надежные, обкатанные, масштабируемые и кастомизируемые решения, в которых большинство типовых проблем УЖЕ протестировано и закрыто. Показательно, для бложеков и мелких визиток вообще не существует разделения на фронтенд и бэкенд, оно там тупо ни к чему, все живет в рамках одной физической машины и не требует построения какой-то особенной архитектуры. Что-то скромное маленький фреймворк вполне осилит, более того, брать громоздкие бандуры - это из пушки по воробьям. А вот в контексте чего-то масштабного application-сервер - лишь один из узлов архитектуры и надо знать еще хренову кучу всяких нюансов по работе остальных узлов и их взаимодействия друг с другом.

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

ЗЫ Yii и Zope взяты для примера :) Просто именно на них у меня есть опыт разработки больших и работающих систем

boombick ★★★★★
()
Ответ на: комментарий от deb

И че, в 1997 году твоя формочка на html+js тоже умела загружать и обрабатывать по полтора миллиарда фоток в день? (это лишь одна из функций фейсбука, опять-таки, взял тупо для примера)

boombick ★★★★★
()
Ответ на: комментарий от boombick

каждый школьник сможет быстро начать писать на нем. Писать очевидное говно.

Если он начнёт писать на bottle.py, то он сразу научится задавать правильные вопросы. Культура другая. Это как культура Windows vs культура Linux.

deb
()
Ответ на: комментарий от deb

Вот с этим согласен на 100%

Обычные пыхокодеры узнают, что означают буковки http в адресной строке уже в самом рассвете своей карьеры, когда в «портфолио» есть три визитки, гостевуха и фотогалерея. До понимания технологии клиент-сервер и понятия «протокол обмена данными» доживают вообще единицы. Зато эти единицы на пыхофорумах гордо несут статус «Гуру» с высоко поднятой головой. Показательно, что совершенно не обязательно кому-то это объяснять, главное - умело вставить в сообщение, основной месседж которого - это посыл в гугл. И таких форумов овер9к

boombick ★★★★★
()
Ответ на: комментарий от deb

Нет смысла больше спорить, у каждого свои аргументы, каждая технология чем - то хороша. Я люблю писать на php - пока php продается, я уверен, что он будет занимать свою нишу еще очень - очень долго. Когда python/ruby/etc займут его место, я буду любить писать на них, душа же моя навечно принадлежит Си =).

Seraph
()
Ответ на: комментарий от Seraph

Я люблю писать на php - пока php продается, я уверен, что он будет занимать свою нишу еще очень - очень долго. Когда python/ruby/etc займут его место, я буду любить писать на них

«Я не проститутка, я просто люблю секс, деньги, и когда они вместе». :)

deb
()
Ответ на: комментарий от deb

Справедливо ЧО! Люблю секс, деньги люблю не меньше. Не проститутка - факт, благо зарабатывать могу мозгами, а не попой xD

Seraph
()
Ответ на: комментарий от Seraph

Seraph

Просвятите, отстал я видимо от времени.

в других ЯП такое уже давно есть. В С++ например.

drBatty ★★
()

> Много негативных отзывов насчет безопасности и стабильности. Но почему тогда Вконтакте и другие крупные порталы не падают по десять раз в сутки?

Не авторитет, нужно другой пример.

ZenitharChampion ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.