#在php中什么意思?
up
作者 Verdana 发布于 2003-08-00 分类:php基础编程
其实好早以前就发现这个问题。
关于PHP4构造函数,实际的情况与 PHP4 手册上面叙述的并不相
符合。
大家都知道我们定义一个类,如果类中有一个与类同名的方法,
那么这个方法就成为这个类的构造函数,这个没有什么疑问。
问题在于,当出现继承时,就有点麻烦了!
PHP3 中对于构造函数的定义是:
"与类同名的方法"
当子类从父类中派生出来后,创建子类的实例,如果在有方法与
子类同名,那么不管这个方法是在父类中定义的,还是在子类中
定义的,这个方法都会成为子类的构造函数。
[php]
<?php
// 父类
class vehicle
{
// 父类构造函数
function vehicle()
{
print "这里是 vehicle 类的构造函数";
}
function bus()
{
print "我是一辆 bus";
}
}
class bus extends vehicle
{
function Car()
{
print "这里是一辆 Car";
}
}
$ins = new bus();
?>
[/php]
这时父类中定义的 vehicle() 方法将成为子类 bus 的构造函数。
我的机器上面没有 PHP3, 我也懒得去验证,反正 PHP3 已经成为
历史了,就让它去吧~
关键看看 PHP4 吧~
按照官方手册的说法, PHP4 中构造函数定义有了新的变化。
“在该类中定义的,并与这个类同名的方法”
换句话说,如果父类中有个方法与其派生类同名,那么这个方法
将不会成为这个派生类的构造函数(但在 PHP3 中将成为子类的
构造函数)。
并且如果子类中没有定义构造函数,那么创建子类的实例时,将
自动调用父类的构造函数,如果父类有构造函数的话。
问题来了~
我发现这个定义似乎不太灵验啊~
看下面的例子
还是刚才那个例子
[php]
<?php
// 父类
class vehicle
{
// 父类构造函数
function vehicle()
{
print "这里是 vehicle 类的构造函数";
}
function bus()
{
print "我是一辆 bus";
}
}
class bus extends vehicle
{
function Car()
{
print "这里是一辆 Car";
}
}
$ins = new bus();
?>
[/php]
按照 PHP4 中的定义,这里将不会输出任何东西。
因为在子类中并没有定义 bus() 方法。
可是我运行这个代码的时候,却发现它调用了 vehicle 类的 bus()
方法。
也就是说 PHP 4 中构造函数的定义是错的。
PHP4 和 PHP3 一样,不同的是, PHP4 中如果子类没有定义
自己的构造函数会自动调用父类的构造函数(这一点没有错,
测试过了,大家把 vehicle 中的 bus() 去掉运行就可以看出来
了,程序调用了父类的 vehicle() 方法)。
我自己也不是太肯定,大家把这个例子运行一下,然后看看
PHP 4 手册中关于构造函数的叙述,我英文不是太好,大家看看
吧~
逛论坛交流:关于 PHP4 中构造函数的一点点疑惑~
我试试。。。记得以前做过类似实验,没发现问题呢
[php]
class A
{
function A()
{
echo "I am the constructor of A.
";
}
function B()
{
echo "I am a regular function named B in class A.
";
echo "I am not a constructor in A.
";
}
}
class B extends A
{
function C()
{
echo "I am a regular function.
";
}
}
// This will call B() as a constructor.
$b = new B;
[/php]
运行一下这个例子吧~
手册上面说会输出
I am the constructor of A.
但是我运行了,却输出
I am a regular function named B in class A.
I am not a constructor in A.
我在 ZDE 里面调试的, PHP 4.2.1
换到 WEB Server 中也是一样。
APACHE with PHP 4.3.3 - Dev
QUOTE:
我有话要讲:(可以匿名发表, 发广告的有多远请滚多远!!!)
昵称: 请输入验证码:
抢着回答
3 条回复
回复