PHP-Funktionen Extrahieren ?

gOmax

Mitglied
Morgen :)

Ich verwende Eclipse PDT um PHP Code zu produzieren und dort ist eine Library vorhanden mit PHPinternen Klassen und Interfaces (so wie bei JAVA im VM "src"-Verzeichnis). Diese lib wurde mittels eines "generate.php" Skriptes erstellt und basiert wohl auf den derzeitig aktivierten Extensions die in der PHP.ini aktiviert sind.

Ich wollte diese Lib mit meinen Extensions neu erstellen aber es Funktioniert nicht :\

Gibt es eine andere Möglichkeit an die PHP-src heranzukommen ?
Kennt jemand auch eine Möglichkeit eine Doku mit dieser src und phpdoc erstellen zu lassen ?

Danke
 
Entschuldigt für den Doppelpost aber es ist mir wichtig ;)

Zum Verständnis:

Es geht um die SPL (Standard PHP Library) die ich in ".php"-Dateien Extrahieren möchte. Die SPL setzt sich ja Individuell aus den aktivierten Extensions für PHP zusammensetzt (glaub ich).
Diese möchte ich als "BuildPath" in mein TestProjekt einbinden weshalb ich dort die ".php"-Dateien brauch.

Gibt es da eine Möglichkeit das zu realisieren ?
 
Moin,

ich nutze PDT nicht und habe auch gerade keine passenden Dokumente gefunden um zu verstehen, was du genau brauchst oder wie es aussehen soll.

Offiziell einsehbar ist der SourceCode im Netz von SPL z.b. unter http://cvs.php.net/viewvc.cgi/php-src/ext/spl/ allerdings möchtest du ja den Code haben von den Extenstions, die bei dir lokal laufen. Mir ist nicht bekannt, das der PHP Source Code normal im Plaintext nochmal irgendwo rumliegt, es wird halt nur unter Linux der Source compiliert und wird dann meistens gelöscht. Unter Windows nutzt man direkt die vorkompilierten Binaries.

Um sonst Informationen über vorhandene Extenstions und ihre Funktionen zu kriegen, gibt es diverse PHP Interne Funktionen. Beispielhaft zu nennen wäre "get_loaded_extensions()", "get_extenstion_funcs()" usw.
http://de.php.net/manual/en/ref.info.php

Dann hast du noch die Möglichkeit deklarierte Klassen auszulesen, sowie informationen dazu, Beispiel:
PHP:
get_class_methods — Gets the class methods' names
get_class_vars — Get the default properties of the class
get_declared_classes — Returns an array with the name of the defined classes
get_declared_interfaces — Returns an array of all declared interfaces
get_object_vars — Gets the public properties of the given object

http://de.php.net/manual/en/ref.classobj.php

Dann gibt es von SPL direkt noch eine Funktion, die dir die vorhandenen Klassen ausgibt: "spl_classes()"
http://de.php.net/manual/en/function.spl-classes.php

Eine komplette Dokumentation im phpDOC Format zu SPL findest du unter
http://www.php.net/~helly/php/ext/spl/
direkt vom Entwickler Marcus Boerger aka Helly.


Hoffe das hilft dir erstmal, eventuell wenn du mehr Informationen zu Eclipse PDT lieferst können auch andere Forumuser helfen oder es gibt direkt jemanden, der davon Ahnung hat.

Gruss
 
Guten Morgen Mairhofer :)

Mairhofer hat gesagt.:
Offiziell einsehbar ist der SourceCode im Netz von SPL z.b. unter http://cvs.php.net/viewvc.cgi/php-src/ext/spl/

Erstmal Danke für deine Antwort und den Link, hilft mir aufjeden Fall schonmal etwas weiter :)


Es ist ein wenig schwierig zu erklären was genau ich meine, ich probier es trotzdem nochmal ;)

Also:

Im PDT ist ein "generate.php"-Skript enthalten (unter "ECLIPSE-FOLDER/plugins/org.eclipse.php.core_2.0.0.HEAD/Resources/language")was man für die Generierung für ein "Language Model" verwenden kann. Das bedeutet, dass durch dieses Script die derzeit aktiven (laut php.ini) Extensions des verwendetet Servers ausgelesen werden und für jede Extension ein .php-File mit einer Klasse generiert wird, z.B. für php_mycrypt.dll ein PHP-file "mycrypt.php" mit der Klasse "Mycrypt", worin sich dann alle Funktionen und Variablen incl. Dokumentation der jeweiligen Extension befinden ;)

