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

Contents of /nfo/php/libs/org.netfrag.glib/DesignPattern/Object.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations)
Sat Mar 1 21:13:39 2003 UTC (21 years, 6 months ago) by joko
Branch: MAIN
Changes since 1.6: +41 -5 lines
modified loadModule (take care!)

1 <?
2 // ---------------------------------------------------------------------------
3 // $Id: Object.php,v 1.6 2003/02/28 04:18:13 joko Exp $
4 // ---------------------------------------------------------------------------
5 // $Log: Object.php,v $
6 // Revision 1.6 2003/02/28 04:18:13 joko
7 // + special-case-handling for single argument pass-in
8 // + testing with constructor autocalling: not used for now since weird sideeffects occoured!
9 // o however: rethink it completely!
10 //
11 // Revision 1.5 2003/02/27 16:36:02 joko
12 // re-allowed underscores ('_') in php classnames
13 // does this break something?
14 //
15 // Revision 1.4 2003/02/22 16:34:16 joko
16 // + minor fix: can seperate namespace identifier with slashes ('/') now
17 //
18 // Revision 1.3 2003/02/09 17:16:06 joko
19 // + handling arguments perl style ;-)
20 //
21 // Revision 1.2 2003/02/03 05:01:48 joko
22 // + now attributes can get passed in to the constructors
23 //
24 // Revision 1.1 2003/02/03 03:33:48 joko
25 // + initial commit
26 //
27 // ---------------------------------------------------------------------------
28
29
30 /*
31 class DesignPattern_Object {
32 function DesignPattern_Object() {
33
34 }
35 }
36 */
37
38 function _ns2file($nsName) {
39 if ($filename = str_replace('::', '/', $nsName)) {
40 return $filename;
41 }
42 }
43
44 function &mkObject() {
45 $arg_list = func_get_args();
46
47 // patch arglist if all arguments are passed in as a single array
48 if (count($arg_list) == 1 && is_array($arg_list[0])) {
49 $arg_list = $arg_list[0];
50 }
51
52 //print Dumper($arg_list);
53 $namespacedClassname = array_shift($arg_list);
54 if (strstr($namespacedClassname, '_')) {
55 //print "mkObject: unallowed character in namespaced classname: '_' ($namespacedClassname)<br/>";
56 //return;
57 }
58 //print "class: $classname<br>";
59 $attributes = $arg_list;
60 $classname = $namespacedClassname;
61 if (loadModule($namespacedClassname)) {
62 $classname = str_replace('::', '_', $namespacedClassname);
63 $classname = str_replace('/', '_', $classname);
64 }
65 $obj = new DesignPattern_Bridge($classname, $attributes);
66
67 // call constructor if possible
68 // FIXME: take care for side-effects!!!
69 /*
70 if (method_exists($obj, 'constructor')) {
71 $obj->constructor();
72 }
73 */
74
75 return $obj;
76 }
77
78 function loadModule($namespacedClassname, $extension = 'php') {
79 if ($filename = _ns2file($namespacedClassname)) {
80 if ($extension) {
81 $filename .= ".$extension";
82 }
83
84 // V1: just require
85 //require_once($filename);
86
87 // V2: check file for existance (didn't work!!! problem with path-style conversion regarding platform running on?)
88 /*
89 if (file_exists($filename)) {
90 require_once($filename);
91 } else {
92 //user_error("Could not load module '$namespacedClassname', file '$filename' does not exist.");
93 }
94 */
95
96 // V3: wrapped through eval (weird)
97 /*
98 $evalstring = "return include_once('$filename');";
99 $result = eval($evalstring);
100 if (!$result) {
101 user_error("DesignPattern::Object: Could not load module '$namespacedClassname', file '$filename' does not exist.");
102 return;
103 }
104 */
105
106 // V4: just include
107 if (!include_once($filename)) {
108 // TODO: do stack-backtracing here to determine function called two or three levels before!!!
109 user_error("DesignPattern::Object: Could not load module '$namespacedClassname', file '$filename' does not exist.");
110 return;
111 }
112
113 return 1;
114 }
115 }
116
117 ?>

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