2个回答
展开全部
php 作为一种弱类型语言,本身不能像强类型如java ,c++那样,直接的实现重载。不过可以通过一些方法,间接的实现重载。
使用一个统一的函数来实现重载。该方法要使用func_get_args()和func_num_args()方法。
<?php
function test1($name){
echo $name;
}
function test2($name,$age){
echo $name.$age;
}
function load(){
//返回输入的元素数目
$num=func_num_args();
//返回输入元素列表的数组形式
$arr=func_get_args();
if($num==1){
test1($arr[0]);
}else {
test2($arr[0],$arr[1]);
}
}
load("a");
echo "<br/>";
load("a","b");
?>
2.当对象试着调用不存在或者受权限限制的方法时,__call()方法会被自动调用,从而可以实现类型重载的效果。该方法是php5新增的方法。
<?php
class A{
//name :调用的方法名字。args:参数列表
function __call($name,$args){
$num=count($args);
if($num==1){
$this->test1($args[0]);
}
else {
$this->test2($args[0],$args[1]);
}
}
function test1($name){
echo $name;
}
function test2($name, $age){
echo $name." ".$age;
}
}
$a=new A();
$a->a("a");
echo "<br/>";
$a->a("a","b");
?>
使用一个统一的函数来实现重载。该方法要使用func_get_args()和func_num_args()方法。
<?php
function test1($name){
echo $name;
}
function test2($name,$age){
echo $name.$age;
}
function load(){
//返回输入的元素数目
$num=func_num_args();
//返回输入元素列表的数组形式
$arr=func_get_args();
if($num==1){
test1($arr[0]);
}else {
test2($arr[0],$arr[1]);
}
}
load("a");
echo "<br/>";
load("a","b");
?>
2.当对象试着调用不存在或者受权限限制的方法时,__call()方法会被自动调用,从而可以实现类型重载的效果。该方法是php5新增的方法。
<?php
class A{
//name :调用的方法名字。args:参数列表
function __call($name,$args){
$num=count($args);
if($num==1){
$this->test1($args[0]);
}
else {
$this->test2($args[0],$args[1]);
}
}
function test1($name){
echo $name;
}
function test2($name, $age){
echo $name." ".$age;
}
}
$a=new A();
$a->a("a");
echo "<br/>";
$a->a("a","b");
?>
展开全部
虽然有关php的书上都写明php支持重载。不过其实那是覆盖。是子类对父类方法或变量的重写。不能叫做重载
php不支持函数的重载,可能以后也永远不会支持
在oop中,函数的重载有两个条件
1、参数的个数不同——php支持参数缺省,无法用参数个数区别
2、参数的类型不同——php是弱类型语言,会根据上下文自动做类型转换
所以,php不可能支持函数的重载,不过能用其他的方法模拟出来的。比如你自己写方法在写的函数里用判断语句,得到参数个数或类型,去执行不同的代码,不过意义不大,完全可以定义个新名字的函数!
根据zend网站的讨论,将来实现操作符重载的可能性也很小,不过拭目以待,万一他们一高兴将php全部重写,跟c++一样了,那就无敌了。。
php不支持函数的重载,可能以后也永远不会支持
在oop中,函数的重载有两个条件
1、参数的个数不同——php支持参数缺省,无法用参数个数区别
2、参数的类型不同——php是弱类型语言,会根据上下文自动做类型转换
所以,php不可能支持函数的重载,不过能用其他的方法模拟出来的。比如你自己写方法在写的函数里用判断语句,得到参数个数或类型,去执行不同的代码,不过意义不大,完全可以定义个新名字的函数!
根据zend网站的讨论,将来实现操作符重载的可能性也很小,不过拭目以待,万一他们一高兴将php全部重写,跟c++一样了,那就无敌了。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询