note 91326 modified in language.oop5.overloading by danielc
| From: | danielc@php.net | Date: | Fri, 28 Aug 2009 02:48:10 +0000 |
| Subject: | note 91326 modified in language.oop5.overloading by danielc | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-159971@lists.php.net to get a copy of this message | ||
It is possible to accomplish method polymorphism via PHP's __call method:
<?php
class Example{
public function __call($name, $arguments){
switch($name){
case 'foo':
switch(count($arguments)){
case 2:
echo 'You called "foo" with two arguments.<br>' .
PHP_EOL;
break;
case 3:
echo 'You called "foo" with three arguments.<br>'
. PHP_EOL;
break;
default:
echo 'Error: Invalid number of arguments to
"foo."<br>' . PHP_EOL;
break;
}
break;
default:
echo "Error: Call to undefined function \"$name.\"<br>" .
PHP_EOL;
}
}
}
$test = new Example;
$test->foo('bar', 'baz');
$test->foo('bar', 'baz', 'fez', 'fap');
$test->bar();
?>
--was--
maciej at killer-robot dot net said:
> Just a note in the interest of sparing people some confusion if they are coming
> from or reading about other object-oriented languages: Object "overloading"
> in PHP has nothing to do with overloading as it is commonly understood.
> Normally, "overloading" refers to the ability to declare multiple functions with
> the same name, which get called based on the number/type of parameters --
> this does not exist in PHP. In PHP, "overloading" is just a mechanism for
> providing handlers for access to missing methods/variables.
Actually, it is possible to accomplish method polymorphism via PHP's __call method:
<?php
class Example{
public function __call($name, $arguments){
switch($name){
case 'foo':
switch(count($arguments)){
case 2:
echo 'You called "foo" with two arguments.<br>' .
PHP_EOL;
break;
case 3:
echo 'You called "foo" with three arguments.<br>'
. PHP_EOL;
break;
default:
echo 'Error: Invalid number of arguments to
"foo."<br>' . PHP_EOL;
break;
}
break;
default:
echo "Error: Call to undefined function \"$name.\"<br>" .
PHP_EOL;
}
}
}
$test = new Example;
$test->foo('bar', 'baz');
$test->foo('bar', 'baz', 'fez', 'fap');
$test->bar();
?>
http://php.net/manual/en/language.oop5.overloading.php