Leider funktioniert das Script bei mir nicht so ganz und die Readme die enthalten ist ist für Linux-Systeme ausgelegt. :\

Zum besseren Verständnis was ich meine, habe ich die generate.php + readme in einer .zip als Anhang angehängt. Zusätzlich brauch man dafür noch den aktuellen PHPdocumentor ;)

Laut der Readme solle man sich auch von Zend, von denen auch das Script ist, ein sogenanntes "Zend CE" herunterladen, was ich aber dort nirgends finden kann.

Um das PDT zu verwenden brauch man natürlich noch Eclipse und einige andere Plugins, worauf man auch auf der Downloadseite von PDT hingewiesen wird. Ich selber verwenden seit heute mal PHPeclipse, nur zum Testen.

Um zu erklären was ich damit vorhabe:
Ich möchte, als Anfänger ;) , immer gut sehen knnen WAS ich aufgrund meiner aktivierten extensions alles für Funtionen der jeweiligen verwenden kann und wie sie aufgebaut sind. Natürlich erleichtert mir das auch das programmieren durch die Documentation der extension-Files da ich so nicht immer die Referenz aufrufen muss. Eclipse-PDT bietet mir dafür ein MouseOver-Feature wo mir durch ein Popup die Jeweilige PHPdoc fer Klasse angezeigt wird ;)

So... fals es doch noch unklarheiten gibt, ich bin gern bereit auf Fragen eine Antwort zu geben ;)

Danke Euch schonmal :)
 

Anhänge

Moin Moin,

habe mir das mal angeschaut mit der generate.php und kann da aus der Datei folgendes rauslesen:

Das Script erzeugt aufgrund von vorhandenen extension eine Liste, welche es mit dem von phpdoc (nicht phpdocumentator) gelieferten reference XML dann zu einem "PDT File" generiert. (okay, nun habe ich es auch verstanden ;) )

Die Readme erscheint mir erstmal recht logisch, nur dann wollte ich mal schauen, was das "Zend CE" ist. Man findet nur keine Info dazu im Netz ! Auch auf meiner Debian Linux Büchse keine Info, seltsames Paket.
Nun, da finde ich im Moment nichts dazu, scheint mit aber als wäre das ein "Sammelpaket" wo alle PHP Extensions + CLI installiert werden (ich rate jetzt einfach).

Okay, was du auch noch brauchst ist auf jeden Fall die PHP XML Referenz die via PHPDOC generiert wurde. Auch die findet man, wie auch der Readme zu entnehmen, auf dem CVS RepoServer.
Wenn ich das richtig verstehe arbeitest du unter Windows. Da gibt es zwar auch CVS Tools, aber wenn du nur die XML Files brauchst, würde ich über das CVS WebInterface via Button ("Download as TarBall") es einfach runterladen.

Hier ist erstmal die PHP XML PHPDoc Referenz
http://cvs.php.net/viewvc.cgi/phpdoc/en/reference/


Ich kanns leider nicht testen ob und wie es geht.
Wenn du schreibst, das das Script "generate.php" nicht "richtig" geht, was meinst du damit

So, dann erstmal viel Spass beim basteln

P.S.: Es scheint als würde sich meine "i" Taste auf dem Notebook gerade verabschieden wollen. Wenn also hier und da mal ein "i" fehlt, einfach dazudenken ;)
 
Guten Morgen :)

Danke für deine Bemühungen Mairhofer :)

Das Zend CE scheint irgendwie nicht mehr zu existieren, selbst Google findet nixnüx :eek:
Ich denke das Zend CE soll nur verwendet werden wegen der in PHP4 existierenden "php-cli" die ja ab PHP5 in "php" umbenannt wurde...glaub ich.

So ich hab mir nun das PHPDOC als CVS heruntergeladen und auch entpackt. In der "generate.php" hab ich oben den Pfad zum PHPDOC angepasst. Es werden nun auch korrekte Dokumentationen in den .php Files generiert.


