LINUX.ORG.RU

[PHP] а какие реальные пролемы появлялись у Вас при работе с PHP ?

 


0

0

Часто слышу, что писать на PHP - не кошер. Не понимаю почему. На мой взгляд этот язык создан чтобы на нём писали web (и только web).

Зачем привинчивать костыли к перлу, чтобы он мог конкурировать?

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

★★★★★
Ответ на: комментарий от ef37

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

Даже,если не придираться к терминологии («потоки ядра»), не совсем верно. Для процессов есть таблица всяких дескрипторов, переменные окружения и прочая бюрократия. Плюс, если не форкаться, а стартовать по честному, то данные, либы, куча.

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

на Си++ вменяемые люди не пишут сайтов?

Фреймворки так-себе и хостинг дорогой, хнык.

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

Проверено на эмуляторе WoW, в котором все скрипты сценарии были писаны на С++. Заливка нового квеста, даже если он из трех шажков - очень смелый, мужественный шаг, который обычно заканчивается тающей на глазах оперативкой и процессором сервера, неизбежным перезапуском и летящими в админов помидорами ;)

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

Странный ты человек. Тебе говорят: пхп не умеет X, Y, а Z реализовано через ж***. Ответ - X мне не нужно, Y я сделал сам, а Z еще не реализовано в си.

К примеру то, что ты реализовал поддержку юникода через костыли mb_* (или через другие костыли) 5 лет назад, не значит, что пхп стал поддерживать юникод.

Ну решил ты задачу для себя на уровне фреймворка. Как это связано с качеством языка? Почитав твои посты в треде можно подумать, что для решения задачи на пхп нужно сначала написать свой фреймворк или хотя бы 100500 врапперов вокруг пхп'шных функций.

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

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

Это как бритьё световым мечом - для настоящих мужчин :)

Проверено на эмуляторе WoW, в котором все скрипты сценарии были писаны на С++.

Средний скриптописатель и на js такое накатает, что qnx в блюскрин положит.

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

Ну решил ты задачу для себя на уровне фреймворка. Как это связано с качеством языка?

принять его фреймворк в стандарт языка, на манер STL? =)

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

>А какое ты использовал? Надеюсь, не my_brave_new_strtolower?

Да нет, пока быдлокодил, то использовал strtolower() :) И когда переходил на юникод, то обычный mbstring.func_overload сделал переход на юникод безболезненным и полным.

Вот когда на сложные проекты со смешанными кодировками перешёл, таки да, пришлось свои обёртки делать :) Но это уже другая история.

И как оно на char* повлияет? :)

Какой такой char*? Мущщина, я из приличной семьи и данные юзера в char* не храню.


Ну так мы тут про «старый код, который ррраз - и...» :)

#define char fixme :)


Вот, так и тут не получается «рраз и...» :)

Жаль, фава-фанбоев в треде нет, такая кулстори пропала :)


Да я несколько лет на форуме с этим проектом крутился, многие засветились :) ... Навскидку, правда, только одну тему нашёл и не по нашему вопросу - http://www.linux.org.ru/forum/development/1409314

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

>Проверено на эмуляторе WoW, в котором все скрипты сценарии были писаны на С++

О, да... У нас в L2Fortress по нескольку раз в год появлялись в команде люди, которые горячо ратовали за перевод сервера на Си++. Мы чаще всего именно примерами с WoW-сервером отмахивались :D

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

>Странный ты человек. Тебе говорят: пхп не умеет X, Y, а Z реализовано через ж***. Ответ - X мне не нужно, Y я сделал сам, а Z еще не реализовано в си.

Не-а. Ответ - «X работает отлично, Y, правда, не Y, а y, но это не принципиально, а Z - это вообще только для тех, кому шашечки, а не чтобы ехало» :) Согласись, «небольшая» разница есть...

К примеру то, что ты реализовал поддержку юникода через костыли mb_* (или через другие костыли) 5 лет назад, не значит, что пхп стал поддерживать юникод.


Да не делал я никаких костылей. У меня просто взял и стал работать старый код. Без всяких переделок. 6 лет назад. А уж как оно внутри PHP было сделано, называть это костылями или нет - мне не интересно. Я в потрохах PHP не ковыряюсь. Мне результат важен.

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


В том же Питоне всё точно также :) Даже хуже. Без фреймворка он совсем малоюзабелен в Web'е :) А что такое в Web'е Ruby без фреймворков?

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

> Мы чаще всего именно примерами с WoW-сервером отмахивались :D

