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

Annotation of /nfo/php/libs/org.netfrag.glib/Class/Inner.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (hide annotations)
Tue Mar 11 02:23:02 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
Changes since 1.5: +7 -1 lines
+ fixed metadata for phpDocumentor

1 joko 1.1 <?
2 joko 1.2 /**
3     * This file contains the Class::Inner class.
4     *
5     * @author Andreas Motl <andreas.motl@ilo.de>
6 joko 1.3 * @package org.netfrag.glib
7 joko 1.2 * @name Class::Inner
8     *
9     */
10    
11 joko 1.4 /**
12     * <pre>
13 joko 1.6 *
14     * $Id: Inner.php,v 1.5 2003/03/11 02:04:36 joko Exp $
15 joko 1.5 *
16 joko 1.4 * $Log: Inner.php,v $
17 joko 1.6 * Revision 1.5 2003/03/11 02:04:36 joko
18     * + fixed metadata for phpDocumentor
19     *
20 joko 1.5 * Revision 1.4 2003/03/11 01:42:59 joko
21     * + fixed metadata for phpDocumentor
22     *
23 joko 1.4 * Revision 1.3 2003/03/11 01:12:53 joko
24     * + fixed metadata for phpDocumentor
25     *
26     * Revision 1.2 2003/03/05 18:54:43 joko
27     * updated docu - phpDocumentor is very strict about its 'blocks'...
28     *
29     * Revision 1.1 2003/03/03 21:26:30 joko
30     * refactored from DesignPattern::Bridge
31     *
32     * Revision 1.5 2003/02/27 18:09:56 joko
33     * mungled mechanism to shift in and pass on arguments
34     *
35     * Revision 1.4 2003/02/09 17:07:53 joko
36     * + minor update related to new log level constants
37     * + generic argument merger to show full constructor args
38     *
39     * Revision 1.3 2003/02/03 14:46:57 joko
40     * + wrapped calls to available initializers (constructors, declared startup methods)
41     * - moved logger-code to DesignPattern::Logger
42     *
43     * Revision 1.2 2003/02/03 05:01:27 joko
44     * + now attributes can get passed in to the constructors
45     *
46     * Revision 1.1 2003/02/03 03:33:48 joko
47     * + initial commit
48 joko 1.6 *
49 joko 1.5 * </pre>
50 joko 1.4 *
51     */
52 joko 1.1
53 joko 1.2 /**
54     * This requires DesignPattern::Facade as a base class
55     *
56     */
57 joko 1.1 loadModule('DesignPattern::Facade');
58 joko 1.2
59     /**
60     * Class::Inner
61     *
62     * @author Andreas Motl <andreas.motl@ilo.de>
63     * @copyright (c) 2003 - All Rights reserved.
64     * @license GNU LGPL (GNU Lesser General Public License)
65     *
66     * @link http://www.netfrag.org/~joko/
67     * @link http://www.gnu.org/licenses/lgpl.txt
68     *
69 joko 1.6 * @package org.netfrag.glib
70 joko 1.2 * @subpackage Class
71     * @name Class::Inner
72     *
73     */
74 joko 1.1 class Class_Inner extends DesignPattern_Facade {
75    
76     /*
77     var $_parent_class;
78     var $_inner_classes;
79     var $_inner_objects;
80     var $_call_constructor;
81     */
82    
83     function perform($args) {
84     $this->__create_inners($args);
85     }
86    
87     function __call_constructor($objectname, $method) {
88     if (method_exists($this->$objectname, $method)) {
89     $this->log( get_class($this) . "->__call_constructor: autocalling \$this->" . $objectname . "->$method()" );
90     $this->$objectname->$method();
91     }
92     }
93    
94     function __create_inners($args) {
95    
96     $this->log( get_parent_class($this) . "->__create_inners( parent='" . $args[parent_name] . "' )", PEAR_LOG_INFO );
97     //$this->log( get_parent_class($this) . "->_init_helpers: instantiating helper objects below '" . get_class($this) . "::'" );
98    
99     //print Dumper($args);
100    
101     foreach ($args[class_names] as $classname) {
102    
103     // build objectname from classname
104     // - make lowercase
105     // - strip leading "Xyz_" ('Site_' here)
106     $objectname = $classname;
107     $objectname = str_replace('Site_', '', $objectname); // FIXME!!!
108     $objectname = strtolower($objectname);
109    
110     // create new instance of helper object by classname
111     // V1:
112     //$this->$objectname = &$this->_mkInstance($classname);
113     // V2:
114     $this->$objectname = &php::mkInstance($classname);
115    
116     // create additional references to helper object with other names if requested
117     // the intention is (e.g.) to migrate objects over to new reference-names when development progresses and ...
118     // ... refactoring the object hierarchy is needed, but ...
119     // ... you wanna provide the old reference names as "fallbacks" for old code using the libs
120     if (is_array($args[ref_names])) {
121     foreach ($args[ref_names] as $ref_name) {
122     //print "mkRef: $ref_name<br>";
123     $this->$ref_name = &$this->$objectname;
124     }
125     }
126    
127     // helper gets reference to ourselves as a parent
128     $this->$objectname->$args[parent_name] = &$this;
129    
130     $this->__call_constructor($objectname, 'constructor');
131     if ( $method = $args[run] ) {
132     $this->__call_constructor($objectname, $method);
133     }
134    
135     }
136    
137     }
138    
139    
140    
141     // --- old code
142    
143     function DesignPattern_Bridge_old() {
144    
145     $arg_list = func_get_args();
146     $classname = array_shift($arg_list);
147    
148     // expand single argument
149     if (count($arg_list) == 1) {
150     $arg_list = $arg_list[0];
151     }
152     $attributes = &$arg_list;
153    
154     //print Dumper($attributes);
155    
156     //print "init_bridge!<br>";
157     //return $this->_mkInstance($classname, $attributes);
158     //$this->_init_logger("../core/var/log/logfile.txt", 1);
159     //parent::constructor();
160    
161     // V1:
162     $this = $this->_mkInstance($classname, $attributes);
163     // V2: (don't do that - will crash your apache!!! - hehe - it's an infinite loop)
164     //$this = php::mkInstance($classname, $attributes);
165    
166     //parent::constructor();
167     // $this->_init_logger("../core/var/log/logfile.txt", 1);
168     //print Dumper($this);
169    
170     //return $this;
171     }
172    
173     function &_mkInstance_old($classname, $attributes = null) {
174     parent::constructor();
175     $this->log( get_class($this) . "->_mkInstance( classname $classname )" );
176     if (isset($attributes)) {
177     //print Dumper($attributes);
178    
179     /*
180     // pass single argument 1:1
181     if (count($attributes) == 1) {
182     $attributes_merged = $attributes[0];
183    
184    
185    
186     // pass hash 1:1
187     } elseif (is_hash($attributes)) {
188     $attributes_merged = $attributes;
189    
190     } else {
191     $attributes_merged = $attributes;
192     }
193     */
194    
195     $args_pass = array();
196     for ($i=0; $i<=count($attributes); $i++) {
197     array_push($args_pass, '$attributes[' . $i . ']');
198     }
199    
200     $arg_string = join(', ', $args_pass);
201    
202     /*
203     // merge entries of numerical indexed arrays together into one hash
204     } else {
205     $attributes_merged = array();
206     foreach ($attributes as $entry) {
207     $attributes_merged = array_merge($attributes_merged, $entry);
208     }
209     }
210     */
211    
212     //print Dumper($attributes_merged);
213     //print Dumper($attributes);
214     //$instance = new $classname($attributes_merged);
215     //$instance = new $classname($attributes[0]);
216     $evalstr = 'return new $classname(' . $arg_string . ');';
217     $instance = eval($evalstr);
218     //print $evalstr . "<br>";
219     } else {
220     $instance = new $classname;
221     }
222     //$this->log("ok");
223     return $instance;
224     }
225    
226     }
227    
228    
229    
230    
231     ?>

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