基本上,我想拥有相同页面的多个版本,一些接受参数,一些不接受参数。
例如,
public function index()
{
require_once(APPPATH . 'views/sessiondata.inc.php');//sets up variables from session data
require_once(APPPATH . 'views/header.inc.php');//header
include(APPPATH . 'views/breadcrumbs.inc.php');//top breadcrumbs
echo ' <h1>Let\'s sell an item, '.$username.',</h1>';
//print_r($this->session->all_userdata());
include(APPPATH . 'views/breadcrumbs.inc.php');//bottom breadcrumbs
require_once(APPPATH . 'views/footer.inc.php');//footer
}
这是控制器x.php的默认函数,假设。我还可以使用:
public function index($item)
{
require_once(APPPATH . 'views/sessiondata.inc.php');//sets up variables from session data
require_once(APPPATH . 'views/header.inc.php');//header
include(APPPATH . 'views/breadcrumbs.inc.php');//top breadcrumbs
echo ' <h1>Let\'s sell an item, '.$username.',</h1>';
//DO SOMETHING WITH THE $item VARIABLE.
//print_r($this->session->all_userdata());
include(APPPATH . 'views/breadcrumbs.inc.php');//bottom breadcrumbs
require_once(APPPATH . 'views/footer.inc.php');//footer
}
系统会自动知道要使用哪个版本吗?是否有类似于我需要使用的Java的@OVERRIDE?
答案 0 :(得分:1)
没有。 PHP不允许您以这种方式重载函数。也就是说,您可以通过重载__call方法来实现类似的功能:
public function __call ( string $name , array $arguments )
{
if( $name === 'index' && sizeof($arguments) === 1 ) {
// do index($item) stuff
} else {
// do index() stuff
}
}
但说实话,以这种方式使用__call没有实际价值,并增加了不必要的性能开销和复杂性。在PHP中,如果要重用代码,只需将函数分解为较小的离散函数,并根据需要重用它们。
答案 1 :(得分:1)
您不能拥有两个单独的函数(因为PHP不允许函数重载),但您可以使用CodeIgniter在选择控制器函数时将遵循的默认参数。因此,不要使用两个函数,请执行以下操作:
public function index($item=null)
{
require_once(APPPATH . 'views/sessiondata.inc.php');//sets up variables from session data
require_once(APPPATH . 'views/header.inc.php');//header
include(APPPATH . 'views/breadcrumbs.inc.php');//top breadcrumbs
echo ' <h1>Let\'s sell an item, '.$username.',</h1>';
if ($item !== null) {
//DO SOMETHING WITH THE $item VARIABLE.
}
//print_r($this->session->all_userdata());
include(APPPATH . 'views/breadcrumbs.inc.php');//bottom breadcrumbs
require_once(APPPATH . 'views/footer.inc.php');//footer
}