Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строки и переменные 
:(
    Опции темы
Rtm
  Дата 16.6.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 8.2.2006

Репутация: нет
Всего: 1



Код

$y = "word";

объясните разницу, плз, между:
Код

$x = "hello $y !"

и
Код

$x = "hello ".$y." !";
 
PM MAIL   Вверх
skyboy
Дата 16.6.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Rtm, выдаёт одинаковый результат. Значит, идентично. Как на меня, правда, то второй вариант нагляднее. Хотя, интуиция подсказывает мне, что в первом случае вызывается чё-то типа inline-подстановки, а во втором - явно вызывается функция с передачей параметров... пойду, протестирую... 
PM MAIL   Вверх
BobiKK
Дата 16.6.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



Результат будет один. 
Конструкция "hello $variable" выполнится немного быстрее. Однако, конструкции типа "hello trim($variable)" - недопустимы. В то время как "hello".trim($variable) - нормально
Кроме того, могут возникнуть проблемы с ипользованием ассоциативных массивов. Т.е., "hello $array['first']" может иногда приводить к ошибкам. 
PM MAIL   Вверх
Mal Hack
Дата 16.6.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



И где тут функция есть?

Цитата(BobiKK @  16.6.2006,  14:37 Найти цитируемый пост)
Конструкция "hello $variable" выполнится немного быстрее.

Да????

Вот интерпретатор получает на вход строку, начинает ее парсить. Быстрее будет работать вариант с точками. Второй вариант, когда переменная указывается внутри строки и в {}, третий - просто $var... 
PM ICQ   Вверх
skyboy
Дата 16.6.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Код

for($i= 0; $i< 10000;$i++) 
 {
  $y= rand(1,1000);
  echo "one ".$y." two";
 }
for($i= 0; $i< 10000;$i++) 
 {
  $y= rand(1,1000);
  echo "one $y two";
 }

Этот код был прогнан через профайлер, который в аттаче. Вот результат:
Код

  1    111.8588 ms (32.05 %)  concat
  1    222.1160 ms (63.63 %)  inline

"Concat"- это я так назвал явный вариант с точками, а "inline" - вариант с внесением переменной внутрь строки.
Потом я подмал,что причина может быть в порядке вычислений и поменял местами варианты. Правда, результат мало изменился:
Код

  1    150.9390 ms (39.25 %)  concat
  1    231.5259 ms (60.21 %)  inline

Потом я подумал, и увеличил счётчик до 100000.
Код

  1    2985.5781 ms (50.40 %)  concat
  1    2936.4960 ms (49.57 %)  inline

Разница исчезла. Видимо, это была какая-то лажа, с подсчётом. Или же... Нет предела идиотизму smile Я поставил счётчик на 1000000 и получил 
Код

  1    83479.7170 ms (64.27 %)  concat
  1    46403.3411 ms (35.73 %)  inline

Причём результат устойчивый smile С чем связано такое смещение производительности, я не знаю, но тут явно какая-то фишка есть smile Может, кто объяснит? 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  php_profiler.tar.gz 3,98 Kb
PM MAIL   Вверх
BobiKK
Дата 16.6.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



Код

<?php
function getmicrotime()
{
   list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);


$time_start = getmicrotime();
for ($i = 0; $i < 30000; $i++)
{
    $array[$i] = "hello $i";
}

$time_end = getmicrotime();
$time = $time_end - $time_start;


$time2_start = getmicrotime();
for ($i = 0; $i < 30000; $i++)
{
    $array2[$i] = "hello ".$i;
}

$time2_end = getmicrotime();
$time2 = $time2_end - $time2_start;


$time3_start = getmicrotime();
for ($i = 0; $i < 30000; $i++)
{
    $array3[$i] = "hello {$i}";
}
$time3_end = getmicrotime();
$time3 = $time3_end - $time3_start;

echo "First: ".$time."<br>";
echo "Second: ".$time2."<br>";
echo "Third: ".$time3."<br>";
?>


First: 0.0955958366394
Second: 0.0795040130615
Third: 0.0952532291412

Признаю, фигню сказал smile 
PM MAIL   Вверх
Mal Hack
Дата 16.6.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



skyboy,  Неправильный у тебя тест. Делали мы уже где-то подобное. Тестировать надо в трех разных файлах, только тогда у тебя может быть реальное полоджение дел.
Плюс, выкинуть y из цикла. 

Это сообщение отредактировал(а) Mal Hack - 16.6.2006, 14:07
PM ICQ   Вверх
Guedda
Дата 16.6.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 13
Всего: 78



Точки ставятся чисто для удобства. Чтобы можно было потом код разобрать. Моё ИМХО.
И ещё, если нечаянно ошибешься, и вместо этого:
Код

x = "Hello, $y";

напишешь:
Код

x = 'Hello, $y';

то на экране появится:
Код

Hello, $y

Вот и всё отличие, я думаю...  

Это сообщение отредактировал(а) Guedda - 16.6.2006, 16:27


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Mal Hack
Дата 16.6.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Guedda @  16.6.2006,  17:27 Найти цитируемый пост)
Вот и всё отличие, я думаю...  

Я выше описал отличия...
А вообще отличия кроются в понимании смысла того, что есть "литерал". PHP, к сожалению, очень много "прощает" пользователям... 
PM ICQ   Вверх
skyboy
Дата 17.6.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Mal Hack, разве цикл не даёт усреднение результатов?
Ок. Протестирую в разных файлах. А нельзя ваши тесты где-нить глянуть? 
PM MAIL   Вверх
Mal Hack
Дата 17.6.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(skyboy @  17.6.2006,  19:43 Найти цитируемый пост)
Mal Hack, разве цикл не даёт усреднение результатов?

Вот если ты затестируешь на 50 разных машинах, по 100 раз, на 10 разных системах, на разных серверах, и т.п. Вот тогда это будет усреднение. smile

Цитата(skyboy @  17.6.2006,  19:43 Найти цитируемый пост)
Ок. Протестирую в разных файлах. А нельзя ваши тесты где-нить глянуть?  

Не смог их найти. Либо на этом форуме где-ть, либо на форуме вовеба. 
PM ICQ   Вверх
Rtm
Дата 19.6.2006, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 8.2.2006

Репутация: нет
Всего: 1



так какой же вывод ? 
PM MAIL   Вверх
Mal Hack
Дата 19.6.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Через точки. 
PM ICQ   Вверх
Штык
Дата 19.6.2006, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 9.5.2005
Где: Москоу

Репутация: нет
Всего: 1



хммм..на мой взгляд вариант с точками более читаем в коде..и это плюс) 
--------------------
Lachetes familieresQui nous rendent guerrieres
PM MAIL WWW ICQ   Вверх
Kefir
Дата 19.6.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



точки. читабельнее, и, всё-таки, быстрее. где-то была подобная тема уже. и там тестировали. 
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.