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 |