Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

PHP вопросы и ответы для собеседований

Лекция



Привет, сегодня поговорим про php ответы для собеседований, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое php ответы для собеседований, собеседование , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

PHP вопросы и ответы для собеседованийТот факт, что вы являетесь хорошим программистом, играет поразительно малую роль при прохождении собеседования. Для того чтобы ваша работа была продуктивной, вам нужно уметь решать огромные, склонные разрастаться проблемы неделями и месяцами. Каждый вопрос на собеседовании, напротив, длится менее одного часа. Для того чтобы хорошо показать себя на интервью, вы должны знать, как быстро решать небольшие проблемы под давлением, при этом ясно излагая свои мысли. Это совершенно другое умение (в то же время я не говорю, что способность с легкостью решать задачи на собеседовании не имеет никакой связи с навыками программирования. Просто эта связь выражена куда слабее, чем считают многие компании, и именно другими факторами, отличными от специализированных умений, объясняется столь внушительное расхождение).

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

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

1. Проявляйте энтузиазм


Энтузиазм имеет огромное влияние на результаты собеседования. Около 50% наших кандидатов, не прошедших дальнейшие интервью в компаниях, провалили их не по техническим причинам. Обычно компании объясняют это тем, что человек «не вписывается в культуру компании». Однако, в девяти из десяти случаев «вписаться в культуру» — это проявить энтузиазм в том, чем занимается предприятие. Компании нанимают людей, которые проявляют живой интерес к их миссии. Для многих это так же важно, как и технические знания. И в этом есть смысл. Мотивированные сотрудники будут чувствовать себя счастливее и работать усерднее.

Проблема в том, что это может быть наиграно. Некоторые кандидаты умудряются убедить каждую компанию, в которой проходят собеседование, что только об этой работе они всю жизнь и мечтали, в то время как другие (искренне мотивированные и заинтересованные работой) не могут донести свои истинные стремления. Мы снова и снова встречаемся с этим. Решение здесь одно для всех — научиться показывать свой энтузиазм. Это не значит, что вам позволено обманывать. Собеседование — это как первое свидание. Никто не хочет на первом свидании слышать, что он является лишь одним вариантом из множества, даже несмотря на то, что обычно так и есть. Так и здесь, большинство программистов просто хотят иметь хорошую работу с достойной зарплатой. Но начинать с этого интервью не следует. Лучше всего перед собеседованием подготовить заметки о том, что вам нравится в компании, и упоминать об этом, когда человек, который проводит собеседование, спросит, есть ли у вас вопросы. Хорошим источником идей может быть прочтение недавних постов в блоге компании и пресс-релизов, тогда вы можете упомянуть те материалы, которые показались вам наиболее интересными.

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

2. Изучите термины, часто встречающиеся на собеседованиях


Огромный процент задаваемых на собеседовании вопросов касается структуры данных и алгоритмов. Это правда. Мы собираем у кандидатов информацию о вопросах, задаваемых на собеседованиях в компаниях YC, и более 70% вопросов касается именно алгоритмов. Вам не нужно быть экспертом, но знание расположенного ниже списка алгоритмов и структур данных поможет вам получить работу в большинстве компаний.

  • Хеш-таблицы
  • Связанные списки
  • Поиск в ширину, поиск в глубину
  • Быстрая сортировка, сортировка слиянием
  • Бинарный поиск
  • 2D множества
  • Динамические массивы
  • Двоичное дерево поиска
  • Динамическое программирование
  • Big-O анализ


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

Выучить все это не так сложно, как предполагают многие люди, с которыми мы говорили. Алгоритмы обычно объясняются научным языком, и это может сбивать с толку. Но по сути своей, ничто из этого списка не сложнее, чем архитектура современного веб-приложения. Если вы можете (хорошо) построить веб-приложение, то вы сможете выучить и это. Со своей стороны, я могу порекомендовать книгу Стивена Скиены (Steven Skiena) под названием «Алгоритмы. Руководство по разработке» (The Algorithm Design Manual). Данный материал замечательно излагается в 3-5-й главах — просто и доступно. Да, в книге используется С и математический синтаксис, но она отлично раскрывает тему. На Coursera также можно найти несколько хороших курсов по алгоритмам. В этом курсе, в частности, уделено внимание понятиям, знание которых важно при собеседовании.

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

