«Функция» print
Одним из распространённых заблуждений программистов на ПХП является то, что конструкция print является, якобы, функцией. На самом деле никакая она не функция — ей даже скобки не нужны, чтобы работать. Но с функцией print роднит то, что при вызове в составе выражения она всегда возвращает «1».
Весь ужас этого заблуждения как раз в использовании этой конструкции со скобками. Я программирую на ПХП уже около 15 лет, но всего пару раз за это время видел как это заблуждение рождает проблемы, но зато какие!
Я, понятное дело, напишу утрированный случай, чтобы проиллюстрировать проблему. Как думаете, что выведет следующий код?
var_dump(print("xaxa") + 1);По идее, должна выполниться «функция» print, вывести «xaxa», вернуть «1», которая сложится со второй единицей и var_dump выведет их сумму — «2».
Как бы не так! На самом деле, с точки зрения конструкции print (которой не нужны скобки) ей передали аргумент «(„xaxa“) + 1». При их складывании левая часть преобразуется к числу и получается «0», сумма нуля и единицы — «1», вот print его и напечатает, потом вернёт единицу, которую напечатает var_dump.
Комментарии 19
Но вот зачем писать var_dump(print()) ? Не понимаю.
Зачем вообще нужен print() кроме как по историческим причинам, когда echo делает то же самое?
Да нечем, там же написано, что так проще проблему проиллюстрировать!
Это две разные конструкции — print можно использовать как функцию, а echo — нет.
А вообще есть очень простые правила.
1. Если не хотите проблем с PHP, то пишите на PHP так как будто это Java/C#.
2. Если не хотите проблем с Java/C#, то пишите на них так, как будто это С++.
3. Не хотите проблем с C++ пишите так, как будто это Assembler.
И тогда мир расцветет всеми красками, и лев ляжет с ягненком, и женщины перестанут симулировать для вас оргазм…
4. А на Assembler надо писать так, будто вы собираетесь перепаять работающую под напряжением плату.
Но этим я никогда не занимался.
Вас обманули, не надо так делать.
Комментарий для Евгения Степанищева:
Так не работает:
И так не работает:
Так как же мне юзать print() как функцию? echo('test') никто не запрещает же делать. Ячто-то не очень понимаю %)
Комментарий для Евгения Степанищева:
Дело не в том что я не понимаю что это пример, а в том что это самое реалистичное использование print() которое я видел за свою жизнь :)
printf(), без вопросов, полезное, а вот print()…
Комментарий для hshhhhh.name:
Ну конечно не работает, функции print нет же. print можно использовать в выражениях, а echo — нет. В этом разница. Особо полезным это не назовёшь, но примеры использования я видел.
Я редко видел примеры использования print, но они были. Не сказать, чтобы print там была необходима, просто использовалась. Например,что-то вроде
«что-то»;
return print
Если всё это обсуждение сводится к вопросу есть ли
Комментарий для Евгения Степанищева:
Ну как бы да, я про это.
Я понимаю что и print, и echo -- это языковые конструкции, а не функции. Но я не понимаю проблемы с print() потому что решение очень простое: не надо им пользоваться и надо не быть идиотом :).
Ну я даже не знаю. Убивать за идиотизм? :)
Человек строку сэкономил. :)
Я, на самом деле, такой подход понимаю, просто не разделяю больше. «Хитрое» комбинирование конструкций — в это интересно очень играть, такая зарядка для ума. Просто в работе это мешает.
А в чем плох мой подход, согласно которому вместо того, чтобы использовать все возможности языка, позволяющие нарваться на большие проблемы (причем практически любому программисту не являющегося экспертом именно в этом языке), мы искуственно на уровне внутренних стандартов компании ужесточаем стиль программирования?
Ничем, пока приходится иметь дело с кодом только внутри компании и работать в компаниях где все этот подход принимают.
А из всех остальных компаний надо бежать.
Поскольку в силу низких требований к качеству разработки там и рейты соответствующие, и народ не тот, и компания эксплуатирует тебя, а не ты компанию.
Ну тогда вы сбежали бы из «Яндекса», например, а там было замечательно :)
$x = include(«value.php») + 1;