Overloading Overloading in PHP provides means to dynamically create members and methods. These dynamic entities are processed via magic methods one can establish in a class for various action types. The overloading methods are invoked when interacting with members or methods that have not been declared or are not visible in the current scope. The rest of this section will use the terms inaccessible members and inaccessible methods to refer to this combination of declaration and visibility. All overloading methods must be defined as public. None of the arguments of these magic methods can be passed by reference. PHP's interpretation of overloading is different than most object oriented languages. Overloading traditionally provides the ability to have multiple methods with the same name but different quantities and types of arguments. &reftitle.changelog; &Version; &Description; 5.1.0 Added __isset() and __unset(). 5.3.0 Added __callStatic(). Added warning to enforce public visibility and non-static declaration. Member overloading void__set stringname mixedvalue mixed__get stringname bool__isset stringname void__unset stringname __set() is run when writing data to inaccessible members. __get() is utilized for reading data from inaccessible members. __isset() is triggered by calling isset or empty on inaccessible members. __unset() is invoked when unset is used on inaccessible members. The $name argument is the name of the member being interacted with. The __set() method's $value argument specifies the value the $name'ed member should be set to. Member overloading only works in object context. These magic methods will not be triggered in static context. Therefore these methods can not be declared static. overloading with __get, __set, __isset and __unset example data[$name] = $value; } public function __get($name) { echo "Getting '$name'\n"; if (array_key_exists($name, $this->data)) { return $this->data[$name]; } $trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } /** As of PHP 5.1.0 */ public function __isset($name) { echo "Is '$name' set?\n"; return isset($this->data[$name]); } /** As of PHP 5.1.0 */ public function __unset($name) { echo "Unsetting '$name'\n"; unset($this->data[$name]); } /** Not a magic method, just here for example. */ public function getHidden() { return $this->hidden; } } echo "
\n";

$obj = new MemberTest;

$obj->a = 1;
echo $obj->a . "\n\n";

var_dump(isset($obj->a));
unset($obj->a);
var_dump(isset($obj->a));
echo "\n";

echo $obj->declared . "\n\n";

echo "Let's experiment with the private property named 'hidden':\n";
echo "Privates are visible inside the class, so __get() not used...\n";
echo $obj->getHidden() . "\n";
echo "Privates not visible outside of class, so __get() is used...\n";
echo $obj->hidden . "\n";
?>
]]>
    
    &example.outputs;
    
 on line 70 in  on line 29
]]>
    

   
  

  
   Method overloading

   
    mixed__call
    stringname
    arrayarguments
   
   
    mixed__callStatic
    stringname
    arrayarguments
   

   
    __call() is triggered when invoking
    inaccessible methods in an object context.
   

   
    __callStatic() is triggered when invoking
    inaccessible methods in a static context.
   

   
    The $name argument is the name of the
    method being called. The $arguments
    argument is an enumerated array containing the parameters
    passed to the $name'ed method.
   

   
    overloading instantiated methods with __call and ___callStatic
    
  runTest('in object context');

MethodTest::runTest('in static context');  // As of PHP 5.3.0
?>
]]>
    
    &example.outputs;