If、elseif 和 else 语句返回不正确的结果
If, elseif and else statements returning incorrect results
我在 PHP 中创建这个失败捕获时遇到了一些问题。我希望在用户输入错误的 URL 时显示 require 'error.php';
,returns $echo_error_404 = 1
。
我使用正常的 PHP 路由,这意味着我的 URL 被拆分成 /example1/example2/example3/
.
我有此页面 projects
,当我进入该页面时,它与 $routes[1]
相同。文件 projects.php
不存在。理解正确 projects
应该属于第二个 elseif
语句。然后在使用 file_exists()
时给出 $error_echo_404 = 1
。然而...出于某种奇怪的原因,它一直持续到 $echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
PS:我也知道我的很多代码格式不正确,但是,我这样做是为了解决我的问题。
检查需要哪些文件的代码,以及运行错误检查:
// FIND WEBSITE CONTENT
$echo_content = "";
if(empty($routes[1])){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
}
elseif((!empty($routes[1])) && ($routes[1] == "page")){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
}
elseif((!empty($routes[1])) && ($routes[1] != "page")){
$php_doc = $routes[1];
$file_exist = $php_doc.".php";
if(file_exists($file_exist)){
require $php_doc.".php";
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
}
if(empty($echo_content)){
$echo_error_404 = 1;
}
}
else{
$echo_error_404 = 1;
}
}
else{
$echo_error_404 = 1;
这就是我 运行 正确的版本 if $echo_error_404 = 1
:
if($echo_error_404 == 1){
require 'error.php';
$error_index_head = <<< EOF
HTML TAG OPENING, TITLE, HEAD AND BODY OPENING ETC.
EOF;
echo $error_index_head;
echo $header_html;
echo '<div id="content-wrap">'.$error_page_html.'</div>';
echo $echo_index_after;
echo $footer_html;
}
else{
echo $echo_index_head;
echo $header_html;
echo $echo_content;
echo $echo_index_after;
echo $footer_html;
}
这是我在浏览器中得到的 return,清楚地表明 $echo_error_404
没有被赋值 1
:
var_dump()
结果:
elseif((!empty($routes[1])) && ($routes[1] != "page")){
$php_doc = $routes[1];
var_dump($php_doc);
$php_doc_html = "";
var_dump($php_doc_html);
// THE CODE INBETWEEN
else{
$echo_error_404 = 1;
}
var_dump($php_doc_html);
var_dump($echo_error_404);
Return 显示项目在 $routes[1]
并且 $echo_error_404
是 = 1
:
string(8) "projects"
string(0) ""
string(0) ""
int(1)
使用 switch()
可能更简洁一些。如果我们首先检查 $routes[1]
是否为空,我们应该不需要在以后的条件下再次执行。对我来说,您然后在您的 elseif
中再次检查它是没有意义的。如果它是空的,它将满足第一个 if
而不会继续到语句的下一部分。
// Assume no content
$echo_content = "";
// Check for content
if(empty($routes[1])){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
} else {
switch($routes[1]){
case "page":
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
break;
default:
$file_exist = "{$routes[1]}.php";
if(file_exists($file_exist)){
require $file_exist;
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
}
} else {
$echo_error_404 = 1;
}
}
}
if(empty($echo_content) || $echo_content == ""){
$echo_error_404 = 1;
}
我在 PHP 中创建这个失败捕获时遇到了一些问题。我希望在用户输入错误的 URL 时显示 require 'error.php';
,returns $echo_error_404 = 1
。
我使用正常的 PHP 路由,这意味着我的 URL 被拆分成 /example1/example2/example3/
.
我有此页面 projects
,当我进入该页面时,它与 $routes[1]
相同。文件 projects.php
不存在。理解正确 projects
应该属于第二个 elseif
语句。然后在使用 file_exists()
时给出 $error_echo_404 = 1
。然而...出于某种奇怪的原因,它一直持续到 $echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
PS:我也知道我的很多代码格式不正确,但是,我这样做是为了解决我的问题。
检查需要哪些文件的代码,以及运行错误检查:
// FIND WEBSITE CONTENT
$echo_content = "";
if(empty($routes[1])){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
}
elseif((!empty($routes[1])) && ($routes[1] == "page")){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
}
elseif((!empty($routes[1])) && ($routes[1] != "page")){
$php_doc = $routes[1];
$file_exist = $php_doc.".php";
if(file_exists($file_exist)){
require $php_doc.".php";
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
}
if(empty($echo_content)){
$echo_error_404 = 1;
}
}
else{
$echo_error_404 = 1;
}
}
else{
$echo_error_404 = 1;
这就是我 运行 正确的版本 if $echo_error_404 = 1
:
if($echo_error_404 == 1){
require 'error.php';
$error_index_head = <<< EOF
HTML TAG OPENING, TITLE, HEAD AND BODY OPENING ETC.
EOF;
echo $error_index_head;
echo $header_html;
echo '<div id="content-wrap">'.$error_page_html.'</div>';
echo $echo_index_after;
echo $footer_html;
}
else{
echo $echo_index_head;
echo $header_html;
echo $echo_content;
echo $echo_index_after;
echo $footer_html;
}
这是我在浏览器中得到的 return,清楚地表明 $echo_error_404
没有被赋值 1
:
var_dump()
结果:
elseif((!empty($routes[1])) && ($routes[1] != "page")){
$php_doc = $routes[1];
var_dump($php_doc);
$php_doc_html = "";
var_dump($php_doc_html);
// THE CODE INBETWEEN
else{
$echo_error_404 = 1;
}
var_dump($php_doc_html);
var_dump($echo_error_404);
Return 显示项目在 $routes[1]
并且 $echo_error_404
是 = 1
:
string(8) "projects"
string(0) ""
string(0) ""
int(1)
使用 switch()
可能更简洁一些。如果我们首先检查 $routes[1]
是否为空,我们应该不需要在以后的条件下再次执行。对我来说,您然后在您的 elseif
中再次检查它是没有意义的。如果它是空的,它将满足第一个 if
而不会继续到语句的下一部分。
// Assume no content
$echo_content = "";
// Check for content
if(empty($routes[1])){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
} else {
switch($routes[1]){
case "page":
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
break;
default:
$file_exist = "{$routes[1]}.php";
if(file_exists($file_exist)){
require $file_exist;
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
}
} else {
$echo_error_404 = 1;
}
}
}
if(empty($echo_content) || $echo_content == ""){
$echo_error_404 = 1;
}