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

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