конечно же махали в сторону этой замечательной идеи: даже слегка неправильно работающий скрипт можно мгновенно отследить (по падению сервера), в отличие от тормознутой жавы, где «плохой» скрипт может годами прятаться и наличием своим осквернять сервер!

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

>даже слегка неправильно работающий скрипт можно мгновенно отследить (по падению сервера), в отличие от тормознутой жавы, где «плохой» скрипт может годами прятаться и наличием своим осквернять сервер!

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

...

Я именно под этим соусом свою Форт-подсистему и внедрял в L2J. Она не только позволяла себя полностью перезапускать под работающим сервером по горячему, но даже заниматься произвольными отладкой и настройками прямо из клиента :)

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

> Нет нормальной IDE.

Что считать нормальной? Меня, например, Eclipse PDT вполне устраивает.

Нет неймспейсов.

Есть.

Синтаксис как у перла, хрен что поймеш.

Это где?

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

> вордпресс трудноподдерживаемое тормозное решето - знаю.

Трудноподдерживаемое исключительно из-за ошибок при проектировании. А также из-за необходимости поддерживать PHP 4 и MySQL 4. Ну и из-за backwards compatibility. Но все упирается в ошибки при проектировании сего чуда программистской мысли.

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

> Думаю, тут не в языке дело...

плюс много…

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

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

> А если в функции используется не инициализированная глобальная переменная?

ИМХО, за глобальные переменные в функции нужно по рукам бить.

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

mbstring.func_overload

Вон, на жумлу посмотри.

А еще на phpBB

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

>> Я, вот, 6,5 лет назад на Юникод

там вроде уже и обычные(не mb) функции его понимают

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

> друг собеседовался в мэйлру перловиком, говорит что в основном спрашивают извраты над SQL

Хоть mail.ru и написан на perl, его вебморда - это не единственная задача для перловика. Например, может понадобиться написать разовый скрипт, предоставляющий кое-какую статистику в какой-нибудь там отдел на основе собранной в таблицах информации. Потому и спрашивали.

Да, я тоже собеседовался туда перловиком, и меня спрашивали про извраты перл :-P
Я, правда, ушел оттуда через некоторое время, но не потому что там всё плохо и нет MVC.

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

Это Qt и С++, qDebug() возвращает Qt-класс для вывода отладочных сообщений, мне просто было лень подключать iostream.

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

Да нет, я догадываюсь, что такое qDebug(). Я говорю, что я не понял, что этим комментарием планировалось сказать :)

KRoN73 ★★★★★
()

медленный он, когда дело до тяжелого использования OOP доходит. и eaccelerator не особенно помогает (хотя без него был бы совсем трындец).

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

но альтернатив все равно нет. руби — еще медленнее и гораздо менее распространен, eruby, кажется, потерялся по дороге, а RoR — совсем из другой оперы инструмент. перл — RIP. питон долго мучился, но так ничего толкового и не родил для веба, IMHO. erlang-и всякие и c# — только для красноглазия годятся. а про жабу в приличном обществе с недавних пор упоминать не принято, что и к лучшему.

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

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

А сделать это без извратов на SQL никак? Высосать нужную инфу с помощью офигитиельной SELECT * FROM (или даже без нее - через ORM) и потом анализировать уже средствами основного языка.

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

>А сделать это без извратов на SQL никак? Высосать нужную инфу с помощью офигитиельной SELECT * FROM

Да оно и без явного SELECT часто легко делается :) Натравить на mysql-таблицу кодогенерирующий скрипт, получить объект, и грузить эти объекты уже через ORM :)

На одно действие больше, чем в случае SELECT'а, зато при повторном использовании будет уже намного быстрее, вопросы инъекций не стоят, если понадобится, то потом легко уже и нормальный отчёт для сайта слепить мгновенно и т.п...

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

> медленный он, когда дело до тяжелого использования OOP доходит.

при правильном проектировании аритектуры и использовании фишек OOP код становится довольно резвым. проверено.

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


эмм. если мне не изменяет память, явное указание ссылок с 5.2.<что-то> стало deprecated. Am I wrong?

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

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

в целом в похапэ как раз напрягает некоторая ориентированность на мягко скажем недалеких кодеров. Неявная работа со ссылками, чтобы у быдлокодера мозг не закипел.
magic_quotes_gpc, чтоб быдлокодер лишних дырок не сделал. А нормальным людям только мешает, приходится из проекта в проект обертки-костыли таскать. И что мешало в stripslashes/addslashes добавить флажок для учета этого костыля

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

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

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

> нет полиморфизма по методам классов, т.к. неизвестны типы параметров

