LINUX.ORG.RU

Порекомендуйте фундаментальную книгу по PHP

 


5

2

Обстоятельства складываются так, что в ынтырпрайзе придется иметь непосредственное дело с php на протяжении следующих двух-трех лет. На данный момент какие-либо знания по нему у меня отсутствуют — до этого несолько лет .net на работе и python дома.

На ЛОРе был свидетелем множества негативных отзывов о php, еще встречал пару отрицательных заметок в блогах, и даже на луркмор сходил. Итог, который вынес — писать качественный код будет весьма и весьма сложно.

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

Цена роли не играет, язык — русский или английский, бумажная/электронная версия тоже не играет.

Сходу нагуглил:

http://www.amazon.com/Professional-PHP5-Programmer-Edward-Lecky-Thompson/dp/0...

http://www.rsdn.ru/res/book/web/php_5_prof.jpg

P.S. Касательно версии php - интересует 5 и выше, все, что до этого - не актуально.

Перемещено true_admin из development

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

Блин. Если очень надо, то делается прокси-объект, который перегружает __getattr__ и __setattr__ как хочется.

В PHP тоже многое делается через одно место, но вас же это не устраивает =)

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

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

Miguel ★★★★★
()

Тред не читай @ сразу отвечай

Хороших книг, да ещё свежих, не знаю.

I php.net тебе ничто не заменит. Вешай куда-нибудь поближе, в емаксе например, можно вызывать описание функции прямо из редактора, открывается в браузере. Не важно, как, главное, сделай обращение к php.net простым — это сэкономит время;

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

III Ищи готовый код, фреймворки и библиотеки, которые реализуют какую-то (желательно ту, которая подходит тебе) из этих моделей. Ищи, чтоб были как можно «костлявей». Поверь, те пять-семь штук, что у всех на виду, перегружены и для постижеия дзен подходят плохо. Если установочный архив весит больше 300-400 KiB, это повод задуматься, сколько придётся трейсить в случае, если ошибка где-то внутри.

Deleted
()
Последнее исправление: fargred (всего исправлений: 1)
Ответ на: комментарий от vladimir-vg

+1

У Python не наберётся косяков и на четверть такой статьи. PHP — объективное говно

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

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

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

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

Надо ли говорить, что современный_скриптовый_язык_без_лямбд является неюзабельным говном?

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

Лямбды должны быть маленькими, потому что только тогда их наличие не затрудняет понимание кода. Если у вас есть серьезная логика, то не поленитесь оформить ее нормальной отдельной функцией, тогда код будет понятнее. (А по поводу того, с какого числа начинается куча, то логика 1 - мало, иначе - много на практике вполне оправдана).

А недостатки (особенно вопиющее отсутствие стиля именования) вызывает ненависть к php. Ребята, у вас уже _пятая_ версия софтины, насколько надо быть деревянным, что бы не понять важность единого стиля именования уже на _первой_ версии вашего ПО. Как правильно пишут в манулаха по php 2: php используется не программистами :)

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

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

Остальное — вздроч, никому, кроме задротов, не интересный.

php используется не программистами :)

Ну вот о чем тов. VirRaa и говорил: илиткэ негодуэ.

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

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

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

*«принципиально невозможным» следует понимать в смысле «экономически недостижимо», понятно, что прижелании все что угодно можно сделать.

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

Кто на ком стоял? Потрудись думать и формулировать мысли, перед тем как писать посты :3

Что там кому чего должно никого не волнует.

Ну тебя явно много чего не волнует, а вот за всех отвечать потерпи, не созрел еще.

Лучше, иди перечитай статью о недостатках php, затем pep 8 и подумай о том, кто и какие приоритеты расставлял, подходя к разработке. Еще, над Django Book можешь помедитировать ;-)

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

Тебе какое слово непонятно? Ты не стесняйся, обращайся, я добрый. Как правило.

за всех отвечать потерпи, не созрел еще.

Ой, как мило! Моя скромная персона вызвала такую бурю эмоций!

Ну, так если результат тебя не интересует, можешь и дальше рефлексировать, я не против. Только вот не надо тут свои ментальные поллюции выдавать за некое Откровение.

кто и какие приоритеты расставлял

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

перечитай статью о недостатках php, затем pep 8

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

Но все недостатки пхп — это такая фигня по сравнению с декларируемыми, но пофакту отсутствуюшими в питоне лямбдами! И никаким чтением манов по всяким там джангам да жопам этого не изменить. Что толку от pep 8, если это ЯП не в состоянии делать то, для чего предназначен?

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

