Что происходит при вызове функции на PHP?

Stur

Guest
Что происходит при вызове функции на PHP?

Недавно начал программировать на PHP, а до этого занимался C++ и Pascal.
Так вот при вызове функции или процедуры (Pascal) происходит целая серия дополнительных команд для процессора. При входе в функцию в стек заносятся текущее значение определенных регистров процессора, а на выходе эти значения восстанавливается.
Точно не помню, но на ассемблере это будет выглядеть примерно так:
push ax
push bx
push cs
push ss
push ds
тело подпрограммы

pop ds
pop ss
pop cs
pop bx
pop ax
С точки зрения эффективности кода каждый вызов функции генерирует около 5 или больше дополнительных операций для процессора на входе и столько же на выходе помимо основного кода.
Поэтому рекомендуется использовать функции разумно, особенно если функция вызывается в цикле.
Вопрос: как происходит вызов функции на PHP?
 

Romantik

TeaM PHPClub
>а до этого занимался C++ ....

Ведь можно посмотреть исходники РНР.
 

Crazy

Developer
Вызов во всех процедурных языках примерно одинаков:

1. Сохранение контекста.
2. Передача управления.

Вот так же и в PHP. :)
 

[VS]

Guest
Stur: Если тебя волнует время потраченное на 5 ассемблерных операций - не трогай PHP, не для того он.

И паскаль и С++ тоже не для того. Пиши на чистом С, или на ассемблере сразу.
 

Stur

Guest
Stur: Если тебя волнует время потраченное на 5 ассемблерных операций - не трогай PHP, не для того он.

Конечно если функция вызывается если функция вызывается несколько раз можно не волноватся, а если эта функция используется в цикле где количество итераци = 10000000
тогда стоит призадуматся.

А сомнения по этому поводу возникли потому, что PHP это всетаки интерпритатор.(выполнение программы в программе)
Наверно сдесь эото решается по другому.

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

Crazy

Developer
Автор оригинала: Stur
а если эта функция используется в цикле где количество итераци = 10000000
Рекомендуется не использовать PHP для таких задач. Как и у всех специализированных средств, у PHP есть свой круг вопросов, на которые принято отвечать: "Вы не должны этого хотеть".

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

Stur

Guest
Провел небольшой экспиремент на эту тему. вот исходный код
<?php
кол итераций = 1000000
function test($x){
return ($x*2-45+$x);
}
***
***
дальше в цикле вызывается эта функция и потом такиеже действия только без функции действия без функции.
засекаем время до цикла и после
?>
результаты:
с вызовом функции время =4,917 (с)
без функции время=2,489(с)
Кстати еще вспомнил, приобращении к полям классов происходит нечто подобное.
 

Дед Анвирыч

Новичок
Автор оригинала: Stur
результаты:
с вызовом функции время =4,917 (с)
без функции время=2,489(с)
Кстати еще вспомнил, приобращении к полям классов происходит нечто подобное.
Упс... И что теперь... ни функций, ни ООП
 

.des.

Поставил пиво кому надо ;-)
Анвирыч, а у тебя часто в пхп скриптах встречаются циклы в 1000000 итераций?
 
Сверху