On Sun, 7 Aug 2005, Ilia Alshanetsky wrote:

> Derick Rethans wrote:
> > Problems:
> > 1. There is no way to document the 'virtual' properties with any of the
> > existing
> >    documentation tools (such as phpdoc and doxygen)
> 
> Rather then adding abstract properties, why not simply document the possible
> values inside the doc comments ala:
> /**
> * @var abstract int   Contains all X
> */

That would work, if __set and __get were also called for declared 
properties... but they don't do that so you need some keyword - or break 
BC.

> > 2. There is no way how the magic methods know if a specific 'virtual'
> > property
> >    exists or not as those properties are not declared usually - unless you
> >    define an array with property names as a class constant (which is not
> >    allowed either).
> 
> That's the whole concept behind the feature, if the values were known you may
> as well use clearly declared property and method names.

True, unless you want to force all property access to go through a 
setter/getter for all declared properties for checks. This is also 
useful for catching typoes:

<?php
    error_reporting(4095);

    class foo {
        public $foo;
    }

    $obj = new foo;
    $obj->fo = 42;
?>

does not throw any notice now for BC reasons.

> > 3. There is no way for the magic methods to return a meaningfull 
> >    error when a property doesn't "exist". Of course it is possible 
> >    to throw an error with "trigger_error" or "throw" in case a 
> >    property doesn't "exist" in a specific class, but the file and 
> >    line numbers would not match the actually get/set action. 
> >    debug_backtrace() can be used to retrieve the correct file and 
> >    line, but as you have to do this for every class where you want 
> >    to use setters and getters *and* you have to implement your own 
> >    error message rendering function this is not really a suitable 
> >    option either.
> 
> How about adding a 3rd optional argument to __get and __set which would be an
> array of acceptable values for the "name" parameter? If there is a mismatch a
> standard warning message will be raised if this parameter was supplied.

How does the engine know which list is allowed? The engine is calling 
the __set and __get methods, not users. The whole idea of using a 
keyword here is to provide the engine with such a list.

Derick

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to