Magic method visibility in PHP 5.3+
| From: | Ralph Schindler | Date: | Tue, 01 Jul 2008 22:55:49 +0000 |
| Subject: | Magic method visibility in PHP 5.3+ | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-38694@lists.php.net to get a copy of this message | ||
Well, I guess I blinked and missed the internal@ thread on this topic :)
Seriously though, if there was a thread on this subject, please point me in the right direction.
In PHP 5.3 snaps, it appears that magic methods __isset, __unset, __get, __set must have a public visibility or the engine will trigger a warning. Why is this? It works as expected in 5.x branches.
I am not sure why this should be enforced as it should be up to the developer as to which methods in the API should be exposed for direct invocation.
If a developer never intends on a user calling $obj->__set(...), then it should be allowed that the public call to that method be disallowed, but still allow the magic functionality (b/c of the presence of that magic function.)
Without getting too long winded, ill just put code and warnings below.
Cheers,
Ralph Schindler
script.php
<?php
class SomeMagic
{
public static function getInstance() {}
protected function __construct() { }
protected function __isset($name){}
protected function __unset($name){}
protected function __set($name, $value){}
protected function __get($name) {}
protected function __clone() {}
protected function __destruct() {}
}
Warnings:
$ /usr/local/php53/bin/php test-magicaccess.php
PHP Warning: The magic method __isset() must have public visibility and can not be static in script.php on line 8
PHP Warning: The magic method __unset() must have public visibility and can not be static in script.php on line 9
PHP Warning: The magic method __set() must have public visibility and can not be static in script.php on line 10
PHP Warning: The magic method __get() must have public visibility and can not be static in script.php on line 11