Комментарии 27
У вас ошибка в определении инкремента и декремента:
![](https://habrastorage.org/getpro/habr/upload_files/9f5/f12/6ca/9f5f126ca487eb0185ed4410bde96f08.png)
На самом деле: инкремент - увеличение, декремент - уменьшение.
Есть ошибки, посмотрел по диагонали:
1) callable это не callback, ничего не мешает callable вызывать не как callback;
2) имя почти всех суперглобальных массивов содержит подчёркивание после $, перечислены не все суперглобальные массивы;
3) «Используется динамическия система типов. При отсутсвии типизации кода, интерпритатор сам определяет тип данных переменных (запятая) исходя их контекста»
Спасибо! Ничего себе вы по диагонали читаете и замечаете такие очепятки)
Не очень понял по поводу первого, это буквально текст с php.net со списком типов.
По поводу второго согласен, поправил со ссылками на документацию
Callback — это функции обратного вызова, callable — просто тип «вызываемое», не обязательно использовать callable как callback, термины разные.
Да, я понял о чем Вы говорите, и вы несомненно правы. Однако, источник в виде документации именно так озаглавил этот пункт в разделе "Типы"
В любом случае внес изменения в статью
php.net можно верить только английским статьям, всё переводное нужно смотреть и внимательно вычитывать - не раз с таким сталкивался и лично туда отправлял исправления русскоязычных описаний тех или иных аспектов языка, которые при переводе на ру были переведены некорректно, нечётко, неполно
Ну в данном случае в оригинале те же колбеки. Я, кстати, обычно отправляю исправления именно в английскую, потому что по моему опыту неточности скорее оттуда идут.
Плюс, документацию тоже надо уметь читать. Вот например товарищ взял оглавление из раздела Типы и решил, что это и есть перечисление типов в языке. Получилось очень смешно :)
Я прочитал не по диагонали, и у меня нехорошие подозрения. Текст выглядит так, как будто очередной двоечник открыл для себя chatGPT. Бездумная копипаста при НУЛЕВОМ понимании смысла. Скалярные массивы. Типы данных mixed и void (причем ниже этот попугай старательно отвечает на вопрос про тайп хинтинг, но отличие типов данных от типов возвращаемых значений так и не осилил). Перепутанные инкремент и декремент. PEAR(?!). Строгая типизация для аргументов и возвращаемых значений функций появилась только в PHP8, ага. 24 вопрос - это просто какой-то ад. 26 такой же.
В общем, ответы делятся на две категории: либо копипаста (причем часто представляющая собой бессмысленный набор слов, без малейшего понимания как вопроса, так и своего собственного ответа, как например в 31 и 43), либо адова отсебятина (41 вопрос - это просто праздник какой-то!). Единственный вопрос, ответ на который автор явно писал сам и твёрдо знает ответ на него - это отличие include от require. Вот тут он расстарался, аж на целый экран. Куда там рекурсии с одной строчкой, или MVC с жалким абзацем.
Не тяну я на джуна... :-).... 1/3 не знаю... Печаль. 15 лет "коту под хвост".
Ладно, пойду дальше писать код на PHP.
Хотя какой это может быть код? Так... Каракули. Если я да же на джуна не тяну... "Пячаль"
Абсурд текущей ситуации на рынке заключается в том, что очень часто пройти собес на сеньора гораздо проще, чем на джуна. В то время как на джуновском собесе вам надо будет потеть и вспоминать все эти энциклопедические знания, на собесе на сеньора вы чилово пообщаетесь за паттерны и архитектуру))
Я, предположим, хоть и не программист, но почти всё понимаю. Но как представлю всё это дотошно и обстоятельно выдавать на гора словесным поносом... СОЛИД\ГРАСП\ГОФ или новинки языка наизусть знать чтобы от зубов отскакивало это вообще боль.
Согласен, таже фигня. Столько написал систем. Одни только боты по торговле криптой. Всё каракули.
Namespace - это механизм указания адреса конкретного класса в пространстве имен проекта.
Перефразирую по-русски:
Пространство имен - это механизм указания адреса [...] в пространстве имен проекта.
Понимаете, да, что определение явно неверное.
Indirection (Индирекция)
Обычно переводят как "перенаправление". Т.е. переназначение обязанностей по взаимодействию двух объектов третьему посреднику.
Можно, наверное, по мелочам еще попридираться. Детально не читал, многа букаф =)
Ну да ладно. В целом, по большому счету все правильно.
Да, кажется получилось масло-масляное, посмотрю что написано в доке и процитирую лучше ее
Этим и интересна статья, что на первый взгляд там все чинно и благообразно. Но если вчитаться, то там или бессмысленное бормотание в стиле чатика с искусственным интеллектом, или вдруг ни с того ни с сего какая-то дичь, от того же самого интеллекта на букву И. И все сразу становится на место.
Композицию выделяют как 4 принцип ООП и как альтернативу наследованию
3 Назовите простые типы данных, поддерживаемые в РНР.
А когда это массив и объект скалярами стали? https://www.php.net/manual/ru/function.is-scalar
7 Какие знаете принципы ООП?
Да уже забудьте про эту хрень и не заучивайте её.
SOLID проще и для понимания и для использования.
8 Какая система типов используется в PHP? Опишите плюсы и минусы.
Это вопрос из 90-х? Строгая типизация куда пропала?
19 Будут ли доступны частные методы trait в классе?
Ответ "Можно" :D
21 Расскажите об обработке ошибок и исключения (try catch, finaly и throw). Исключения необходимо для информативного оповещения об ошибке приложения.
Точно для этого? Я могу и 'trigger_error' заиспользовать, чтобы информативно что-то сообщить.
22 Что такое type hinting, как работает, зачем нужен?
После указанного ответа сразу же возникает вопрос "и что это дает?"
23 Что такое namespace-ы и зачем они нужны?
Удобное структурирование и группировка кода по контекстам (или иным причинам) вышли из чата.
29 Что такое замыкание в PHP? Приведите пример.
После указанного ответа сразу же возникает вопрос "зачем это use
используется?"
31 Что такое позднее статическое связывание? Расскажите о поведении и применения static.
Ответ не понятнее вопроса :D
34 Расскажите о принципах SOLID. "Принцип единственной ответственности - Каждый объект ... а все его сервисы должны быть ..."
Это что за такие сервисы класса? У класс/объекта только свойства и методы.
34 Расскажите о принципах SOLID. "Это означает, что эти сущности могут менять свое поведение без изменения их исходного кода."
Это как? Я же должен написать код, чтобы что-то поменять в наследнике?
Может тут все-таки речь про расширение поведения, с невозможность изменить изначальное?
34 Расскажите о принципах SOLID. "Принцип разделения интерфейса"
Это все хорошо (на самом деле нет), а интерфейсы то тут при чем?
Если какой-то метод не используется клиентом, то этого метода не должно быть в интерфейсе!
-
Если честно я уже думал на этом закончить чтиво, но после увидел это:
41 Что такое LAMP / NAMP?
ЗАЧЕМ? Зачем про это спрашивать?
LAMP-то ладно. Как раз ждунский вопрос. Куда интереснее, откуда в вопросе взялся этот "NAMP", и совершенно феерический ответ про него. Я не верю, что живой человек может написать такую ересь, это бред в стиле чат-жипити. Хотя конечно, если взять живого человека, то он примерно такую чушь и наплетет, впервые услышав про такую аббервиатуру. Мне кажется, это специальный вопрос для собеседования: если начнет врать про "NAMP", вместо того чтобы честно сказать "впервые слышу" - то всё, "спасибо, мы вам перезвоним".
Но вообще, статья - это что-то новое. Обычно дурь таких авторов сразу видна, но здесь текст на первый взгляд выглядит толковым. Чтобы его оценить, надо очень внимательно вчитываться. Шарлатанство выходит на новый уровень.
Вопрос №45 -
Строгая типизация для аргументов и возвращаемых значений функций
разве это не в php 7 ввели?
А статический анализ типов разве ввели? :)
Тут не один, тут половина ответов больше похожа на бред жипити, причем довольно плохо натренированного.
Вообще действительно - непонятно, почему автор часть ответов копировал из мануала, а часть - вот как этот - спрашивал у бредогенератора. Ведь здесь можно было точно так же скопировать, благо есть откуда. Загадка.
Назовите простые типы данных, поддерживаемые в РНР.
Стоит разделять типы и тайп-хинты. Это разные вещи. Типы определены на уровне переменной, а тайп-хинты проверяют тип на совпадение. И разделять типы в php следует именно по этим критериям.
В список типов PHP входят: bool
, float
, int
, string
, null
, object
, resource
, array
. Если мы учитываем внутренности языка (специфичные типы для VM), то ещё: undef
, false
, true
, reference
, const
.
А в список тайп-хинтов, помимо указанного списка, следует так же добавить true
, false
, parent
, static
, self
и композицию из юнион и интерсекшн типов.
Причём тут в списке вообще enum, тем более в "специальных типах" вообще не понятно, т.к. это обычный объект.
Какая система типов используется в PHP? Опишите плюсы и минусы.
> Используется динамическая система типов...
Опять мимо. Очевидно что строгая статическая или динамическая типизация уровня контрактов, а слабая динамическая только на уровне локального контекста.
Что такое type hinting, как работает, зачем нужен?
> ...который позволяет явно указывать типы параметров функций и типы возвращаемых значений.
А где про типы полей классов и типы констант в ответе?
Как работает session в РНР, где хранится, как инициализируется?
> ...Создается файл в директории на сервере, который указан в конфигурации php
Сессии в PHP работают так, как определено в SessionHandler. То что по умолчанию они пишутся в директорию, это так. Но это не означает что это везде и всюду так. Более того, на любом проекте, где больше полутора калек - это скорее наоборот, совершенно не так. А на проектах где больше одного сервера - при использовании файлов мы получаем замечательные баги)
Сравните include_once vs required_once.
> ..Ответ в пункте 9 с той лишь разницей, что при добавлении _once файл подключается единожды
А ещё, повторное включение через _once
вернёт true
, а не результат работы файла.
Что такое замыкание в PHP? Приведите пример.
> Замыкания в PHP представляют анонимную функцию, которая может использовать переменные из своего локального окружения. В отличие от обычных анонимных функций замыкания в PHP могут применять выражение use.
Так если анонимная функция не использует переменные из локального окружения, то с чего это ей быть замыканием? Тоже самое и про use, если его убрать, то с чего это такая функция будет замыканием?)
В чем разница между замыканием в PHP и JavaScript?
> ...В PHP для передачи переменных в замыкание часто используется ключевое словоuse
$var = 42;
$fun = static fn(): int => $var;
Ну и где тут в PHP use
?)
Что такое позднее статическое связывание? Расскажите о поведении и применения static.
Ну тут вообще дичь написана. Определение "связывания" означает прикрепление типа/ссылки к переменной. Определение "позднее" означает, что ссылаться переменная на кого-либо будет в рантайме, в отличие от "раннего", когда связывание происходит на этапе компиляции.
Позднее связывание в PHP (когда тип выводится в рантайме), если мы говорим про ссылки на классы, применяется в $this
, static
и некоторых случаях self
(когда self определён в трейте или анонимной функции).
Расскажите о принципах SOLID.
> ...Функционал, который наследуется от базового типа должен иметь возможность использовать функционал базового типа. Выносим только общий функционал из классов в базовый класс.
...
Что вам известно о MVC?
А ещё не стоит забывать, что в вебе нет MVC и его реализовать практически невозможно)))
Junior PHP. Ответы на часто задаваемые вопросы на технических собеседованиях