Mairhofer hat gesagt.:
Wenn du schreibst, das das Script "generate.php" nicht "richtig" geht, was meinst du damit
Der Fehler:
Code:
D:\aServer\xampp\php_5.2.6>php -q generate.php phpdoc
<?php

// Start of dom v.20031129

/**
 * DOM operations raise exceptions under particular circumstances, i.e.,
 * when an operation is impossible to perform for logical reasons.
 * @link http://php.net/manual/en/ref.dom.php
 */
class DOMException extends Exception  {
        protected $message;
        public $code;
        protected $file;
        protected $line;


        final private function __clone () {}

        /**
         * @param message[optional]
         * @param code[optional]
         */
        public function __construct ($message, $code) {}

        final public function getMessage () {}

        final public function getCode () {}

        final public function getFile () {}

        final public function getLine () {}

        final public function getTrace () {}

        final public function getTraceAsString () {}

        public function __toString () {}

}

class DOMStringList  {

        /**
         * @param index
         */
        public function item ($index) {}

}

/**
 * @link http://php.net/manual/en/ref.dom.php
 */
class DOMNameList  {

        /**
         * @param index
         */
        public function getName ($index) {}

        /**
         * @param index
         */
        public function getNamespaceURI ($index) {}

}

class DOMImplementationList  {

        /**
         * @param index
         */
        public function item ($index) {}

}

class DOMImplementationSource  {

        /**
         * @param features
         */
        public function getDomimplementation ($features) {}

        /**
         * @param features
         */
        public function getDomimplementations ($features) {}

}

/**
 * The DOMImplementation interface provides a number
 * of methods for performing operations that are independent of any
 * particular instance of the document object model.
 * @link http://php.net/manual/en/ref.dom.php
 */
class DOMImplementation  {

        /**
         * @param feature
         * @param version
         */
        public function getFeature ($feature, $version) {}

        public function hasFeature () {}

        /**
         * @param qualifiedName
         * @param publicId
         * @param systemId
         */
        public function createDocumentType ($qualifiedName, $publicId, $systemId) {}

        /**
         * @param namespaceURI
         * @param qualifiedName
         * @param docType DOMDocumentType
         */
        public function createDocument ($namespaceURI, $qualifiedNameDOMDocumentType , $docType) {}

}

/**
 * @link http://php.net/manual/en/ref.dom.php
 */
class DOMNode  {

        /**
         * @param newChild DOMNode
         * @param refChild DOMNode[optional]
         */
        public function insertBefore (DOMNode $newChildDOMNode , $refChild = null) {}

        /**
         * @param newChild DOMNode
         * @param oldChild DOMNode
         */
        public function replaceChild (DOMNode $newChildDOMNode , $oldChild) {}

        /**
         * @param oldChild DOMNode
         */
        public function removeChild (DOMNode $oldChild) {}

        /**
         * @param newChild DOMNode
         */
        public function appendChild (DOMNode $newChild) {}

        public function hasChildNodes () {}

        /**
         * @param deep
         */
        public function cloneNode ($deep) {}

        public function normalize () {}

        /**
         * @param feature
         * @param version
         */
        public function isSupported ($feature, $version) {}

        public function hasAttributes () {}

        /**
         * @param other DOMNode
         */
        public function compareDocumentPosition (DOMNode $other) {}

        /**
         * @param other DOMNode
         */
        public function isSameNode (DOMNode $other) {}

        /**
         * @param namespaceURI
         */
        public function lookupPrefix ($namespaceURI) {}

        /**
         * @param namespaceURI
         */
        public function isDefaultNamespace ($namespaceURI) {}

        /**
         * @param prefix
         */
        public function lookupNamespaceUri ($prefix) {}

        /**
         * @param arg DOMNode
         */
        public function isEqualNode (DOMNode $arg) {}

        /**
         * @param feature
         * @param version
         */
        public function getFeature ($feature, $version) {}

