powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP и ссылки
6 сообщений из 6, страница 1 из 1
PHP и ссылки
    #38025656
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, насколько корректно работать в php со ссылками на переменные? Если посмотреть на некоторые фреймворки, например yii в нем ссылки не используются вообще.
...
Рейтинг: 0 / 0
PHP и ссылки
    #38025659
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spider13,

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

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

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


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

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

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

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

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


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

Плодиться они и так и так будут. Если не использовать передачу по ссылке то плодятся обычные переменные, если использовать то ссылочные (их и так и так где-то хранить надо, что значение, что ссылку на значение). Только при втором варианте можно запросто получить трудно отлавливаемые баги.
...
Рейтинг: 0 / 0
PHP и ссылки
    #38025742
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP и ссылки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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