3. Пользуйтесь помощью своего интервьюера


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

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

  • Задавайте вопросы
  • Обговаривайте решение задачи «в лоб»
  • Обговаривайте оптимизированное решение
  • Пишите код


После того, как вам задали вопрос, начинайте с определения того, о чем именно вас спрашивают. Это как раз тот момент, когда вы должны быть педантичны. Уточните все неясности, которые вы находите. Спросите о пограничных случаях. Приведите конкретные примеры для начала решения задачи и убедитесь, что вы верно поняли, какой конечный результат от вас ожидают. Задавайте вопросы, даже если вы практически уверены в ответах. Это полезно, потому что дает вам возможность выяснить пограничные случаи и получить все данные, необходимые для решения задачи (умение кандидата «работать» с пограничными случаями — один из ключевых аспектов, который интервьюеры принимают во внимание для общей оценки проведенного собеседования). К тому же это дает вам время на то, чтобы собраться с мыслями до того, как вы начнете решать проблему.

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

Кандидаты зачастую пропускают первый шаг, считая, что самое простое решение проблемы слишком очевидно либо ошибочно. Это неправильно. Убеждайтесь в том, что вы всегда находите решения поставленных перед вами проблем (даже если нужно задействовать экспоненциальное время или суперкомпьютер NSA). После того как вы описали такое простое решение, спросите интервьюера, хочет ли он реализовать его или вам следует придумать более целесообразное решение. Как правило, вас попросят о последнем.

Что касается более целесообразного решения, то излагайте свои мысли, как и в первый раз. Опять же, разговаривайте, а не пишите код, и забрасывайте интервьюера идеями. Можно надеяться, что вопрос будет похож на что-либо уже виденное вами, и вы будете знать ответ на него. Если же нет, то стоит подумать над тем, с какими наиболее похожими на данный случай проблемами вы сталкивались, и на основе этого построить свои ответы. Большинство вопросов на собеседовании связаны с немного завуалированными приложениями классических CS алгоритмов. Нередко интервьюер будет подводить вас к этому алгоритму, но только если вы сами начнете этот процесс.

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

4. Говорите о вариантах решений


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

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

  • HTTP (на уровне протоколов)
  • Базы данных (индексы, планирование запросов)
  • Сети доставки контента (CDN)
  • Работа с кэшем (LRU-кэш, memcached, Redis)
  • Системы балансировки нагрузки
  • Распределенные системы воркеров


Вам нужно не только изучить эти термины, но и понять, как они взаимодействуют друг с другом, формируя реальные системы. Наилучший способ для изучения этих понятиях — это почитать о том, как другие программисты внедряли эти инструменты. Блог High Scalability как нельзя лучше подходит для такого чтения. Данный ресурс публикует детальные материалы о конкретной бэкенд-архитектуры в той или иной существующей компании. Таким образом вы можете узнать, как каждое решение из списка выше используется в реальных системах.

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

5. Подчеркивайте результаты своей работы


Третий вид вопросов, с которыми вы можете столкнуться на собеседовании, касаются вашего профессионального опыта. Здесь интервьюер обычно просит кандидата рассказать о завершенных проектах. Ошибка многих программистов состоит в том, что они рассказывают исключительно о технической стороне того или иного проекта. Так, большинство специалистов рассказывают об успешном внедрении нейросетевого классификатора или реализации бота для проверки грамматики в Twitter. Это не лучший выбор, потому что человеку, который проводит собеседование, очень трудно судить о масштабе проекта. Многие кандидаты рассказывают о различных сторонних проектах, преувеличивая их значимость, и у интервьюера нет никакой возможности проверить, слышит ли он правду или красивую ложь.

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

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


