Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP и ссылки / 6 сообщений из 6, страница 1 из 1
05.11.2012, 14:49:34
    #38025656
spider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP и ссылки
Подскажите, насколько корректно работать в php со ссылками на переменные? Если посмотреть на некоторые фреймворки, например yii в нем ссылки не используются вообще.
...
Рейтинг: 0 / 0
05.11.2012, 14:58:20
    #38025659
SergSW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP и ссылки
spider13,

В php есть ссылки на переменные???? Это новость.
Насколько помню есть передача параметров по ссылке, но это несколько иное.
Использовать это нормально, во многих случаях полезно. Только использовать по назначению и сознательно, а не как попало.
...
Рейтинг: 0 / 0
05.11.2012, 15:05:28
    #38025666
spider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP и ссылки
SergSWspider13,

В php есть ссылки на переменные???? Это новость.
Насколько помню есть передача параметров по ссылке, но это несколько иное.
Использовать это нормально, во многих случаях полезно. Только использовать по назначению и сознательно, а не как попало.

Передача параметров по ссылке? и все? а как тогда рассматривать конструкцию, например
Код: php
1.
foreach($variable as &$value)


здесь это по моему уже не параметр, ну да ладно, не в этом суть.

Мне кажется что даже "неосознанное" должно ускорить работу, так как не будет плодится меньшее количество переменных, соответственно увеличится производительность, хотя и незначительно. Это лично мое мнение, оно может быть ошибочным, поэтому я вообще то и создал тему.
...
Рейтинг: 0 / 0
05.11.2012, 15:14:26
    #38025672
SergSW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP и ссылки
spider13,

spider13Передача параметров по ссылке? и все? а как тогда рассматривать конструкцию, например

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

Можете написать тесты и посмотреть что получится.
...
Рейтинг: 0 / 0
05.11.2012, 15:17:00
    #38025676
SergSW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP и ссылки
SergSW,


spider13плодится меньшее количество переменных

Плодиться они и так и так будут. Если не использовать передачу по ссылке то плодятся обычные переменные, если использовать то ссылочные (их и так и так где-то хранить надо, что значение, что ссылку на значение). Только при втором варианте можно запросто получить трудно отлавливаемые баги.
...
Рейтинг: 0 / 0
05.11.2012, 16:41:13
    #38025742
SergSW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP и ссылки
SergSW,

Был не прав.
Накидал небольшой тест
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<?php

$array = array();
for ($index = 0; $index < 1000000; $index++) {
    $array[] = rand(0, 255);
}

$res = array();
for($index = 0; $index < 100; $index++){

    $start = microtime(TRUE);
    //echo "start: $start<br>\r\n";

    foreach ($array as $value) {
        $value = 5 * $value;
    }

    $p1 = microtime(TRUE);    
    //echo "No references: ".($p1 - $start)."<br>\r\n";

    foreach ($array as &$value2) {
        $value2 = 5 * $value2;
    }

    $p2 = microtime(TRUE);
    //echo "References: ".($p2 - $p1)."<br>\r\n";
    $res[] = array( 'noref' => $p1 - $start, 'ref' => $p2 - $p1);
}

$min1 = $min2 = 1000000;
$max1 = $max2 = 0;
$sum1 = $sum2 = 0;
foreach ($res as $value) {
    if($value['noref'] < $min1)
        $min1 = $value['noref'];
    if($value['noref'] > $max1)
        $max1 = $value['noref'];
    
    if($value['ref'] < $min2)
        $min2 = $value['ref'];
    if($value['ref'] > $max2)
        $max2 = $value['ref'];
    
    $sum1 += $value['noref'];
    $sum2 += $value['ref'];
}

$avg1 = $sum1 / count($res);
$avg2 = $sum2 / count($res);
$precent = ($avg2 - $avg1)*100/$avg1;

echo "Result: <br>\r\n Min: Noref = $min1, Ref = $min2 <br>\r\n Max: Noref = $max1, Ref = $max2 <br>\r\n Avg: Noref = $avg1, Ref = $avg2 <br>\r\n Precent: $precent";

?>



Любопытные результаты. У меня получилось
Код: plaintext
1.
2.
3.
4.
Result:
Min: Noref = 0.20772385597229, Ref = 0.1841778755188
Max: Noref = 0.28193593025208, Ref = 0.22190999984741
Avg: Noref = 0.22655404806137, Ref = 0.18652829170227
Precent: -17.667199814615
т.е. работа в таком синтетическом тесте ссылками на 17% быстрее в абсолютных значениях не так впечатляет 0,04 мс на одном полном цикле.

Хоть и быстрее работает, всё таки я рекомендую не делать это бездумно, а только там где это действительно нужно.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP и ссылки / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]