Re: public readonly variables
| From: | Adam Richardson | Date: | Fri, 23 Apr 2010 15:57:38 +0000 |
| Subject: | Re: public readonly variables | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-304482@lists.php.net to get a copy of this message | ||
On Fri, Apr 23, 2010 at 6:19 AM, Richard Quadling
<rquadling@googlemail.com>wrote:
> On 23 April 2010 10:55, Ashley Sheridan <ash@ashleysheridan.co.uk> wrote:
> > I know the subject line might sound a bit like an oxymoron, but bear
> > with me!
> >
> > What I'd like to have is a property of an object that behaves like a
> > public variable when it comes to reading, but like a protected one when
> > it comes to writing, as it would make my code a lot easier to read.
> >
> > I know about the __get($var) method to magically provide this behaviour,
> > but from all I've read it can be pretty slow compared to a regular
> > public variable. I've seen a thread on the dev lists where someone
> > requested it, but can't find anything in the manual.
> >
> > Does anyone know if this is available in a later version of PHP, or if
> > it's implementation is penned for some time in the future?
> >
> > Thanks,
> > Ash
> > http://www.ashleysheridan.co.uk
> >
> >
> >
>
> What you are asking for is commonly known as accessibility. This has
> been discussed on the list and is something I think would be a great
> feature.
>
> http://wiki.php.net/rfc/propertygetsetsyntax is an incomplete
> RFC (it
> says it is incomplete at the top).
>
> The last update was 2010/01/08 22:11, so a few months old.
>
> Hopefully, some of the clever brains here can get to grips with it and
> come to some consensus.
>
>
> Whilst you can easily code __get()/__set() or getVar()/setVar()
> methods to deal with it, with the later ones being significantly
> easier to docblock, there is no easy way to document the property,
> only the methods to set or get the property.
>
>
> Richard.
>
>
>
>
>
>
> --
> -----
> Richard Quadling
> "Standing on the shoulders of some very clever giants!"
> EE : http://www.experts-exchange.com/M_248814.html
> EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
> Zend Certified Engineer :
> http://zend.com/zce.php?c=ZEND002498&r=213474731
> ZOPA : http://uk.zopa.com/member/RQuadling
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
I've sometimes implemented a scheme where I create the variable, then unset
it in the constructor and rely on the magic method. I know you were
concerned about the performance of magic methods, and I don't have a
solution for that :(
For example:
<?php
/**
* Description of PHPClass that documents nicely and still protects
variables from reassignment.
*
* @author Adam Richardson
*/
class PHPClass {
/**
* Name for object.
* @var String
*/
public $name;
/**
* Size of something really important.
* @var int
*/
public $size;
/**
* Local storage of magic vars
* @var array
*/
private $_vars = array();
/**
* Create object and initialize instance vars.
* @param array $instance_vars
*/
function __construct(array $instance_vars)
{
unset($this->name);
unset($this->size);
$this->_vars = $instance_vars;
}
function __get($name)
{
return $this->_vars[$name];
}
}
$obj = new PHPClass($instance_vars = array('name' => 'Billy',
'size' =>
1000));
echo $obj->name;
?>
Adam
--
Nephtali: PHP web framework that functions beautifully
http://nephtaliproject.com