Я рекомендую, чтобы на собеседованиях вы использовали такие динамические языки, как Python, Ruby или JavaScript. Конечно же, вам следует использовать любой язык, который вы знаете лучше всего. Но мы обнаружили, что многие интервьюеры предпочитают C, C ++ или Java, почему-то считая, что именно они являются «настоящими» языками программирования. Несколько классических книг по прохождению собеседований рекомендуют, чтобы программисты выбрали Java или C ++. Но нам кажется, что по крайней мере для стартапов это — плохой совет. Кандидаты добиваются большего успеха, используя динамические языки. На мой взгляд, это происходит благодаря их компактному синтаксису, гибкой типизации, а также литералов списка и хэша. Это нестрогие языки программирования. С ними могут возникнуть определенные трудности при создании сложных систем (что также является очень спорным вопросом), но они хороши, когда вы пытаетесь влепить прямо на доске алгоритм бинарного поиска.

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

Языки Java, C# и PHP в какой-то мере являются проблематичными. Мы обнаружили, что у стартапов есть некоторые предубеждения относительно этих языков. У нас есть данные, которые показывают, что программисты, использующие эти языки на собеседованиях, получают более низкие оценки. Это несправедливо, но это правда. Если у вас есть другие варианты, я рекомендую не использовать эти языки на собеседованиях в стартапы.

7. Практикуйтесь, практикуйтесь и еще раз практикуйтесь


Вы сможете лучше выглядеть на собеседовании, если заранее будете репетировать ваши ответы. Все потому, что любое собеседование — это стресс, а стресс негативно влияет на то, как вы себя преподаете. Решение одно — практика. Собеседования становятся менее трудными, когда вы приобретаете опыт в этом деле и со временем к ним привыкаете. Мы часто замечаем, что первые интервью кандидатов (даже в рамках одного поиска работы) оказываются неудачными, однако затем они обретают уверенность и лучше выглядят на интервью. Есть вам нелегко побороть стресс, то я рекомендую начать с инициирования собеседования. Найдите список вопросов для собеседования (рекомендуем книгу Cracking the Coding Interview, на российском рынке известную под названием «Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию») и проработайте их. Установите таймер, уделяя на каждый вопрос по 20 минут и старайтесь ответить на него как можно быстрее. Потренируйтесь писать ответы на доске (не все компании этого требуют, но это самый худший вариант, который стоит отработать). Лист бумаги и ручка могут послужить вам для симуляции доски. Если у вас есть друзья, которые могут помочь вам потренироваться проходить собеседование, то это замечательно. Вы можете собеседовать друг друга по очереди. Чтение задаваемых на интервью вопросов также даст вам неплохие идеи, которыми вы можете воспользоваться во время реального собеседования. Об этом говорит сайт https://intellect.icu . На удивление очень много вопросов используются повторно (целиком или частично).

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

8. Упомяните о своем послужном списке


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

9. Собирайте сделанные вам предложения работы


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

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

итак посмотрим примеры впросов на собеседваниях

1. Для чего используется тег < ?= ... ? >

2.Способы задания комментариев в PHP

3.Печечислите типы данных которые использует PHP

4.Какие названия переменных являются допустимыми

$name

$_name

$1name

$name1

$NAME

$var-name

${"2name"}

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

$a="z";

$z="k";

$$a="f";

echo $a.$z;

6. с помощь какой функции PHP выполняется проверка была ли установлена переменная

7.определите константу DBNAME со значением 'basename' и выведите ее

8.какой результат выполнения данного сценария

$a=1;

$b=2;

echo '$a'.'$b';

9.какой результат выполнения данного сценария

$a=3;

$b=--$a;

echo "$a.$b";

10.какой результат выполнения данного сценария

$name='John';

$surname='Smit';

echo $name+' '+$surname;

11. как преобразовать объект в строку

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

13. .какой оператор нужно использовать внутри функции для доступа к внешним для этой функции переменных

14.какой результат выполнения данного сценария

function oranges(&$orages=17)

{

$orages.=1;

}

$apples=5;

oranges($apples);

echo $apples;

function oranges($orages=17)

{

$orages.=1;

}

$apples=5;

oranges($apples);

echo $apples;

15.какой результат выполнения данного сценария

$a='12345';

$a[$a[1]]="2";

echo $a;

16 напишите функции для порверки на существования такого элемента массива

$a[6]=NULL;

17. напишите функциию для разбиения строки на элементы массива, например

строку "1,2,3,4,5" в массив array(1,2,3,4,5);

18. какие символы нужно экранировать внутри строки с двойными кавычками PHP?