        /**
         * @param key
         * @param data<font color=ff0000>
Fatal error: Uncaught exception 'ReflectionException' with message 'Class DOMUserData does not exist' in D:\aServer\xamp
p\php_5.2.6\generate.php:647
Stack trace:
#0 D:\aServer\xampp\php_5.2.6\generate.php(647): ReflectionParameter->getClass()
#1 D:\aServer\xampp\php_5.2.6\generate.php(404): print_doccomment(Object(ReflectionMethod), 1)
#2 D:\aServer\xampp\php_5.2.6\generate.php(376): print_function(Object(ReflectionMethod), 1)
#3 D:\aServer\xampp\php_5.2.6\generate.php(296): print_class(Object(ReflectionClass))
#4 D:\aServer\xampp\php_5.2.6\generate.php(58): print_extension(Object(ReflectionExtension))
#5 {main}
  thrown in D:\aServer\xampp\php_5.2.6\generate.php on line 647
</font>

Dannach stürzt die "CLI" (php.exe) einfach ab.
Ich habe alle Extensions in der php.ini deaktiviert sodass nur die Standard Funktionen (SPL) ausgelesen werden.
Einiges wird ja korrekt generiert wie z.B. bcmath.php, calendar.php, ctype.php ...u.s.w. Aber bei der DOM hengt es irgenwo. Die DOM ist ja nun keine Extension sonndern wurde mit "hineincompiliert" weshalb ich diese ja nun nicht austauschen kann :mad:

Achso, vieleicht noch zum System:
- Vista64 +SP1
- XAMPP 1.6.7 (PHP 5.2.6)

So mehr kann ich jetzt erstmal nicht schreiben, die Arbeit ruft *kotz*
Aber vieleicht hilft das ja schonmal etwas weiter..hoffe ich :)


PS:
Mairhofer hat gesagt.:
Es scheint als würde sich meine "i" Taste auf dem Notebook gerade verabschieden wollen. Wenn also hier und da mal ein "i" fehlt, einfach dazudenken

Scheint als wäre das eine Ansteckende Krankheit ^^
Allerdings ist es seit gestern meine "ö" Taste die ich erst mit einem Hammer überreden muss zu funktionieren ;-) :rolleyes:
 
Ich habe mir das mal nur kurz angeschaut.

Der Fehler lautet ja
Fatal error: Uncaught exception 'ReflectionException' with message 'Class DOMUserData does not exist' in D:\aServer\xamp
p\php_5.2.6\generate.php:647
Problem ist, das die Klasse DOMUserData nicht existiert, also auch bei mir nicht.
Es gibt nur eine DOMUserDataHandler. Nun die Frage, wo das "Handler" abgeblieben ist. Ist es nur bei der Ausgabe der Exception verloren gegangen oder verwurschtelt das Script irgendwie?

Habe nochmal kurz über die entsprechenden Funktionen der generate.php geschaut. Eigentlich werden immer nur Referenzen übergeben und kein regex oder ähnliches könnte die Ursache sein.
Mal heute abend ein Testszenario aufsetzen, wo man das nachstellen kann. Interessiert mich jetzt irgendwie.

Soweit erstmal, gruss!
 
Morgen,

Sorry das ich jetzt erst wieder etwas dazu schreibe, hatte viel zu tun.

Also, nach einigen recherchen im Netz bin ich zu dem entschluss gekommen das das vorhaben nicht ganz so einfach ist wie ich mir das gedacht habe. Eine PHP-Language-Library zu erstellen ist nicht ganz ohne und wohl nur mit der CVS version von PHP Möglich da sich nur dort die die fehlende Klasse "DOMUserDataHandler" befindet. Leider habe ich keine Hanung wie ich mir das PHP selber Compilieren kann und bin mir auch nicht sicher ob es dann auch funktioniert.
Im Netz schwirren einige PHP-Language-librarys herum nur sind diese Kommerziell und kosten so zw. 50-100 Dollar (aktuell und vollständig sind sie auch nicht, von 2006) :\

Da ich mit Eclipse/PDT (PHP Development Tool) arbeite und mir dort per mouseover ein Popup für die Dokumentation der Integrierten Funktionen geliefert wird, währe es doch klasse wenn mir doch noch wer weiterhelfen kann.
Leider wird die Docu nur aus einer zum Projekt hinzugefügten Library ausgelesen und nicht aus der Dokumentation zu PHP.

gruss
gOmax
 
Zurück