php7及更低版本的简单PHP路由,带有未定义的url

php7及更低版本的简单PHP路由,带有未定义的url,php,php-7,php-5.4,Php,Php 7,Php 5.4,尝试在安装了PHP5.4版本的服务器上使用此php路由类。 这段代码可以工作,但对未定义的URL不起作用。它还有一个注释行($k[$\u GET['p']]?$k['')()具有php7的正确代码行为,这使代码能够与//404注释代码块一起工作 如何为php5.4编写相同的功能?我想我想检查并用$k[''']替换未定义的变量,以检查URL并输出“页面未找到”消息,但我无法正确完成 有什么想法吗 <?php class R { private $r = []

尝试在安装了PHP5.4版本的服务器上使用此php路由类。 这段代码可以工作,但对未定义的URL不起作用。它还有一个注释行
($k[$\u GET['p']]?$k['')()具有php7的正确代码行为,这使代码能够与
//404
注释代码块一起工作

如何为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();
?>

试试这个:

function e() {
    $p = $_GET['p'];
    $k = isset($this->r[$p]) ? $this->r[$p] : $this->r[''];
    $k();
}
它应该可以工作。

试试这个:

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

它应该可以工作。

我不明白这个问题,但是如果你想检查
if(isset($u GET['p']){do something}或者其他{something}
你可以使用
isset()
甚至
empty()
来检查它是否存在。我正试图以某种方式重写这个
($k[$u GET['p']]?$k[''))并使php5.4能够为未定义的URL获得干净的“未找到页面”消息。如何使用
isset()
(或,
empty()
)检查URL是否未定义?检查如何在PHP5.4中调用匿名函数。
call_user_func($k[$\u GET['p']]?:$k['])
?不理解这个问题,但如果要检查
如果(isset($\u GET['p']){做点别的事情}其他事情}
您可以使用
isset()
甚至
empty()
来检查它是否存在。我正试图以某种方式重写此
($k[$\u GET['p']]?$k['])并使php5.4能够为未定义的URL获得干净的“未找到页面”消息。如何使用
isset()
(或,
empty()
)检查URL是否未定义?检查如何在PHP5.4中调用匿名函数。
call_user_func($k[$\u GET['p']]?:$k['])
?看起来是这样的。。。非常感谢。看起来是的。。。非常感谢。