19. чем отличаются строка с двойными и одинарными кавычками в PHP?

20 как получить текущую минуту используя PHP?

21 какие функции для работы с файлами вы знаете?

22. как задать значение cookies в PHP которая будет существовать пока сессия не завершится?

23. закие функции для работы с cookies в PHP вы знаете, их назначение?

24. перечислите модификаторы доступа в PHP

25. как выполнить конструктор родительского класса внутри функции (конструктора )?

26.экземпляры какиех классов можно передать этой функции function special (A $class){}?

class A {}

class B {}

class C extends A {}

class D extends B {}

27. какие магические методы в PHP вы знаете? их назначение?

28. имплементируйте класс (классы) для работы следующей цепочки вызовов

echo $manager->getEntity("User")->getName();

29/ какие паттерны программирования вы знаете? какое их назначение, привести примеры использования

30 назовите назначение компонентов MVC

31 что появилось в PHP 5.3+?PHP 5.6+?или что появилось в PHP 5 по сравнению с PHP 4?

32. с камими PHP фреймворками вам приходилось работать?

33. напишите регулярное выражение для проверки емейла?

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


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

Первый строительный блок для замыкания – это анонимные (лямбда) функции, т.е. такие функции, у которых нет ассоциированных с ними имен. Например:

// 2-ой аргумент для array_walk - анонимная функция
array_walk($array, function($dog) {
    echo $dog->bark();
}); 


Хотя у анонимных функций и нет связанного с ними имени, они могут быть ассоциированы с переменными или переданы в качестве callback-параметра в функцию высшего порядка. Пример:

// объявляем анонимную функции и ассоциируем ее
// с переменной $dogs_bark
$dogs_bark = function($dog) {  
    echo $dog->bark();
}
array_walk($array, $dogs_bark);


Внутреннее устройство замыканий в PHP представлено специальным классом замыканий – Closure.
Содержимое анонимной функции существует в своей области видимости независимо от области видимости, в которой эта функция была создана. Тем не менее, можно явно связать одну или несколько переменных из внешней области видимости, на которые можно будет сослаться в области видимости анонимной функции. Для этого нужно воспользоваться конструкцией use при определении анонимной функции.

Пример кода

class Dog {
    public function bark() { echo 'woof'; }
}

$dogs_bark = function($dog) use (&$collar) { // связываем по ссылке
    if ($collar == 'fitsWell'){
         echo $dog->bark(); // 'woof'
    } else {
         echo 'no bark';    // ошейник ($collar) слишком туго затянут
    }
};

$dog = new Dog;

$collar = 'fitsWell'; // внешняя переменная
$dogs_bark($dog); // 'woof'

$collar = 'tight';
$dogs_bark($dog); // 'no bark'


Способность получить доступ ко внешним переменным в пределах замыкания особенно полезна при использовании функций высшего порядка. Возьмем, например, функцию array_walk($array, $calback), которая, как и другие подобные функции, позволяет обойти переданный ей набор переменных и обработать их специфическим способом. Эта функция обходит массив $array и на каждой итерации вызывает анонимную функцию ($callback), передавая ей только значение текущего элемента и его ключ. Поэтому использовать переменную $collar без замыкания и конструкции use не получится. Конечно, мы можем воспользоваться ключевым словом global, но это приведет к бессмысленному засорению глобального пространства имен переменной, которая нужна только в данном конкретном контексте.
Замыкания обладают дополнительными объектно-ориентированными возможностями. Начиная с версии PHP 5.4, в интерфейсе класса Closure появились новые методы: bind() и bindTo(), которые можно использоваться для привязки новых объектов к замыканию. Например:

Closure::bindTo($newthis, $newscope); 


Этот метод дублирует замыкание и связывает его область видимости с новым объектом таким образом, что внутри замыкания переменная $this станет ссылкой на $newthis в объектном контексте. Давайте изменим функцию $dogs_bark так, чтобы она использовала переменную $this, а затем привяжем ее к объекту $dog.

