Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Обьясните код
Форумы портала PHP.SU » » Вопросы новичков » Обьясните код

Страниц (1): [1]
 

1. dj_vadim - 04 Августа, 2011 - 14:29:17 - перейти к сообщению
что значит следующий код
PHP:
скопировать код в буфер обмена
  1. $BM =& load_class('Benchmark', 'core');
  2. $BM->mark('total_execution_time_start');
  3. $BM->mark('loading_time:_base_classes_start');

копаюсь в ядре движка code igniter 2.0.2 Подмигивание
2. OrmaJever - 04 Августа, 2011 - 14:36:29 - перейти к сообщению
функция load_class() возвращает ссылку на обьект которая записывается в $BM затем вызывается метод mark() обьекта $BM
3. Arni - 04 Августа, 2011 - 14:44:12 - перейти к сообщению
OrmaJever, а где это может реально пригодиться в практике, есть пример кокой?
4. OrmaJever - 04 Августа, 2011 - 14:46:16 - перейти к сообщению
чего пример?
5. Arni - 04 Августа, 2011 - 15:00:27 - перейти к сообщению
Зачем это нужно если



Не создает новый объект (не учитывая того что это не совсем так в более ранних версиях php). Либо я вообще не понял правильно что тут.
6. OrmaJever - 04 Августа, 2011 - 15:05:43 - перейти к сообщению
$obj1 и $obj2 это 2 разных обьекта одного класса, тоесть если именить обьект 1 то на 2 это никак не повлияет, ну и конешно память занята двумя обьектами. А если зделать сылку
$obj1 = &$obj2
то память будет занята только под один обьект а $obj1 это просто сылка на $obj2. Это выгодно в многих случаях но пока не могу дать конкретный пример.
7. Arni - 04 Августа, 2011 - 15:16:27 - перейти к сообщению
OrmaJever пишет:
$obj1 и $obj2 это 2 разных обьекта одного класса, тоесть если именить обьект 1 то на 2 это никак не повлияет, ну и конешно память занята двумя обьектами. А если зделать сылку


Это в старых версиях. В новых чтобы продублировать объект нужно



Иначе это один и тот же объект как и в java
8. dj_vadim - 05 Августа, 2011 - 22:45:52 - перейти к сообщению
OrmaJever пишет:
функция load_class() возвращает ссылку на обьект которая записывается в $BM затем вызывается метод mark() обьекта $BM

если чесно, я так и не понял сути ...
9. Arni - 05 Августа, 2011 - 22:56:06 - перейти к сообщению
dj_vadim пишет:
если чесно, я так и не понял сути ...


Переменную можно хранить в памяти, она там занимает определенное количество байт (кБ, мБ). Но иногда нам может понадобиться синоним переменной, например для того чтобы их загнать в массив, а с массивами как известно проще работать в циклах. Мы можем создать массив переменных, тем самым продублировав переменную физически. А это приводит к утечке памяти. Это может не устроить педантов в программировании, а может не вписаться в ресурсы. Любой из вариантов возможен. Поэтому мы создаем не массив переменные, а массив указателей на переменную в памяти. Таким образом, получаем свой массив, крутим его в циклах. Таким образом получается что и память цела и задача выполнена.

Возможно мой пример не очень вписывается под этот конкретно случай, но в целом чтобы вам было более доступно.
10. LIME - 05 Августа, 2011 - 23:13:40 - перейти к сообщению
dj_vadim надо учитывать для какой версии пхп этот код
код делает синоним для обьекта в 4.х пхп
а в 5.х достаточно присвоить переменной другую
кстати вопрос
а этот код в 5 пхп будет правильно работать? может он просто универсален для всех версий?
11. Arni - 05 Августа, 2011 - 23:46:21 - перейти к сообщению
LIME пишет:
dj_vadim надо учитывать для какой версии пхп этот код
код делает синоним для обьекта в 4.х пхп
а в 5.х достаточно присвоить переменной другую
кстати вопрос
а этот код в 5 пхп будет правильно работать? может он просто универсален для всех версий?


Как я и говорил выше Улыбка

Он универсален для всех версий. Многие программисты попались на этот прикол в старых версиях пхп.

 

Powered by ExBB FM 1.0 RC1