-1

PHP での MVC の簡単な例が存在します。問題は、この例は次の場合にのみ機能することです

$action = $_GET['action'];
if(function_exists($action) && !substr($action,0,1)=="_"){
    $action();
}else{
    echo "<h1>404 Page Not Found</h1><p>The page you requested could not be found</p>";
}

に変更:

    $action = $_GET['action'];
if(function_exists($action) || !substr($action,0,1)=="_"){
    $action();
}else{
    echo "<h1>404 Page Not Found</h1><p>The page you requested could not be found</p>";
}

&&が||に変更されました . または完全に!substr($action,0,1)=="_"が削除されました。この行が$actionの実行を許可されていないのは何ですか?

=======================

編集: 問題は、ルーターが&&で動作しないことです!

4

2 に答える 2

1

その理由&&and

だからこのように

if(function_exists($action) && !substr($action,0,1)=="_"){

関数が存在ANDする場合、substr実行よりも _ を含まない

これの意味は

||そうですorか これはつまり

if(function_exists($action) || !substr($action,0,1)=="_"){

関数が存在するが文字列に_それが含まれている場合、または関数が存在しないが文字列に含まれていない場合は_失敗します。

したがって&&、両方が||問題ないかどうかを確認します。一方が有効であるか真であるかに関係なく、もう一方が失敗したか無効である場合は、上記で指定したように 404 が返されます。

お役に立てば幸いです。明確でない場合は、別の方法で説明します

于 2013-01-18T15:23:13.117 に答える
0

変化で解決

から:

if(function_exists($action) && !substr($action,0,1)=="_")

に:

if(function_exists($action) && !(substr($action,0,1)=="_"))
于 2013-01-18T17:45:36.360 に答える