本文目录一览:
php 到底可不可以重载
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");
?
PHP重载 有什么用
用到的情况还是很多的 比方说 你在做底层开发时 经常会创建一些共有的 变量 就要加载这些数据 这是就得用这些函数了
PHP重载到底是什么意思
针对不同参数形式写出的多个功能类似名字一样的函数。
比如
sort(int a,int b){}
sort(double c,double d,double f){}
这两个函数就是重载关系。表示了功能类似名字一样的两个函数,只是参数形式不一样
php中重载是多太的另一种实现方式,本人贴出原书实力代码,请求解答,实例代码一运行就报错
首先你这个报错是因为一个类定义里不能直接写表达式,必须放在方法里面。可能是你不小心把大括号的结尾放错了地方。
你这个不能算什么多态,而是php的魔术方法__Call ,当调用一个类中不存在的方法时,会调用这个方法。
把代码做了改写:
?php
header("content-type:text/html;charset=utf-8");
class C{
function __call($name,$num){
echo "方法的名称:".$name."br \";
echo "方法参数的个数:".count($num)."br \";
if(count($num)==1){
echo $this-list1();
}
if (count($num)==2){
echo $this-list2();
}
}
public function list1(){
return "这是list1函数br \";
}
public function list2(){
return "这是list2函数br \";
}
}
$m=new C();
$m-list(1);
$m-list(1,2);