Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigene Extension schreiben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eigene Extension schreiben

    Ich bin schon seit langem daran interessiert mir mal eine eigene Extension f�r PHP zu programmieren. Nun ist es ja nicht unbedingt schwer einfache Funktionen zu implementieren darum wollte ich auch mal weiter zu einer eigenen Klasse. Nur komme ich mit den Hilfen aus meinem PHP5 Buch da nicht mehr unbedingt weiter. Okay es ist alles beschrieben aber was wie wo hin muss ist da nicht unbedingt beschrieben. Das meiste muss ich selbst rumtesten. Nun habe ich mir eine Klasse geschrieben die in PHP wie folgt aussehen w�rden:

    Code:
    class Foo {
        public function __construct($a, $b) {
            printf("a: %s\nb: %s", $a, $b);
        }
    }
    Erstelle ich jedoch eine neue Instanz der Klasse Foo, so bekomme ich nichts ausgegeben.

    php_foo.h
    Code:
    ZEND_METHOD(rss2, __construct);
    foo.c
    Code:
    PHP_MINIT_FUNCTION(foo)
    {
    	/* If you have INI entries, uncomment these lines
    	ZEND_INIT_MODULE_GLOBALS(foo, php_foo_init_globals, NULL);
    	REGISTER_INI_ENTRIES();
    	*/
    	zend_class_entry foo_ce;
    	INIT_CLASS_ENTRY(foo_ce, "foo", NULL);
    	foo_ce_ptr = zend_register_internal_class(&foo_ce);
    	return SUCCESS;
    }
    
    function_entry foo_functions[] = {
        PHP_ME(foo, __construct, NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
    };
    
    /*...*/
    
    ZEND_METHOD(foo, __construct)
    {
        char *a, *b;
        int a_len, b_len;
    
        if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
                                 "ss", &a, &a_len,
                                       &b, &b_len) == FAILURE) {
            return;
        }
    
        php_printf("a: %s\nb: %s", a, b);
    }
    Mache ich nun:

    Code:
    <?php
    
        $foo = new foo('hallo', 'welt');
    
    ?>
    so passiert nichts. Ich bekomme nichts ausgegeben. Wieso?

    (Falls irgendwas wichtiges vom Code fehlt, bitte bescheid sagen, da ich nun nicht alles kopieren wollte und auch nicht genau weiss, was man braucht um den Fehler zu finden)

  • #2
    So nun hab ich es hinbekommen. Ob nun der Konstruktor überhaupt funktioniert hätte weiss ich nicht, aber
    Code:
    function_entry foo_methods[] = {
        ....
    }
    hat mir da weitergeholfen anstatt von foo_functions[]. Zudem musste ich bei INIT_CLASS_ENTRY(foo_ce, "foo", NULL); das NULL durch foo_methods ersetzen und es geht

    Kommentar


    • #3
      Also ich dachte das man mit __construct einer Klasse Werte übergibt. Also wenn man z.B. irgendwo eine Variable von Code in die Klasse bringen muss...

      Kommentar


      • #4
        @Shade:
        http://www.php.net/manual/de/language.oop5.decon.php

        Kommentar


        • #5
          @shade:
          Schon mal was von Datenkapselung gehört? Eher nicht, gell? Die get-/set-Methoden übernehmen das "Reingeben" und "Rausholen" der Variablen.
          [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

          Kommentar


          • #6
            Hier:
            http://www.fruit-lab.de/index.php?si...oad&subsite=10

            Wenn du mal ein Blick in ein paar classen machen willst.

            Der Konstruktor ist wie an Java angelehnt einfach eine funktion mit dem selben namen wie die Klasse. einen Destruktor habe ich noch nie benutzt.

            Beste Grüße,
            Tim
            Typo3 Suchmaschinenoptimierung <- alles Rund um SEO mit Typo3

            Kommentar

            Lädt...
            X