嘿嘿,宇凡斑竹,SORRY哈,昨前天外出游玩,未上来看帖
你说你想实现函数重载,可为什么会是不同参数呢?重载在OOP中应该是返回值,参数列表一致啊,多态才是给一个同名函数传递不同参数以实现不同的功能哦。写了两个例子,欢迎指正,交流
1。重载
<?
class people
{
var $name;
var $age;
var $sex;
function people($name,$age,$sex)
{
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function print_info()
{
$str="My name: ".$this->name."<br>My age: ".$this->age."<br>My sex: ".$this->sex;
echo $str;
}
}
class student extends people
{
var $work;
function student($name,$age,$sex,$work)
{
$this->people($name,$age,$sex);
$this->work=$work;
}
//重载父类print_info()函数
function print_info()
{
$str="My name: ".$this->name."<br>My age: ".$this->age."<br>My sex: ".$this->sex."<br>My work: ".$this->work;
echo $str;
}
}$p=new people("xioyoo",20,"boy");
$s=new student("xioyoo1981",20,"boy","student");
$p->print_info();
echo "<br><br>";
$s->print_info();
?>2。多态
<?
class student
{
var $name;
var $age;
var $sex;
var $school;
function student($name,$age,$sex,$school)
{
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
$this->school=$school;
}
function print_info()
{
$n=func_num_args();
$m=func_get_args();
switch ($n)
{
case 0:
$this->print_no_info();
    break;
case 2:
$this->print_simple_info($m[0],$m[1]);
    break;
case 4:
$this->print_all_info($m[0],$m[1],$m[2],$m[3]);
    break;
default:
exit();
}
}
function print_no_info()
{
echo "<font color=red>no info! ! !</font><br><br>";
}
function print_simple_info($name,$sex)
{
$str="简单信息<br>姓名:".$name."<br>性别:".$sex;
echo $str."<br><br>";
}
function print_all_info($name,$age,$sex,$school)
{
$str="全部信息<br>姓名:".$name."<br>年龄:".$age."<br>性别:".$sex."<br>学校:".$school;
echo $str."<br><br>";
}
}$s1=new student("xioyoo",20,"男","电子科大");$s1->print_info();
$s1->print_info($s1->name,$s1->sex);
$s1->print_info($s1->name,$s1->age,$s1->sex,$s1->school);
?>

解决方案 »

  1.   

    第2个程序根本就不是正规的形式,PHP本来也不支持象C++,JAVA那样写,其实主要借助了func_num_args(),func_get_args()这两个函数,通过传入函数的参数数目实现不同的SWITCH,有点剑走偏锋的感觉。但是PHP没有数据类型,所以不能根据参数类型来实现,个人感觉PHP顶多算是基于对象,OOP方面比JAVASCRIP好点,起码它可以继承,重载。但是访问控制,函数修饰,多重继承,接口实现(根本没接口的概念),等等,你就统统别想实现。
      

  2.   

    恩~~你这是子类对父类方法的重写~~我不是指这个~~我是说在同一个class中重载方法~~比如一个描述类~~我可以用
    function class_name()
    {
    }
    来构造一个空的实例也可以用function class_name($ID)
    {
      $sql = "select * from ".$TableName." where ID = ".$ID;
      $res = mysql_query($sql);
      $tmp = mysql_fetch_object($res);
      $this->name = $tmp->name;
      //..
    }
    来构造一个有值实例这种方法在c和java里面都行得通~~而且应用很广泛~~但是我php里不行~~:(
      

  3.   

    我写了两个例子,第2个就是在同一个CLASS中重载方法啊,第2个例子我并没有EXTENDS,还有,你看最后对方法的引用:
    $s1->print_info();
    $s1->print_info($s1->name,$s1->sex);
    $s1->print_info($s1->name,$s1->age,$s1->sex,$s1->school);
    都是引用的print_info()
    你的意思我懂了,完全可以实现你要的功能,就是做多个构造器
      

  4.   

    func_num_args();
    func_get_args();我终于看到这两个东西了~~
    嘿嘿~~这严格的说应该不叫重载~~但是功实现的能是一样的~~:)
      

  5.   

    还有一个func_num_arg($position)可以得指定位置参数
    其实只是说写法不是正规的重载,但没办法啊,PHP不支持那样
      

  6.   

    一样嘛~~~我在动力和一网上的帐号都是yufan~~多交流哈~~现在学校搞技术的人毕竟不算多了~~
      

  7.   

    好好好,交流交流,我的OICQ:1611471