/[cvs]/nfo/php/libs/org.netfrag.glib/Exporter.php
ViewVC logotype

Diff of /nfo/php/libs/org.netfrag.glib/Exporter.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by joko, Mon Mar 3 21:08:21 2003 UTC revision 1.6 by joko, Fri Apr 4 17:33:49 2003 UTC
# Line 5  Line 5 
5   *   *
6   * @author Andreas Motl <andreas.motl@ilo.de>   * @author Andreas Motl <andreas.motl@ilo.de>
7   * @package org.netfrag.glib   * @package org.netfrag.glib
8   * @module Exporter   * @name Exporter
9   *   *
10   */   */
11    
# Line 13  Line 13 
13   * $Id$   * $Id$
14   *   *
15   * $Log$   * $Log$
16     * Revision 1.6  2003/04/04 17:33:49  joko
17     * updated/enhanced/fixed behaviour of 'function create_stub_function'
18     *
19     * Revision 1.5  2003/03/28 03:05:20  joko
20     * minor update: fixed labels, modified debugging level
21     *
22     * Revision 1.4  2003/03/10 22:58:45  joko
23     * + fixed metadata for phpDocumentor
24     *
25     * Revision 1.3  2003/03/05 23:16:46  joko
26     * updated docu - phpDocumentor is very strict about its 'blocks'...
27     *
28     * Revision 1.2  2003/03/05 18:54:41  joko
29     * updated docu - phpDocumentor is very strict about its 'blocks'...
30     *
31   * Revision 1.1  2003/03/03 21:08:21  joko   * Revision 1.1  2003/03/03 21:08:21  joko
32   * refactored from flib/utils   * refactored from flib/utils
33   *   *
34   *   *
35   */   */
36    
37    /**
38     * --- shortcut functions
39     *
40     */
41    
42    //function &export_symbol() { return Exporter::export_symbol(func_get_args()); }
43    
44    
45  /**  /**
46   * --- The Exporter   * The Exporter
47     *
48     * This tries to mimic a very small subset of the
49     * functionality of CPAN's Exporter.
50   *   *
51     * <pre>
52   *  x export_symbol   *  x export_symbol
53   *  x export_symbols   *  x export_symbols
54   *   *
  *  
55   *  Synopsis:   *  Synopsis:
56   *   *    <code>
57   *    define('EXPORT_OK', 'loadModule mkInstance' );   *    define('EXPORT_OK', 'loadModule mkInstance' );
58   *    require_once("php_extensions.php");   *    require_once("php_extensions.php");
59     *    </code>
60   *   *
61   *  Example output:   *  Example output:
62   *   *
63   *     Exporting symbol 'php::loadModule' to 'global::loadModule' (type='__php_function').   *     Exporting symbol 'php::loadModule' to 'global::loadModule' (type='__php_function').
64   *     selected stub:   *     selected stub:
65     *    <code>
66   *     function &loadModule() { return php::loadModule(Exporter::wrap_args(func_get_args())); }   *     function &loadModule() { return php::loadModule(Exporter::wrap_args(func_get_args())); }
67     *    </code>
68   *   *
69   *     Exporting symbol 'php::mkInstance' to 'global::mkInstance' (type='__php_function').   *     Exporting symbol 'php::mkInstance' to 'global::mkInstance' (type='__php_function').
70   *     selected stub:   *     selected stub:
71     *    <code>
72   *     function &mkInstance() { return php::mkInstance(Exporter::wrap_args(func_get_args())); }   *     function &mkInstance() { return php::mkInstance(Exporter::wrap_args(func_get_args())); }
73   *   *    </code>
74     * </pre>
75   *   *
76   *   *
77   * @author Andreas Motl <andreas.motl@ilo.de>   * @author Andreas Motl <andreas.motl@ilo.de>
78   * @copyright (c) 2003 - All Rights reserved.   * @copyright (c) 2003 - All Rights reserved.
79   * @license GNU LGPL (GNU Lesser General Public License)   * @license GNU LGPL (GNU Lesser General Public License)
80   *   *
81   * @author-url http://www.netfrag.org/~joko/   * @link http://www.netfrag.org/~joko/
82   * @license-url http://www.gnu.org/licenses/lgpl.txt   * @link http://www.gnu.org/licenses/lgpl.txt
83   *   *
84   * @package org.netfrag.glib   * @package org.netfrag.glib
85   * @module Exporter   * @name Exporter
86   *   *
87   */   * @link http://search.cpan.org/author/JHI/perl-5.8.0/lib/Exporter.pm
   
 /**  
  * Todo / Ideas:  
  *  x look at http://www.php.net/manual/en/function.method-exists.php  
  *    x $bool_exists = (in_array(strtolower($methodName), get_class_methods($className)));  
  *    x -> implemented in php::class_has_method  
88   *   *
89   */   * @todo (x) look at http://www.php.net/manual/en/function.method-exists.php
90     * @todo (x) $bool_exists = (in_array(strtolower($methodName), get_class_methods($className)));
91     * @todo (x) -> implemented in php::class_has_method
   
 /**  
  * --- shortcut functions  
92   *   *
93   */   */
   
 //function &export_symbol() { return Exporter::export_symbol(func_get_args()); }  
   
   
 /**  
  * --- Exporter class  
  *  
  *  
  */  
   
