有时候还是挺好用的比如 如果这个操作类开始就要连接 $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();
php4.3.2中也是这个重复定义错。
php支持类的方法的重载,但不支持函数的重载。
在较前的版本中,类定义中允许同名方法存在。这实际上是个错误。
并且同名方法也只有最后定义的有效。
你把两个function A上下对调一下就可以看到
apache
PHP Version 4.3.1Fatal error: Cannot redeclare a() in d:\phpweb\crm0530\class.php on line 11
我的机子是:
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
$this->name2=$aa;
}楼主也可以实现 但是这毕竟不是真正的重载 期待PHP5
<?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>";
############################
?>
<?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语言演化而成。但由于目标不一样,造成无论是表述方式还是实现机制都有很大的差异。
1、类的方法的重载
2、函数的重载
3、运算符的重载php只实现了1。试用了php5,也没有增加。
其实说到底~一般情况下的 web 开发并不需要那些特性。
如果这个操作类开始就要连接
$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();