不能光up呀,ding呀,可不可以花你一点宝贵时间,在你机子上试试是什么结果?

解决方案 »

  1.   

    应该想得通。
    php4.3.2中也是这个重复定义错。
    php支持类的方法的重载,但不支持函数的重载。
    在较前的版本中,类定义中允许同名方法存在。这实际上是个错误。
    并且同名方法也只有最后定义的有效。
    你把两个function A上下对调一下就可以看到
      

  2.   

    win2k
    apache
    PHP Version 4.3.1Fatal error: Cannot redeclare a() in d:\phpweb\crm0530\class.php on line 11
      

  3.   

    win2000 + Apache/1.3.28 + PHP/4.3.2Fatal error: Cannot redeclare a() in d:\phptext\test9.php on line 10按唠叨老大所说,把两个function A上下对调一下,还是这个错!
      

  4.   

    与java的用法怎相差这么远,对PHP越来越不明白了......xuzuning(唠叨),能不能取个简单的例子?
      

  5.   

    不好意思,重载是什么意思?是重新定义函数吗?
    我的机子是:
    win2000
    apache 1.3.9
    php    4.3.0
    mysql  
    Fatal error: Cannot redeclare a() in c:\apache\htdocs\test\text-05.php on line 11
      

  6.   

    一直对PHP中的类的功能使用不多,只局限于写过几个翻页类/购物车/菜单类等等入门级的东西这些简单的class还并没有涉及到需要多态的地步,所以觉得重载在PHP4中尚无多大可用之处(个人之见)function A($aa=""){
    $this->name2=$aa;
    }楼主也可以实现 但是这毕竟不是真正的重载 期待PHP5
      

  7.   

    php4 的重载,用了一年多了~感觉挺好的,没什么问题。
    <?php
    ############################
    #PHP 重载
    ############################
    class 测试类{
    //================================
    function 测试类(){//构造函数
    $参数个数 =func_num_args();
    $参数列表 = func_get_args();
    switch ($参数个数){
        case 0: $this->构造函数0(); break;
    case 1:  $this->构造函数1($参数列表[0]);break;
    case 2:  $this->构造函数2($参数列表[0],$参数列表[1]);break;
    case 3:  $this->构造函数3($参数列表[0],$参数列表[1],$参数列表[2]);break;    
    }
    }
    //=============Function End ===========
    //================================
    function 构造函数0(){
    printf("我是构造函数0");
    }
    //=============Function End ===========
    //================================
    function 构造函数1($参数1){
    printf($参数1);
    }
    //=============Function End ===========
    //================================
    function 构造函数2($参数1,$参数2){
    printf($参数1.$参数2);
    }
    //=============Function End ===========
    //================================
    function 构造函数3($参数1,$参数2,$参数3){
    printf($参数1.$参数2.$参数3);
    }
    //=============Function End ===========
    }$测试 = new 测试类();
    echo "<br>";
    $测试1 = new 测试类("这是2吧!"," 是2不错");
    echo "<br>";
    $测试2 = new 测试类("这是2吧!"," 是2不错!","  错~~是3");
    echo "<br>";
    ############################
    ?>
      

  8.   

    只有版本低于4.3.0才可做此测试
    <?phpclass A{
    var $name1="abc";
    var $name2;
    var $name3;
    function A(){
    $this->name3="ppp";
    }
    function A($aa){
    $this->name2=$aa;
    }
    }$B=new A("123");
    print_r($B); //out a Object ( [name1] => abc [name2] => 123 )
    $B = new A(); //out Warning: Missing argument 1 for a() in D:\InetPub\books\users\ide\tmp_ide.php on line 12?>
    <?phpclass AA{
    var $name1="abc";
    var $name2;
    var $name3; function AA($aa){
    $this->name2=$aa;
    }
    function AA(){
    $this->name3="ppp";
    }
    }$B=new AA("123");
    print_r($B); //out aa Object ( [name1] => abc [name3] => ppp )
    $B = new AA(); 
    print_r($B); //out aa Object ( [name1] => abc [name3] => ppp )
    ?>bonniewater(陪你去看海) 
    函数、类不能重复定义,这是php的约定。楼主
    在类定义中重复定义同名方法这个做法本身是不对的,重载类的方法应在派生类中进行php是弱类型语言,并有限度的允许函数的参数缺省;而且允许函数参数的个数超过定义的数目。
    那么以参数个数和类型作为区别标志的“重载”的基础就没有了。
    个人认为,php实际上把函数的“重载”融合到基本语法中了。重而简化了“重载”的概念。另外,不要把php和java进行比较。因为他们不是一回事。
    虽然两者都从c语言演化而成。但由于目标不一样,造成无论是表述方式还是实现机制都有很大的差异。
      

  9.   

    NightKids(喜欢一个人) :你那不应该叫重载.现在只是清楚一点.PHP没有支持实际意义上的重载.
      

  10.   

    是的。重载至少包括
    1、类的方法的重载
    2、函数的重载
    3、运算符的重载php只实现了1。试用了php5,也没有增加。
      

  11.   

    从内部来看确实不支持真正的重载~~~
    其实说到底~一般情况下的 web 开发并不需要那些特性。
      

  12.   

    我试过在派生类中对基类的方法进行重载,php对此还是支持得很好的。至于在同一个类中,没有试过。想不出这样做是否有必要。
      

  13.   

    有时候还是挺好用的比如
    如果这个操作类开始就要连接
    $dbc= new MySQLOP();
    $dbc= new MySQLOP("localhost");
    $dbc= new MySQLOP("localhost","user",);
    $dbc= new MySQLOP("localhost","user","password");
    $dbc= new MySQLOP("localhost","user","password",3333);
    不过我比喜欢
    $dbc= new MySQLOP(); //这时候并没有连接
    $dbc->host="localhost";
    $dbc->user="user";//设置好属性之后才
    $dbc->connect();