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