пишут в манулаха по php 2

Django Book

Ох, лол! И ты еще рассуждаешь о каких-то высоких материях!

DTL же как раз примерно php2 и соответствует! Разве что обработка списков там богаче.

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

Тебе какое слово непонятно?

Мне-то как раз уже все понятно :)

скромная персона вызвала такую бурю эмоций!

Это ты тут калом кидаешься по пяти сообщений за раз, тоже бурю нашел.

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

Ну вот есть у тебя правильность и «абстрактная», у многих она позволяет получать преимущества на практике.

Но все недостатки пхп — это такая фигня по сравнению с декларируемыми, но пофакту отсутствуюшими в питоне лямбдами!

Раз ты иногда добрый, дай-ка пару юзкейсов необходимости многострочных лямб, покажи на примере до чего неудобно использовать функции, и как хороши были бы лямбды. Так, что бы это хоть сколько-то приблизилось ко всем недостаткам, описанным во 'php fractal..'. Пока ты пустозвонишь на фоне остальных участников дискуссии, оперирующих фактами :D

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

по пяти сообщений за раз,

Как-то у тебя счет до пяти хромает, подтянул бы что ли, а то в школу не примут.

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

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

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

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

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

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

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

даже с костылем use.

Нет, извини, но use - это смертный приговор. То, что в нормальных языках... да даже в бидоне делается автомагически, в пыхе, как всегда, сделано через жопу. И это только в 5.3, заметим.

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

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

... устоявшееся наименование «невозможности использовать операторы, ограничиваясь одними выражениями».

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

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

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

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

А никто не говорил, что пхп не говно, или use не костыль. Речь лишь о том, что этот сорт говна позволяет решить задачу, в отличии от другого сорта. Да, в пхп много несуразностей и вообще граблей — да тот же use нельзя использовать в именованых функциях. НО эти проблемы хотя бы решаемы, поэтому с формулировкой «use - это смертный приговор» я не согласен (кстати, в пхп и кроме use с лямбдами проблем хватает). Проблема однострочных лямбд не решаема в принципе, ни через жопу, ни черз какие либо другие естественные и противоестественные отверстия.

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

Так что выбор прост: либо шашечки, либо ехать.

Кстати, что там в питоне делается «автомаГически»? Декораторы? Ну так это бугога, в том же пхп написать create_decorator — это три строчки кода, буквально. (Вот еще юзкейс для многострочных лямбд, кто там интересовался) Разыменовывание? Согласен, это расширяет возможности питоновских лямбд. Но, во-первых, проблему это не решает, во-вторых сделали в 5.4

И это только в 5.3, заметим.

И это только в последние 10 месяцев он old stable. Некрофилия это, конечно, весьма благородно, но не всегда полезно.

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

Неважно. Главное твердо знать что пых — говно. Чтоб, как говорится, «среди ночи разбуди».

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

Карринг например, диспетчеры удобно делать.

У тебя весь код только из этого и состоит? И потом, это вопрос удобства. Задча каррига _решается_ без лямбд, пусть даже это более утомительно.

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

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

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

Карринг например

Для карринга хватает однострочных питоновских лямбд.

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

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

Такому крутому профессионалу должно быть стыдно не знать таких простых вещей.

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

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

Карринг например

Для карринга хватает однострочных питоновских лямбд.

Значит питон тебе подходит.

Это да, но еще питоновские лямбды подходят для карринга (наверное, это единственное, для чего они хорошо подходят) :)

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

У тебя весь код только из этого и состоит?

Нет конечно, но в значительной степени.

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

Да, решается, надо только создать именованную функцию. Молодец! Скажи, ты уже нашел и прочитал «до чего неудобно использовать функции, и как хороши были бы лямбды», или у тебя опять затруднения возникли?

Даже если допустить

Да на здоровье! Допускай что хочешь, мне же лучше — чем вас больше, тем мой доход выше.

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

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

И еще один момент есть. _Может быть_ можно было бы отказаться от лямбд в пхп, если б его объектная система меня устраивала. И тогда у меня было другое видение задачи и я бы не придираля к питону за его лямдбы. Но теперь мы этого никогда не узнаем. :)

linuxnewb
()

Вообще странно это. ТС просит книгу о пхп, причем «Цена роли не играет», Но при этом его тошнит от пхп, а дрочит он на питон. Оп, скажи честно, ты тролль, лжец, или девственник^W мазохист?

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

