2017-01-04 12 views
1

php 5.4 버전이 설치된 서버에서이 PHP 라우팅 클래스를 사용하려고합니다. 이 코드는 작동하지만 정의되지 않은 URL에는 적합하지 않습니다. 또한 코드 라인 ($k[$_GET['p']] ?? $k[''])();과 php7에 대한 올바른 코드 동작을 사용하여 //404 주석 처리 된 코드 블록에서 작동합니다.php7 이하에 대해 정의되지 않은 URL이있는 간단한 PHP 라우팅

php5.4와 동일한 기능을 작성하는 방법은 무엇입니까? 나는 확인하고 URL을 확인하고 "페이지를 찾을 수 없습니다"마사지 출력을 $k['']와 정의되지 않은 변수를 바꿀 것 같아요, 나는 제대로 할 수 없습니다.

어떤 아이디어가 있습니까?

<?php 
    class R 
    { 
     private $r = []; 
     function a($r, callable $c){ 
      $this->r[$r] = $c; 
     } 

     function e(){ 
      $k = $this->r; 
      // working php7 version: ($k[$_GET['p']] ?? $k[''])(); 

      // trying to make the same for php5.4 here: 
      $k[$_GET['p']]();  

     } 
    } 

    $router = new R; 

    // Home 
    $router->a('/', function(){ 
     echo 'Home'; 
    }); 

    // About 
    $router->a('/about', function(){ 
     echo 'About'; 
    }); 

    // 404 (works only with php7 version line of code) 
    $router->a('', function(){ 
     echo 'Page Not Found'; 
    }); 

    $router->e(); 
?> 
+0

는 질문을 이해하지만 싶다면 (는 isset가 ($이 _ GET [ 'p는'])) { 뭔가 할} 다른 {다른 뭔가 을}' –

+0

당신은'는 isset을 사용할 수 있는지 (' 을 확인하지 않았나요)'또는'empty()'를 사용하여 그것이 존재하는지 확인하십시오. –

+0

어떻게 든이'($ k [$ _ GET [ 'p']] ?? $ k [ ''])();'를 다시 작성하여 php5.4가 깨끗한 페이지를 얻을 수 있도록합니다. 정의되지 않은 URL에 대한 마사지를 발견했습니다. 'isset()'(또는'empty()')를 사용하여 URL이 정의되지 않았는지 확인하는 방법? – LowMatic

답변

0

이 시도 : 그것은 작동해야

function e() { 
    $p = $_GET['p']; 
    $k = isset($this->r[$p]) ? $this->r[$p] : $this->r['']; 
    $k(); 
} 

.

+0

그 것처럼 보입니다 ... 감사합니다! – LowMatic

+0

@LowMatic np!) –