#24808 [Ana]: access to private or protected member throw __get and __set method
| From: | helly@php.net | Date: | Mon, 31 May 2004 21:14:29 +0000 |
| Subject: | #24808 [Ana]: access to private or protected member throw __get and __set method | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-60219@lists.php.net to get a copy of this message | ||
ID: 24808
Updated by: helly@php.net
Reported By: Bertrand dot Willm at laposte dot net
Status: Analyzed
Bug Type: Zend Engine 2 problem
Operating System: *
PHP Version: 5*
New Comment:
That seems to be the best solution.
Previous Comments:
------------------------------------------------------------------------
[2004-05-30 14:43:07] stas@php.net
After talking with Andi, I think it's a valid issue and what needs to
be done is to make accessors (__get/__set) be called on access to
variables that are not visible in current context. This still would not
change the fact that acessors are not called on existing variables, but
invisible variables in this context would be regarded as good as
unexisting.
------------------------------------------------------------------------
[2003-10-16 05:03:46] helly@php.net
The behavior is absolut correct. Since the property 'var' is declared
private it cannot be accessed. And also since it is a declared property
there is no need for the engine to execute __call(). Both __get() and
__set() are only there to handle virtual properties (aka not declared
ones).
Double check #25815 and #25199
------------------------------------------------------------------------
[2003-07-28 18:50:06] alan at akbkhome dot com
This has been discussed on zend2-engine, getters and setters on
'defined' vars is a feature that a number of people would like to
see..
AFAIK It just needs a voluteer to propose some code..
------------------------------------------------------------------------
[2003-07-28 17:49:44] Bertrand dot Willm at laposte dot net
It is quite nice to tell me to double-check the documentation, but I
don't see were it is written that the name given to __get and __set
methods can't correspond to private or protected members.
If it is not written, this could be nice to add that information in the
documentation.
Perhaps that for a clean programmation this is not a good idea to use
the same name for members and properties.
Anyway, after analisys, I found that the current implementation of
__get and __set is an unsatsifactory answer to properties. It is far
away from what is proposed in C#, Delphi (and of course C++ builder) or
visual basic.
To my knowledge, there is no equivalent in java or C++.
------------------------------------------------------------------------
[2003-07-28 13:59:09] sfox@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
Try this:
<?php
class CBaseClass {
private $var = 'default';
function get($name)
{
return $this->var;
}
}
$object = new CBaseClass();
echo $object->get('name');
?>
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/24808
--
Edit this bug report at http://bugs.php.net/?id=24808&edit=1