Вы хотели сказать «нет перегрузки методов класса, т.к. параметры нетипизированные», абитуриент? :-)

no-dashi ★★★★★
()
Ответ на: комментарий от Aid_

> нету классов, которые дублируют типы данных встроенные, всё ООП идёт лесом

Вы ООП как концепцию с boxing/unboxing не путаете?

no-dashi ★★★★★
()
Ответ на: комментарий от KDE41user

Some languages are better at expressing programming concepts than others. You can draw a parallel between natural languages such as English and programming languages such as Java and C++. In the case of natural languages, the linguists Sapir and Whorf hypothesize a relationship between the expressive power of a language and the ability to think certain thoughts. The Sapir-Whorf hypothesis says that your ability to think a thought depends on knowing words capable of expressing the thought. If you don't know the words, you can't express the thought and you might not even be able to formulate it (Whorf 1956).

AlexKiriukha ★★★★
()
Ответ на: комментарий от no-dashi

>> нету классов, которые дублируют типы данных встроенные, всё ООП идёт лесом

Вы ООП как концепцию с boxing/unboxing не путаете?


гораздо грустнее, что нельзя подсветить встроенные типы с помощью тайпхинтинга в аргументах методов.

Вы ООП как концепцию с boxing/unboxing не путаете?


в PHP уже есть автобоксинг? Можно у int $a вызвать $a->toString(); ?

stevejobs ★★★★☆
()
Ответ на: комментарий от no-dashi

> Вы хотели сказать «нет перегрузки методов класса, т.к. параметры нетипизированные», абитуриент? :-)

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

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

>в PHP уже есть автобоксинг? Можно у int $a вызвать $a->toString(); ?

Нет, потому что int - не объектный. В той же Java для int тоже ничего вызвать нельзя :) Можно для Integer... Ну так и в PHP можно сделать Integer. Только зачем? :)

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

>Так запретить сразу :)

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

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

>не всегда есть возможность ковыряться в системных конфигах

Есть ещё .htaccess :) Ну да в любом случае, в 5.3 оно уже DEPRICATED.

...

Хотя да, у меня в потрохах BORS юзается тоже соответствующая обёртка (проверяются данные и, если надо, приводятся к стандартному виду на входе и на работе с БД). Правда, последний раз обращал на неё внимание года три назад, наверное :)

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

>у нас 5.2 везде

Недавно у какого-то хостера, уже не помню у кого, при выкладывании 5.3 уже видел :)

...

У себя, правда, пока 5.2 ещё держу. Только дома 5.3

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

>нет именно про php

А я именно про сарказм. В питоновских скриптах я Depricated вижу на пару порядков чаще, чем в PHP :)

KRoN73 ★★★★★
()
Ответ на: комментарий от no-dashi
// дано: массив возвращаемый объектом
// $object->my_array
 
// пытаемся вывести значение массива под индексом key
echo $object->my_array['key']; // отлично, работает
 
// как добавить элемент в начало массива $object->my_array?
// пишем это:
$temp = $object->my_array; 
array_unshift($temp, 'new_val');
$object->my_array = $temp;
 
// хотя в нормальных языках могли бы написать так
$object->my_array->append('new_val');
 
// но в php можно и так
array_unshift($object->my_array, 'new_val');
 
// foo() возвращает массив, 
// хотим получить сразу элемент под индексом key
$object->foo()['key']; // так нельзя, это не JS
 
// хотя в нормальных языках могли бы написать так
$object->my_array->key;
 
// но в php можно и так
$object->my_array['key'];
//
Aid_
()
Ответ на: комментарий от KRoN73

>Недавно у какого-то хостера, уже не помню у кого, при выкладывании 5.3 уже видел :)

ну может при следующем переезде уже и будет. Хотя фиг его знает, у нас сервера на бзде, в ней могут еще пару лет некрофилией заниматься.
Дома на дебиане тоже 5.3, приходится регулярно курить ман на предмет поддержки каждой функции в 5.2. С датой-временем например в 5.2 все очень печально, леплю костыли.

nu11 ★★★★★
()

Рас уж такая пьянка пошла^U Заодно спрошу и про C++:

Многие ли пишут веб на нём? Нет ли тенденции к объединению сервера и скриптов?

Какие фреймворки, технологии можете посоветовать почитать, связанные с Web & C++ ?

helios ★★★★★
() автор топика

Топикстартеру, попытка подытожить:

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

AlexKiriukha ★★★★
()

Все хорошо с пхп. Главное goto почаще юзать)

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