94  class Exporter {  class Exporter {
95    
96    function export_symbol($from = null, $symbol = null, $to = array()) {    function export_symbol($from = null, $symbol = null, $to = array()) {
# Line 195  class Exporter { Line 206  class Exporter {
206      static $target_cache;      static $target_cache;
207    
208      if (!php::class_has_method($source_class, $source_name)) {      if (!php::class_has_method($source_class, $source_name)) {
209        user_error("Exporter error: class '$source_class' does not implement method '$source_name', will skip exporting this symbol.");        user_error("Exporter::create_stub_function - Error: class '$source_class' does not implement method '$source_name', will skip exporting this symbol.");
210        return;        return;
211      }      }
212    
213      // prevent redeclarations      // prevent redeclarations
214      if ($target_cache[$target_name]) {      if ($target_cache[$target_name]) {
215        $msg = "php::create_stub_function: already declared: $target_name";        $msg = "Exporter::create_stub_function - Warning: already declared: $target_name";
216        php::append_log($msg, PEAR_LOG_ERR);        php::append_log($msg, PEAR_LOG_DEBUG);
217        return 1;        return 1;
218      } else {      } else {
219        $target_cache[$target_name]++;        $target_cache[$target_name]++;
# Line 215  class Exporter { Line 226  class Exporter {
226        //function &$target_name() { \$args = func_get_args(); return call_user_func_array(array($source_class, $source_name), &\$args); }        //function &$target_name() { \$args = func_get_args(); return call_user_func_array(array($source_class, $source_name), &\$args); }
227        //function &$target_name() { \$args = php::array_shrink(func_get_args()); return call_user_func_array(array($source_class, $source_name), &\$args); }        //function &$target_name() { \$args = php::array_shrink(func_get_args()); return call_user_func_array(array($source_class, $source_name), &\$args); }
228        //function &$target_name() { \$args = Exporter::wrap_args(func_get_args()); return call_user_func_array(array($source_class, $source_name), &\$args); }        //function &$target_name() { \$args = Exporter::wrap_args(func_get_args()); return call_user_func_array(array($source_class, $source_name), &\$args); }
229        
230        // taha that's it!
231      $stub =      $stub =
232  <<<TPL_FUNC  <<<TPL_FUNC
233        function &$target_name() {        function &$target_name() {
234          \$args = php::array_shrink(func_get_args());          \$passthru = php::array_shrink(func_get_args());
235          return call_user_func_array(array('$source_class', '$source_name'), &\$args);          if (is_array(\$passthru)) {
236              return call_user_func_array(array('$source_class', '$source_name'), &\$passthru);
237            } else {
238              return call_user_func(array('$source_class', '$source_name'), &\$passthru);
239            }
240        }        }
241          // signal good
242          return 1;
243  TPL_FUNC;  TPL_FUNC;
244    
245        /*        /*
246        // alternative        // possible alternative? not yet...
247        $function = <<<TPL_FUNC        $function = <<<TPL_FUNC
248          class $target_class() {          class $target_class() {
249            function &$target_name() { return $source_class::$source_name(func_get_args()); }            function &$target_name() { return $source_class::$source_name(func_get_args()); }
# Line 235  TPL_FUNC; Line 254  TPL_FUNC;
254      // debug      // debug
255        //print "selected stub: <br/>$stub<br/>";        //print "selected stub: <br/>$stub<br/>";
256            
257      eval($stub);      // V1
258        //eval($stub);
259        //return 1;
260            
261      return 1;      // V2
262        return eval($stub);
263            
264    }    }
265    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.6

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed