note 46004 added to language.oop5.overloading
| From: | anthony at ectrolinux dot com | 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