PHP "Innenleben" von Funktionen

  • Ersteller Ersteller Mr. Snoot
  • Erstellt am Erstellt am
M

Mr. Snoot

Gast
Hio,

gibt es eine Möglichkeit zu sehen, wie eine Funktion in PHP intern aufgebaut ist?

Ich könnte mir ja bspw. selbst mit dem Bubblesort-Algorithmus eine sort()-Funktion schreiben. Ich würde aber gerne wissen, wie die "echte" sort()-Funktion arbeitet.
 
Zuletzt bearbeitet:
Die Funktionen im Source Code sind aber natürlich nicht in PHP geschrieben, aber was dein sort angeht so würde ich stark davon ausgehen, das es ein quicksort ist. Generell gilt aber, dass du immer PHP interne Funktionen benutzen solltest, weil diese schneller sind.
 
Siehe Trainmaster.. wenn PHP schon open source ist, dann darf man auch gerne mal einen Blick reinwerfen ;)
 
Aus dem Sourcecode werd ich leider nicht wirklich schlau. Da steht zwar in der Datei basic_functions.c etwas zu den Funktion, aber nichts wirkliches zum Algorithmus.

Weiß jemand, wo das stehen sollte?
 
Interessante Frage. Ich hab grad auch gesucht und folgendes gefunden:
Code:
PHP_FUNCTION(sort)
{
	zval *array;
	long sort_type = PHP_SORT_REGULAR;

	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
		RETURN_FALSE;
	}

	php_set_compare_func(sort_type TSRMLS_CC);

	if (zend_hash_sort(Z_ARRVAL_P(array), zend_qsort, php_array_data_compare, 1 TSRMLS_CC) == FAILURE) {
		RETURN_FALSE;
	}
	RETURN_TRUE;
}

php_set_compare_func sollte sich vom Namen her selbst erklären. Dann wird zend_hash_sort aufgerufen:
Code:
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func,
							compare_func_t compar, int renumber TSRMLS_DC)
Der 1. Parameter hier ist der Array. Dieser scheint eine verkettete Liste zu sein und für die Sortierung in einen Array übertragen (arTmp).
Dann wirds interessant:
Code:
(*sort_func)((void *) arTmp, i, sizeof(Bucket *), compar TSRMLS_CC);
(*sort_func) ist der 2. Parameter aus dem Aufruf und entspricht zend_qsort.
Code:
ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t compare TSRMLS_DC)
Das wiederum müsste wie im Manual erwähnt die QuickSort implementation sein.

Nach dem sortieren reorganisiert die Funktion die verkette Liste und ist damit fertig.
 
Zurück
Oben