Re: Reflection API
| From: | George Schlossnagle | Date: | Mon, 30 Jun 2003 15:32:41 +0000 |
| Subject: | Re: Reflection API | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-3042@lists.php.net to get a copy of this message | ||
On Monday, June 30, 2003, at 12:04 PM, Andi Gutmans wrote:
I must be thick. I don't quite understand how the source relates to what is described in the .png. Take for example the following from the api.c file:I talked this over with Marcus. The FE/FALIAS pairs are designed to avoid namespace conflicts with the other (not yet existent) reflection classes. I better solution will be to write a new macro that allows ZEND_FUNCTION(php_function_getstartline) to be registered as a class method directly as 'getstartline). I'll modify my patch shortly. If something like that exists already, a pointer to it would be swell. Otherwise the functions work as follows: <?php /** Doc comment goes here */ function counter() { static $i = 0; return $i++; } $obj = new PHP_Function("counter"); print $obj->getName()." was decared in ".$obj->getFileName()." starting at ".$obj->getStartLine(). "and ending at ".$obj->getEndline."\n"; print "Here is what it's docs have to say: "$obj->getDocComment(). "\n"; if($statics = $obj->staticVariables()) { print $obj->getName()." has the following static variables:\n".print_r($statics); } print $obj->invoke(); Something like that.
static zend_function_entry php_function_functions[] = { ZEND_FE(php_function, NULL) ZEND_FE(php_function_isinternal, NULL) ZEND_FALIAS(isinternal, php_function_isinternal, NULL) ZEND_FE(php_function_isuserdefined, NULL) ZEND_FALIAS(isuserdefined, php_function_isinternal, NULL) ZEND_FE(php_function_getname, NULL) ZEND_FALIAS(getname, php_function_getname, NULL) ZEND_FE(php_function_getfilename, NULL) ZEND_FALIAS(getfilename, php_function_getfilename, NULL) ZEND_FE(php_function_getstartline, NULL) ZEND_FALIAS(getstartline, php_function_getstartline, NULL) ZEND_FE(php_function_getendline, NULL) ZEND_FALIAS(getendline, php_function_getendline, NULL) ZEND_FE(php_function_getdoccomment, NULL) ZEND_FALIAS(getdoccomment, php_function_getdoccomment, NULL) ZEND_FE(php_function_getstaticvariables, NULL) ZEND_FALIAS(getstaticvariables, php_function_getstaticvariables, NULL) ZEND_FE(php_function_invoke, NULL) ZEND_FALIAS(invoke, php_function_invoke, NULL) {NULL, NULL, NULL} Are these functions meant to be called by the user? They are *pretty* ugly. Can you show a small piece of example code on how this reflection API is supposed to be used? Once we make sure it looks good to everyone I have no problem with you commiting your work. Andi At 03:18 PM 29/6/2003 -0400, George Schlossnagle wrote:-- Principal Consultant -- OmniTI Computer Consulting, Inc. -- +1.410.872.4910 x202 -- 1024D/1100A5A0 1370 F70A 9365 96C9 2F5E 56C2 B2B9 262F 1100 A5A0Here is a first implementation of the reflection api, for functions (class PHP_Function in you diagram) http://www.schlossnagle.org/~george/php/reflection.diff http://www.schlossnagle.org/~george/php/zend_reflection_api.c http://www.schlossnagle.org/~george/php/zend_reflection_api.h Comments? Thoughts? George On Wednesday, June 18, 2003, at 12:53 PM, Sebastian Bergmann wrote:-- George SchlossnagleSebastian Bergmann wrote:-- George Schlossnagle -- Principal Consultant -- OmniTI Computer Consulting, Inc. -- +1.410.872.4910 x202 -- 1024D/1100A5A0 1370 F70A 9365 96C9 2F5E 56C2 B2B9 262F 1100 A5A0 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.phphttp://www.sebastian-bergmann.de/stuff/reflection.pngI refactored it a bit:http://www.sebastian-bergmann.de/stuff/reflection-update.pngIMHO it is essential that PHP_Field and PHP_Method implement a common interface (like their counterparts from java.lang.reflect do) to ease iterating through a class's members, for instance. -- Sebastian Bergmann http://sebastian-bergmann.de/ http://phpOpenTracker.de/http://www.professionelle-softwareentwicklung-mit-php5.de/-- PHP 5 Development Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php