Created
November 8, 2012 05:31
-
-
Save Ocramius/4037010 to your computer and use it in GitHub Desktop.
PHP Magic methods
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--TEST-- | |
Test script to verify that magic methods should be called only once when | |
accessing an unset property. | |
--FILE-- | |
<?php | |
class Test { | |
public $publicProperty; | |
protected $protectedProperty; | |
private $privateProperty; | |
public function __construct() { | |
unset( | |
$this->publicProperty, | |
$this->protectedProperty, | |
$this->privateProperty | |
); | |
} | |
function __get($name) { | |
echo '__get ' . $name . "\n"; | |
return $this->$name; | |
} | |
function __set($name, $value) { | |
echo '__set ' . $name . "\n"; | |
$this->$name = $value; | |
} | |
function __isset($name) { | |
echo '__isset ' . $name . "\n"; | |
return isset($this->$name); | |
} | |
} | |
$test = new Test(); | |
$test->nonExisting; | |
$test->publicProperty; | |
$test->protectedProperty; | |
$test->privateProperty; | |
isset($test->nonExisting); | |
isset($test->publicProperty); | |
isset($test->protectedProperty); | |
isset($test->privateProperty); | |
$test->nonExisting = 'value'; | |
$test->publicProperty = 'value'; | |
$test->protectedProperty = 'value'; | |
$test->privateProperty = 'value'; | |
?> | |
--EXPECTF-- | |
__get nonExisting | |
Notice: Undefined index: nonExisting in %__set__get_006.php on line %d | |
__get publicProperty | |
Notice: Undefined index: publicProperty in %__set__get_006.php on line %d | |
__get protectedProperty | |
Notice: Undefined index: protectedProperty in %__set__get_006.php on line %d | |
__get privateProperty | |
Notice: Undefined index: protectedProperty in %__set__get_006.php on line %d | |
__isset nonExisting | |
__isset publicProperty | |
__isset protectedProperty | |
__isset privateProperty | |
__set nonExisting | |
__set publicProperty | |
__set protectedProperty | |
__set privateProperty |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment