Ich erstelle eine Erweiterung, die mehrere Klassen hat und einige von ihnen Methoden, die Instanzen einer anderen Klasse zurückgeben sollen. Dies ist für PHP 7+ und nicht für etwas anderes.PHP-Erweiterung: Wie ein neues Klassenobjekt zurückgegeben wird
Zum Beispiel muss ich den PHP-Code, so etwas sein (ich bin eine ALPM PHP-Erweiterung erstellen) ...
$handle_object = new Handle("/", "/var/lib/pacman");
$db_object = $handle_object->get_localdb() /* this returns a Db object */
Der Code, den ich so weit ist ... haben
PHP_METHOD(Handle, get_localdb) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
RETURN_NULL()
}
zval *db_obj = (zval*)emalloc(sizeof(zval));
handle_object *intern = Z_HANDLEO_P(getThis());
object_init_ex(db_obj, alpm_ce_db);
}
Ich habe keine Ahnung, ob ich auf der richtigen Spur oder weit davon entfernt bin.
Für mehr Code aus dem Projekt (bisher), habe ich es auf gist (https://gist.github.com/markzz/27b0aa1123d61a5f9d80ee3aea390f20) gebucht.
Etwas neben 'object_init_ex (return_value, alpm_ce_db);' sollte in die richtige Richtung gehen. 'return_value' wird an jede Funktion und Methode übergeben und enthält den Wert, der zurückgegeben werden soll (initialisiert auf NULL) – bwoebi