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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations)
Tue Mar 11 02:28:11 2003 UTC (21 years, 4 months ago) by joko
Branch: MAIN
Changes since 1.6: +6 -3 lines
+ fixed metadata for phpDocumentor

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

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