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

  • Автор темы Автор темы Stur
  • Дата начала Дата начала

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?
 
>а до этого занимался C++ ....

Ведь можно посмотреть исходники РНР.
 
Вызов во всех процедурных языках примерно одинаков:

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

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

И паскаль и С++ тоже не для того. Пиши на чистом С, или на ассемблере сразу.
 
Stur: Если тебя волнует время потраченное на 5 ассемблерных операций - не трогай PHP, не для того он.

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

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

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

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