// объявляем замыкание, но не связываем его с объектом
$dogs_bark = function() {
    echo $this->sound;  // где sound - свойство объекта $this
};
$new_dog = new Dog();
// создаем новое замыкание и привязываем его к объекту $new_dog
$new_closure = $dogs_bark->bindTo($new_dog);
$new_closure();   // выводит значение свойства $sound


Привязка замыкания к переменной и получение доступа к $this – достаточно мощная возможность. В частности, мы можем присвоить замыкание свойству объекта, по существу, превратив его в метод этого объекта.

$dog = new Dog();
$dog->closure = $dogs_bark;
$dog->closure();


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

Вопрос: Объясните, с какой целью и как используется ключевое слово global. Приведите пример, когда его применение целесообразно и когда нет.


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

Рассмотрим простой пример:

class Dog {
    function bark() {
        global $sounds;
        return $sounds->bark();
    }
} 


Код демонстрирует появление скрытой зависимости класса Dog от глобальной переменной $sounds. Конечно, бывают случаи, когда это оправданно (допустим, в системе существует единственный набор звуков, который вообще никогда не изменяется), но гораздо лучше явно передать $sounds объекту класса Dog в конструкторе, и хранить и использовать его в пределах этого экземпляра:

Пример кода

class Dog {
    protected $sounds; 
    function __construct($sounds) {
        $this->sounds = $sounds;
    }

    public function bark() {
        return $this->getSounds()->bark();
    }

    public function getSounds() {
        return $this->sounds;
    }
}


Но, как часто бывает в программировании, никогда не говори никогда. Существует ряд надежных и стабильных продуктов, написанных на PHP, которые активно пользуются глобальными переменными: Wordpress, на котором работает около 20% всех сайтов (и это число растет из года в год), Joomla! 1.5 (да, она до сих пор еще широко распространена) и iLance Enterprise Auction system – это все примеры успешных проектов, в течение многих лет использующих глобальные переменные. Точно так же и у вас могут возникнуть ситуации, в которых глобальные переменные будут уместны, однако к их применению нужно подходить осторожно.
К списку вопросов

Вопрос: Расскажите о пространствах имен в PHP и о том, почему они полезны.


Одно из объектно-ориентированных нововведений в PHP 5.3 – пространства имен. Как следует из названия, пространство имен определяет такую область видимости в программе, внутри которой имена классов, интерфейсов, функций, переменных и констант не будут вызывать конфликтов с элементами, обладающими такими же именами в другом пространстве имен.

До PHP 5.3, классам часто давали длинные имена, чтобы отразить в их названии структуру пакетов и избежать конфликтов имен. Предположим, что у нас есть класс Dog, определенный в модели приложения Dog_Pound. Без пространства имен полное имя класса выглядело бы следующим образом:

class Dog_Pound_Model_Dogs { // ух, попробуй выговори
    function getDogs();
}


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

namespace dog_pound\model;  // указываем текущее пространство имен
class Dogs {   // объявляем только "Dogs" в dog_pound\model
    function getDogs();
}
$dogs = new Dogs; // класс создаваемого объекта определен однозначно,
// т.к. в текущем пространстве имен он один имеет такое имя


Также поддерживаются относительные ссылки на пространства имен. Например, когда вы находитесь в пространстве dog_pound, вы сможете создать экземпляр класса Dogs вот таким образом:

$dogs = new model\Dogs  // только одна "model" определена в dog_pound


Кроме того, элементы из одного пространства имен могут быть импортированы в другое и использоваться в нем непосредственно (т.е. без ссылок на исходное пространство имен). Этого можно добиться с помощью ключевого слова use:

namespace this\new\namespace;  // текущее пространство имен

// импортируем Dogs из пространства dog_pound\model
use dog_pound\model\Dogs;

$dogs = new Dogs;


К списку вопросов

Вопрос: Что такое типажи (traits, трейты)? Опишите их основные характеристики и расскажите, чем они полезны. Приведите пример объявления типажа и класса, использующего несколько типажей.


Типажи – это великолепное дополнение, появившееся в PHP 5.4, позволяющее добавлять

продолжение следует...

Продолжение:


Часть 1 PHP вопросы и ответы для собеседований
Часть 2 Заключение - PHP вопросы и ответы для собеседований

Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.

создано: 2015-02-24
обновлено: 2021-03-13
132599



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


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

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)