您的位置:

php构造方法能重载吗,java方法重写和重载的区别

本文目录一览:

php中如何实现函数重载呢?

PHP本身不能函数重载的,不过你可以使用类中的__call的魔术方法来实现。该魔术方法接受两个参数,一个数方法的名称,一个是包含该方法参数的数组。当对一个类调用一个不可见的方法时(比如该方法是private或者根本没有这个方法)被触发调用。

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 有方法重载吗?

直接重载是无法实现的.但是可以通过__call()方法来变相实现.实际上这个方法是PHP开发者偷懒,才想出这么一个拐弯抹角的方法,而且用这个方法实现的重载程度非常有限,尤其是构造器重载,已经不是真正意义上的构造器。构造器在对象被创建时自动执行,一般不会显式的调用。而用__call()方法实现的构造器必须显示的调用,也就是说构造函数与普通函数的性质完全相同,只不过功能不同而已了。

PHP重载 有什么用

用到的情况还是很多的 比方说 你在做底层开发时 经常会创建一些共有的 变量 就要加载这些数据 这是就得用这些函数了

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);