用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3779|回复: 4
收起左侧

控制器中的函数不能重载么?

[复制链接]
发表于 2008-11-25 11:16:46 | 显示全部楼层 |阅读模式
很是郁闷,我发现控制器中的函数不能重载。
例如:
function show()
{
     echo 'I am have noting.';
}

function show($key)
{
     echo 'I am have '.$key;
}

这样我访问 http://mydomain/myclass/show/123
就会报错:  Fatal error: Cannot redeclare Search::show()

于是我把function show() 删除了。

但是问题有来了,有的时候用户不小心就访问了http://mydomain/myclass/show/
于是乎系统又报错了:Message: Missing argument 1 for Search::show()
难道没有参数,就不能传一个空的过来么,为何要报错呀。这好像不符合习惯啊。请各位大侠有没有碰到这样的困惑,如何解决。
发表于 2008-11-25 11:45:26 | 显示全部楼层
重载?PHP 不支持 C++ 那样的函数重载。
如果是从父类继承的,会覆盖父类的函数。

楼主那样的情况,应该是给函数一个默认值!
function show($key = '1')

楼主好好看看 PHP 手册吧,这都是 PHP 基础知识。
 楼主| 发表于 2008-11-25 12:04:16 | 显示全部楼层

回复 2楼 的帖子

呵呵,第一次做PHP开发。Java程序员出身。感觉PHP很蹩脚。
发表于 2008-11-25 12:41:10 | 显示全部楼层
一看你就是java出身,c++和java完全可以函数重载
发表于 2009-5-6 12:16:38 | 显示全部楼层
PHP 不支持 C++ 那样的同名函数,参数不同的重载!
PHP 重载需要一个其它的方式,这个在 PHP 手册里有说明,附上 PHP 手册相关章节:http://www.php.net/manual/en/language.oop5.overloading.php

希望初学 PHP 的朋友多多看 PHP 手册,不要想当然以为 PHP 和其它语言有同样的使用方式。

本版积分规则