Я буду предельно откровенен - у Web у меня опыта нет, однако в приложениях уровня предприятия на C#/.Net опыт имеется, и там, лямбды весьма удобны, но все-равно, если они раздуваются до многострочных со ложной логикой, это значит я делаю что-то не так и этот код потом будет труднее понимать другим сотрудникам. Поэтому я избегаю многострочных лямб в C#, несмотря на то, что они там есть.

А по поводу пыха - жизнь сложная штука, тебе ли не знать?

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

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

Ой ли? В очень длинную строку можно запихать до хрена всего.

Конечно, проблема есть, но не настолько печальная.

Кстати, что там в питоне делается «автомаГически»?

Эм... я говорил о том, что в бидоне не нужен use.

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

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

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

Не так давно, пару лет назад, я взял питон для одной задачи (нужна была билиблиотека, там она нормальная, много раз использованная, но суть не в ней). И столкнулся с тем, что не смог реализовать довольно простую логику в лямбде, как бы я не обмазывался or/and-ами. Ну и, собственно, конец истории, таки скорее печальной. В дальнейшем для подобной задачи я тоже брал питон, но ты понял.

Эм... я говорил о том, что в бидоне не нужен use. Понимаешь, тебе почему-то не лениво писать use, ... но категорически не хочется заводить локальную именованную функцию.

Ты ведь понимаешь, что лень тут совершенно не при чем. Конечно, в пхп все гораздо интереснее — там _все_ именованные функции находятся в глобальном пространстве имен. Но, во-первых, даже в локальном пространстве лучше не срать без надобности, и во-вторых — а как же пресловутая читабельность??? А ты предлагаешь определить функцию только для того, чтобы тут же присвоить ее некой переменной! Да, иногда это вообще ни на что не влияет. Но как только надо что-то посложнее — все, приехали.

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

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

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

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

Поэтому я избегаю многострочных лямб в C#, несмотря на то, что они там есть.

Фобии надо изживать, они реально мешают.

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

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

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

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

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

Будь так добр, растолкуй, ты хотел бы чего-то вроде:

call(lambda x, y:
{
   j = x + y;
   return j * j
})
но приходится делать так:
def my_special_func(x, y):
   j = x + y;
   return j * j
call(my_special_func)

Мне на полном серьезе, без дураков, хотелось бы понять в чем проблема. Тебя так утомляет одна строчка лишняя строка с def-ом? А то, может, что-то можно делать настолько проще.

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

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

Тут готов согласиться. Как тут писали в твиттере «Перл — есть много способов сделать дело; Питон — есть один способ сделать дело; Хаскелл — есть много способов сделать дело, но все они изоморфны».

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

Э... это оговорка по Фрейду, или ты не знаешь, что такое «детские грабли»?

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

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

Но у меня на душе светло от сознания того, что не все люди такие :)

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

>Надо ли говорить, что современный_скриптовый_язык_без_лямбд является неюзабельным говном?

С - язык без лямбд => С ненормальный язык . ок

Кто-то точно ненормальный.

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

По поводу ссылки

это было немножко к вопросу о фобиях.

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

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

ты хотел бы чего-то вроде: но приходится делать так:

Следи за руками:

# 
def my_special_func(x, y):
   j = x + y;
   def foo():
    return j * j
   return foo # нутыпонел
#
def func(x, y):
   def foo():
    return x+y
   def bar():
    return x*y
   return foo bar # полубред
func(func(2, 3)[0](),func(2, 3)[0]())[1]() # вторая половина бреда
#
def func(s='foo'):  # полный бред
   def foo(x, y):
    return x+y
   def bar(x, y):
    return x*y
  if s== 'foo': 
    return foo
  if s=='bar':
   return bar  # кстати тут баг
x,y=2, 3
j=func('foo')(x,y)
func('bar')(j,j) #  j = x + y;
#
def func(s='foo'):
   def foo(x, y):
    return x+y
   def bar(x, y):
    return x*y
  D={'foo':foo; 'bar':baг}   # кстати тут баг
  return D[s] # foo&bar больше нигде не используются
#
def func(s='foo'):
  D={\
   'foo':lambda x, y: return x+y;\
   'bar':lambda x, y: return x*y}
  return D[s] # б/к

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

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

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

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

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

func(func(2, 3)[0](),func(2, 3)[0]())[1]()
Ты бы пример с юзкейсом какой-нибудь подкинул, а то в вакууме сложно рассуждать. Вон, с каррингом тебе уже подсказали, может еще где помогут разобраться.

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

Порекомендуйте фундаментальную книгу по PHP (комментарий) :

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

Порекомендуйте фундаментальную книгу по PHP (комментарий) :

Кто-то точно ненормальный.

ага

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