Re: PHP5 and the DOM model

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2008-04-18 at 13:54 -0600, Nathan Nobbe wrote:
> On Fri, Apr 18, 2008 at 1:42 PM, Robert Cummings <robert@xxxxxxxxxxxxx>
> wrote:
> 
> > Nope, the point is moot. If I've made my properties publicly accessible,
> > now, due to the ability to trap via __get() or __set(), I can remove
> > them and handle them. Thus, I can retrospectively change the semantics
> > without care for having exposed the properties themselves. The point is
> > moot here because the option now exists to enhance properties at a later
> > date without the need to drive the enhancements through a method the
> > user must call (the details of __get() and __set() are hidden from the
> > user of the properties ;)
> 
> 
> i see your rationale now, and yes i agree, using the magic methods does
> afford the ability to make transparent changes and thats great.  however,
> what im saying is thats still encapsulation, just a different way of
> attaining it.

I'm not arguing against encapsulation, only indicating that there's no
longer a point to differentiating between method wrapping and property
access in PHP (although maybe there's some fringe differences-- I
haven't played with it much at this time).

>   and the other negative of that approach is having to bulk up
> the logic in the magic methods.  i tend to use them to handle attempts to
> access non-existent params.

Why bulk up your magic methods? Keep them slim...

<?php

class Foo
{
    function __get( $name )
    {
        if( method_exists( $this, 'get'.ucFirst( $name ) ) )
        {
            return $this->{'get'.ucFirst( $name )}();
        }
         
        return null;
    }
     
    function getName()
    {
        return 'Namicus Orealeeyus';
    }
}
 
$foo = new Foo();
echo $foo->name."\n";

?>

Or if you want to pick and choose...

<?php

class Foo
{
    function __get( $name )
    {
        static $map = array
        (
            'name' => 'getName',
        );

        if( isset( $map[$name] ) )
        {
            return $this->{$map[$name]}();
        }
         
        return null;
    }
     
    function getName()
    {
        return 'Namicus Orealeeyus';
    }
}

?>

> actually, tho drifting a bit; i think the __call() magic method is great
> because it allows handling of what would otherwise be a fatal error when
> trying to invoke a non-existent class method.

Very useful for things like SOAP.

Cheers,
Rob.
-- 
http://www.interjinn.com
Application and Templating Framework for PHP


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux