note 46004 added to language.oop5.overloading

From: Date: Sun, 26 Sep 2004 01:40:07 +0000
Subject: note 46004 added to language.oop5.overloading
Groups: php.notes 
Request: Send a blank email to php-notes+get-77355@lists.php.net to get a copy of this message
For anyone who is interested in overloading a class method based on the number of arguments, here is a simplified example of how it can be accomplished: <?php function Error($message) { trigger_error($message, E_USER_ERROR); exit(1); } class Framework { // Pseudo function overloading public function __call($func_name, $argv) { $argc = sizeof($argv); switch ($func_name) { case 'is_available': $func_name = ($argc == 2) ? 'is_available_single' : 'is_available_multi'; break; default: // If no applicable function was found, generate the default PHP error message. Error('Call to undefined function Framework::'. $func_name .'().'); } return call_user_func_array(array(&$this, $func_name), $argv); } // protected array is_available_multi($mod_name, $mod_addon_0 [, $mod_addon_1 [, ...]]) protected function is_available_multi() { if (($argc = func_num_args()) < 2) { Error('A minimum of two arguments are required for Framework::is_available().'); } $available_addons = array(); // --snip-- return $available_addons; } protected function is_available_single($mod_name, $mod_addon) { // --snip-- return true; } } $fw = new Framework; $test_one = $fw->is_available('A_Module_Name', 'An_Addon'); var_dump($test_one); // Test one produces a boolean value, supposedly representing whether 'An_Addon' is available and can be used. $test_two = $fw->is_available('A_Module_Name', 'Addon_0', 'Addon_1', 'Addon_2'); var_dump($test_two); // Test two produces an array, supposedly listing any of the three 'Addon_N' modules that are available and can be used. // Here are the actual results of the above: // bool(true) // array(0) { // } ?> --- By adding additional case statements to Framework::__call(), methods can easily be overloaded as needed. It's also possible to add any other overloading criteria you require inside the switch statement, allowing for more intricate overloading functionality. ---- Manual Page -- http://www.php.net/manual/en/language.oop5.overloading.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+46004 Delete -- http://master.php.net/manage/user-notes.php?action=delete+46004&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+46004&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#77355) next »