2014-09-14 1 views
1

기본적으로 동일한 페이지의 여러 버전을 갖고 싶습니다. 일부는 params를 허용하고 일부는 허용하지 않습니다. 예를 들어codeigniter의 함수를 다른 매개 변수로 덮어 쓸 수 있습니까?

,

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와 비슷한 것을 사용하고 있습니까?

답변

1

아니요. PHP에서는 이러한 방식으로 함수를 오버로드 할 수 없습니다. 진짜 가치가

public function __call (string $name , array $arguments) 
{ 
    if($name === 'index' && sizeof($arguments) === 1) { 
     // do index($item) stuff 
    } else { 
     // do index() stuff 
    } 
} 

그러나이 방법으로 __call 사용, 정직하고, 불필요한 성능 오버 헤드 및 복잡성을 추가합니다 : 그것은 당신이 __call 방법을 오버로드 유사한 기능을 달성 할 수있다. PHP에서 코드를 재사용하려면 함수를 더 작은 개별 함수로 분해하고 필요에 따라 다시 사용하면됩니다.

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 
} 
관련 문제