2017-01-04 15 views
1

Попытка использования этого класса php routing на сервере с установленной версией php 5.4. этот код работает, но не подходит для неопределенных URL-адресов. он также имеет строку комментариев ($k[$_GET['p']] ?? $k[''])(); с правильным поведением кода для php7, что заставляет код работать с комментарием кода .Простая PHP-маршрутизация с неопределенным URL-адресом для php7 и ниже

Как написать такую ​​же функциональность для php5.4? Я предполагаю, что хочу проверить и заменить неопределенные переменные $k[''], чтобы проверить URL-адрес и вывести на экран «страница не найден», но я не могу сделать это правильно.

любые идеи?

<?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

Не понял вопрос, но если вы хотите проверить 'если (Исеть ($ _ GET [ 'р'])) { сделать что-то } еще { что-то еще }' –

+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!) –