There is a lot of overhead in using a framework, with the gain of fast
development.

On Sat, May 2, 2009 at 10:34 PM, Kendall Bennett
<[email protected]>wrote:

> Ok, I have been going through the paces learning Zend Framework and the
> pieces involved, and sometime it seems like design patterns are used when
> they end up just creating lots of overhead, for zero gain.
>
> Consider the Zend_Registry class, and the registry design pattern it is
> implementing. For starters, accessing methods in the registry class is not
> exactly free. There is a lot of overhead involved in getting into the
> registry class and finding the information needed, way more overhead than
> just accessing a global variable.
>
> Now, I am sure we all agree that global variables are a bad thing,
> especially global variables that are accessible everywhere. To me, that is
> what the registry design pattern is intended to solve, but PHP does NOT
> have
> this problem. Global variables in PHP are only accessible from code running
> in the global space, not from within functions or from within methods. At
> least not unless you specifically declare a variable as Oglobal¹. So once
> you are inside a function, or inside a class method, none of the globals in
> the global space are actually in scope, so it is not possible to
> accidentally change the globals or use them out of context (which is the
> danger of globals in languages like C and C++).
>
> In all our PHP code we prefer to use the $GLOBALS super global to access
> global variables, rather than using the global declaration, as it makes it
> clear you are accessing a global variable. So we would use this:
>
> function set_global()
> {
>    $GLOBALS['my_global'] = 'fun_stuff';
> }
>
> function use_global()
> {
>    $use_global = $GLOBALS['my_global'];
> }
>
> rather than this:
>
> function set_global()
> {
>    global $my_global;
>    $my_global = 'fun_stuff';
> }
>
> function use_global()
> {
>    global $my_global;
>    $use_global = $my_global;
> }
>
> Now. In both of these cases, the global variables are NOT by default in the
> scope of the function that uses them, and in the context of a framework
> like
> Zend Framework, nothing runs in the global space anyway, except the very
> first index.php file that boostraps everything.
>
> So, according to the Registry design pattern modeled by Zend_Registry, we
> should do this instead:
>
> function set_global()
> {
>    $my_global = Zend_Registry::set('my_global','fun_stuff');
> }
>
> function use_global()
> {
>    $use_global = Zend_Registry::get('my_global');
> }
>
> Now clearly this is not all that much different to my first example above
> that uses the super global $GLOBALS. In fact, using the $GLOBALS variable
> is
> less typing, just as clear and more importantly, has ZERO overhead to using
> it. Unlike the Zend_Registry::get() function that executes quite a lot of
> code just to get a global variable.
>
> So after examining this some more, it seems to me both a waste of typing
> and
> waste of CPU resources to use the Zend_Registry class, when you can just as
> easily reach for the $GLOBALS super global variable for the very few
> instances where you do need access to global information.
>
> Regards,
>
> Kendall Bennett, CEO
> A Main Hobbies
> 424 Otterson Drive, Suite 160
> Chico, CA 95928
> 1-800-705-2215 (Toll-Free)
> 1-530-894-0797 (Int'l & Local)
> 1-530-894-9049 (Fax)
> http://www.amainhobbies.com
>
>

Reply via email to