Roman Neuhauser wrote:
...
>
> Singleton in Design Patterns, p. 127:
>
> : Intent
> : Ensure a class only has one instance, and provide a global point of
> : access to it.
>
> The second part is IMO pretty much what you said.
it's completely out of context:
a, there is no suggestion of a class (by me)
b, there is no suggestion that the data returned by the proposed function may
only exist as a single instance.
>
>>> If you're affraid that someone will break a convention which says that
>>> the global associative array $foos has string indexes and values must be
>> given an array of data that is used all over a php application then it quite
>> simply
>> saves alot fo headaches down the road to to agree on a convention that says
>> 'we' will use a function to retrieve this data whenever it is needed
>> (regardless
>
> Agreeing on abandoning global variables would save even more headaches.
so what's your solution to data that is shared accross an application? - for
instance
user data - or should every bit of code [re]retrieve the user data from the
database?
and is the database really not just a 'global variable' wrapped up in a couple
of
functions that are used to return data? and where would the 'key' come from that
allows for the retrieval of said user data?
>
>>> positive integers, or that it needs to be an array at all
>>> ($GLOBALS['foos'] = new sabotage("haha")), you would be better off in
>>> e. g. C++ with
>>>
>>> std::map<std::string, uint32_t> foos;
>> please refrain from the old
>> 'you-should-be-using-language-FOO-look-i'll-show-you-how-clever-I-am'
>> argument it's not really adding anything to this discussion.
>
> Originally I wanted to illustrate my point using PHP, but it's much more
> code. Sorry if I hurt your feelings.
hardly - it's just that this is a php list - C++ examples aren't very useful
on the whole, and the language comparison is never truely orthogonal.
>
>>> It's not control over data types, it's visibility of access that causes
>>> most of the lossage. Wrapping the global in a function doesn't remove
>>> the structural defect.
>> huh?
>
> If PHP was statically typed, global variables would still be a bad
> smell. They are bad smell in C++ and Java, for example. It's too easy
> to call getfoo() before you have set up $foo. The risk grows
> exponentially: as soon as you add another global, $bar, you risk that
> you or someone else will use getfoo() inside initbar(), and getbar()
> inside initfoo() (or getfoo() inside initfoo()). Of course, it will be
> several function calls deep, and quite probably only happen in a code
> path that's rarly used (such as error handling).
that is just utterly contrived? why does there need to be 2 seperate functions
for init() & get()? doesn't encapsulation suggest that hiding the init()
specifics
within the get()is a good idea - why should the caller of get() have to worry
about the init() at all?
[sounds like unit testing is forcing a very rigid view of how to do things -
given that unit testing 'forces' lego-brick type of code it might be worth
considering that lots of real-world building are built from concrete. - granted
it's a weird analogy]
where does $foo come from and how it is initialized in your world exactly?
and how do you suggest using, accessing, retrieving $foo?
(i'm assuming you have a perfume to battle against all these awfully bad smells)
>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php