LINUX.ORG.RU
ФорумTalks

Собеседование php программиста

 ,


2

3

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

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

дык вопрос то не об этом.

вопрос . когда поведение которое нам достовляет php-интерпритатор при сравниени(на эквивалентность) переменной со значением TRUE - является нужным , что бы использовать такую забавную конструкцию а именно сравнение произвольной переменной ( с авто приведением к булову непосредственно либо через число) с булевым.?

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

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

тот код что выше в смысле моих претензий абсолютно ничем не отличается от эталонного говна которое привел ты (процитирую кусочек эталонного пехепешного говнеца)

$rrr=(bool)$rrr;

спрошу у тебя как у «нормального» программиста, зачем в php вообще такое приведение делать, оно ведь будет работать и без приведения всегда правильно? пару случаев я знаю - например, если в postgres базу вставлять то надо писать именно что true. или например чтобы на печать вывести true/false. Но чтобы присвоить той же переменной... гм..

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

тот код что выше в смысле моих претензий абсолютно ничем не отличается от эталонного говна которое привел ты (процитирую кусочек эталонного пехепешного говнеца)

не надо путать эталонный говнокод с примером приведения переменной к какому-либо определенному типу.

спрошу у тебя как у «нормального» программиста, зачем в php вообще такое приведение делать, оно ведь будет работать и без приведения всегда правильно?

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

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

такое приведение нужно произодить во всех местах, где данные уходят туда

честно говоря, даже мои примеры - бредятина, друг мой, редкостная. если у тебя объект или строка, то ты никак не можешь приводить их к булевскому типу в json. это эталонный говнокод как ни крути и проблема тут именно в php и твой код ничуть ни лучше моего ибо «нормальное» приведение имеет весьма странное поведение по умолчанию. как правильно спросили выше , не понятна ситуация в которой такое говно может понадобиться.

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

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

Этот код: if( $rrr == TRUE ){ $rrr = TRUE; } есть говно код. Что он делает НЕПОНЯТНО, поскольку это зависит от нескольких факторов, от того какой тип был у переменной $rrr, была ли она определена до этого и пр.

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

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

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

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

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

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

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

а кто сказал, что надо приводить объекты к булевому типу в json?

А на счет строк приведу простой пример. Пусть у нас в базе данных(MySQL) есть булева колонка. И пусть мы достаем оттуда данные через mysqli_ функции. Особенность работы mysqli_ заключается в том, что значения будут возвращены в строковом формате(то есть либо '1' либо '0').

Пока мы с этим работаем в php все прекрасно, так как '0' неявно преобразуется в false, а '1' неявно преобразуется в true.

Но, если мы это без дополнительных преобразований запакуем в json и отправим на клиента, то мы столкнемся с ошибкой, так как в js и '0' и '1' будут неявня преобразовыватся в true.

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

такое приведение типов это ад

это и есть php.

Динамическая типизация это не проблема

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

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

Особенность работы mysqli_ заключается в том, что значения будут возвращены в строковом формате(то есть либо '1' либо '0').

Но, если мы это без дополнительных преобразований запакуем в json и отправим на клиента, то мы столкнемся с ошибкой, так как в js и '0' и '1' будут неявня преобразовыватся в true.

mysqli возвращает булевские 0 и 1 не как строку а как целое. соотвественно с проблемой мы не сталкнёмся и тут потому что яваскрипт тоже интерпретирует 0 как false и 1 как true

а вот где будет проблема так это если мы преобразуем непустую строку (и не 0) или объект к булу. будет true и никто даже не пикнет. А ведь мы наверняка хотели бы иметь строку в виде строки, а уж никак не в виде була, не говоря уже о более сложном объекте.

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

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

mysqli возвращает булевские 0 и 1 не как строку а как целое. соотвественно с проблемой мы не сталкнёмся и тут потому что яваскрипт тоже интерпретирует 0 как false и 1 как true

А ты перед тем как писать это пробовал проверить? Если использовать функции mysqli_connect, mysqli_select_db, mysqli_query, mysqli_fetch_array, то на выходе у нас для булевых и чисел будут строковые представления, а не числа. И их приходится переводить в нужные типы если нам нужно дальше передавать их в json. Если же у тебя получилось получить результат числами, а не строками, я бы хотел увидеть код, которым ты этого добился.

а вот где будет проблема так это если мы преобразуем непустую строку (и не 0) или объект к булу. будет true и никто даже не пикнет. А ведь мы наверняка хотели бы иметь строку в виде строки, а уж никак не в виде була, не говоря уже о более сложном объекте.

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

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

А ты перед тем как писать это пробовал проверить?

пробовал, вывел echo $row['boolean_field'] + $row['boolean_field']; получил 2 (boolean_field было 1). Всё ваше php...

сейчас сделал вардамп, там действительно стринг.

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

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

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

пробовал, вывел echo $row['boolean_field'] + $row['boolean_field']; получил 2 (boolean_field было 1). Всё ваше php...

Ну, не только пхп себя так ведет. Вот, например, хваленный питон.

>>> a = True
>>> b = True
>>> print a+b
2

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

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

И да, ради интереса, адептом какого языка со строгой статической типизацией вы являетесь?

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

Вот, например, хваленный питон.

у хвалёного питона строгая статическая типизация?? питон - какашка с добавлением сахара (имхо). только вот лично я не уверен что если добавить в говно сахара, то вкус сильно измениться.

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

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

И да, ради интереса, адептом какого языка со строгой статической типизацией вы являетесь?

ну если уж вы меня на вы.. но как удобнее, конечно. scala.

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

ну если уж вы меня на вы.. но как удобнее, конечно. scala.

зачем вы обижаете наш славный маленький пхп мир?

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

думал-думал... не нашёл ответа. наверное комплексую.

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

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