Вывод переменной в ПХП

12
D
На сайте с 28.06.2008
Offline
1108
1289

Начинаю учить пхп, дошел до объявлени япеременных, как все же правильно и главное ПОЧЕМУ?:

1.

echo "$name";

2.

echo $name;

уже уходя из сети мой знакомый кодер написал

И еще, никогда не выводи переменные таким образом echo "Имя: $name";

только так

echo ".$name.";

Так какой же вариант все же правильный и почему?

danforth
На сайте с 18.12.2015
Offline
153
#1

Правильно:


<?php

$name = 'Вадим';

// Все что правильно:
echo $name; // правильно, если выводится одна переменная без какого-либо дополнительного текста

echo "Привет, меня зовут {$name}!"; // правильно, если переменная + текст

echo "Привет, меня зовут " . $name . "!"; // правильно, если переменная + текст (конкатенация)

echo 'Привет, меня зовут ' . $name . '!'; // правильно, если переменная + текст (в одинарных кавычках). Тоже конкатенация



// Все что работает, но...

echo "$name"; // незачем кавычки

echo "Привет, меня зовут $name!"; // сработает, но...

echo "Привет, меня зовут $nameыч"; // выведет все, кроме переменной, т.к. переменная $nameыч не определена. А вот {$name}ыч в этом случае сработает, т.к. переменная заключена в фигурные скобки

// Неправильно

echo ". $name ."; // это не правильная конструкция, так как ваш программист имел ввиду конкатенацию вне кавычек, вы напутали

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


echo "Привет, {$name}, как дела?";
Junior Web Developer
SI
На сайте с 03.12.2007
Offline
130
#2
Dram:
...
уже уходя из сети мой знакомый кодер написал

только так
echo ".$name.";


Так какой же вариант все же правильный и почему?

Ну этот вариант точно неправильный.

-= Онлайн сервисы =-
MK
На сайте с 18.08.2005
Offline
126
#3
Так какой же вариант все же правильный и почему?

Увидев строку в двойных кавычках рнр пытается найти в ней переменные и заменить их соотвт. значением + обрабатывает управляющие последовательности. Следовательно, определив таким образом строку, заставляем рнр сделать лишнее действие. Отсюда вывод 1: если строка не "собирается" путем включения в нее переменных, лучше в одинарных кавычках. Справедливости ради, разница во времени выполнения если и есть, то микроскопическая.

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


$s = 'Hi ' . $user . '!'; //или лучше $s = 'Hi '; $s.=$user; $s.='!';
$s = "Hi {$user}!";

с увеличением длины строки лучше конкатенация. Иными словами, если строка небольшая, то без разницы, а если увесистая, то конкатенация в варианте "или лучше". Когда то ставил эксперимент, на строке символов так с 60-80 разница появляется.

нет
PA
На сайте с 12.02.2016
Offline
24
#4

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

$u = array('name' => 'Ivan', 'age' => 15);

echo "Привет, {$u['name']}, Вам {$u['age']} лет.";
. . .
D
На сайте с 28.06.2008
Offline
1108
#5

danforth, спасибо, теперь все понял!

---------- Добавлено 09.06.2017 в 15:37 ----------

danforth:

// Неправильно

echo ". $name ."; // это не правильная конструкция, так как ваш программист имел ввиду конкатенацию вне кавычек, вы напутали

Вот его полная цитата

echo "Имя: ".$name."";
Z0
На сайте с 03.09.2009
Offline
817
#6
Dram:

Вот его полная цитата

Почти так и надо:

echo "Имя: ".$name;

🍿

DV
На сайте с 01.05.2010
Offline
644
#7

Касаемо "микрооптимизаций" соглашусь с Marat_Kh.

Предпочитаю везде, где возможно, использовать одинарные кавычки.

Предпочитаю везде, где возможно, не использовать заключение переменной в двойные кавычки.

И если надо, лучше сделаю лишнюю конкатенацию.

Это как правила хорошего тона.

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

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

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
AS
На сайте с 07.11.2014
Offline
24
#8

Если php7, то вместо конкатенации (и одинарных кавычек): echo 'Привет, меня зовут ' . $name!; лучше использовать переменные прямо в тексте: echo "Привет, меня зовут {$name}!";

Пруф

danforth
На сайте с 18.12.2015
Offline
153
#9

DenisVS, на эту тему можно долго спорить, а лучше показать:


Single quotes + concat: 0.0072970390319824


Double quotes + interpolating: 0.0037209987640381

10000 итераций на склеивание вот такой строки:

Hello, my name is Alex, i am 25 years old, and i living in NY now

Жирным выделены переменные. PHP7.

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

edogs software
На сайте с 15.12.2005
Offline
775
#10

Dram,

Правильные варианты php.net/manual/ru/language.types.string.php

Любой из вариантов правильный, битва за какой-то из вариантов - сугубо религиозна.

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

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий