| 1 | <!-- @metadata-begin --><pre> | 
| 2 |  | 
| 3 | @sequence main | 
| 4 | @title DummyNamespaces in PHP - final proposal | 
| 5 | @file C:\home\amo\develop\netfrag.org\joko\doc\twingled\SampleNewsPosts\DummyNamespaces in PHP - final proposal.twingle | 
| 6 | @url http://grasshopper.netfrag.org/c/home/amo/develop/netfrag.org/joko/doc/twingled/SampleNewsPosts/DummyNamespaces in PHP - final proposal.twingle | 
| 7 | @is-a  rfc, rfp | 
| 8 | @todo  tbd | 
| 9 |  | 
| 10 | @glossary | 
| 11 | rfc [request for comments] (the classic) | 
| 12 | rfp [refactoring proposal] (code already written) | 
| 13 | tbd [to be discussed]      (api not fixed yet) | 
| 14 |  | 
| 15 | @sequence cvs-info | 
| 16 | $Id$ | 
| 17 | $Log$ | 
| 18 |  | 
| 19 | </pre><!-- @metadata-end --> | 
| 20 |  | 
| 21 |  | 
| 22 | DummyNamespaces in PHP - final proposal | 
| 23 |  | 
| 24 | The problem: (copied from ancestor document) | 
| 25 | [...] | 
| 26 | Here is the glitch: We actually have two *different* | 
| 27 | types of namespaces following this proposed component | 
| 28 | architecture: | 
| 29 | - ClassNamespace | 
| 30 | - ModuleNamespace | 
| 31 | [...] | 
| 32 |  | 
| 33 |  | 
| 34 | The solution: | 
| 35 |  | 
| 36 | We split up everything into *two* things: | 
| 37 | - two layers (core, api) ... | 
| 38 | ... to get better code structure | 
| 39 | - two types of things to manage (native php classes, our modules) | 
| 40 | ... to get better api structure | 
| 41 | -> just the api layer adds namespacing support! | 
| 42 | -> the core layer is "dumb"   ;-) | 
| 43 |  | 
| 44 |  | 
| 45 | 1. core layer (mk) | 
| 46 |  | 
| 47 | php::mkComponent should be able to pass back instances | 
| 48 | of components from *both* namespaces using infrastructure | 
| 49 | code from the php:: namespace, which is: | 
| 50 |  | 
| 51 | php::mkInstance should pass back a new instance | 
| 52 | of a component from the ClassNamespace. | 
| 53 |  | 
| 54 | php::mkModule should pass back a new instance | 
| 55 | of a component from the ModuleNamespace. | 
| 56 |  | 
| 57 |  | 
| 58 | 2. api layer (use,get) | 
| 59 |  | 
| 60 | php::useNamespace limits the scope of the core... | 
| 61 | ... in a way that further operations occour on | 
| 62 | namespaces get prefixed by this namespace. | 
| 63 | Must accept an identifier which designates the | 
| 64 | to-be-used namespace. This identifier should be | 
| 65 | capable to point to components living in either | 
| 66 | the ClassNamespace *or* the ModuleNamespace. | 
| 67 |  | 
| 68 | php::getComponent should return an instance | 
| 69 | of a component regardless in which namespace | 
| 70 | it lives. (It can be a class *or* a module) | 
| 71 | Given the logic required for php::useNamespace, | 
| 72 | we can reduce the amount of arguments required | 
| 73 | to actually get to a component: | 
| 74 | Just a "global" declaration would be required | 
| 75 | on top of your "metacode" ... | 
| 76 | php::useNamespace('Deep::nested::Module'); | 
| 77 | ... and inside it you are able to do: | 
| 78 | php::getComponent('Even::more::deeper::Submodule'); | 
| 79 | Of course (master requirement for getting our | 
| 80 | stuff with bareface's neutral proposal together) - the same should also work |