$nowSelf = $_SERVER['PHP_SELF'];
if(
$nowSelf=='/admin/product-add.php' or
$nowSelf=='/admin/blog-add.php' or
$nowSelf=='/admin/blog.php' && $_GET['query']=='edit' or
$nowSelf=='/admin/product.php' && $_GET['query']=='edit' or
$nowSelf=='/admin/store.php' && $_GET['query']=='edit' or
$nowSelf=='/admin/store.php' && $_GET['query']=='add' or
$nowSelf=='/admin/theme.php' && $_GET['query']=='edit' or
$nowSelf=='/admin/theme.php' && $_GET['query']=='add' or
$nowSelf=='/admin/blog-type.php' && $_GET['query']=='edit' or
$nowSelf=='/admin/blog-type.php' && $_GET['query']=='add' or
$nowSelf=='/admin/blog-sub-type.php' && $_GET['query']=='edit' or
$nowSelf=='/admin/blog-sub-type.php' && $_GET['query']=='add')
{
//....
}
這有辦法簡化嗎?
我想過用 switch,但發現還有 GET['query'] 條件呢.....
於是我卡了
這樣一個if就解決了…
$nowSelf = $_SERVER['PHP_SELF'];
$action = empty($_GET['query']) ? 'fileAry' : $_GET['query'].'FileAry';
$addFileAry = ['/admin/store.php', '/admin/theme.php', '/admin/blog-type.php', '/admin/blog-sub-type.php'];
$editFileAry = ['/admin/blog.php', '/admin/product.php'];
$editFileAry = array_merge($editFileAry, $addFileAry);
$fileAry = ['/admin/product-add.php', '/admin/blog-add.php'];
if(in_array($nowSelf, ${$action})){
}
switch ($nowSelf) {
case '/admin/product-add.php':
case '/admin/blog-add.php':
# code...
break;
case '/admin/blog.php':
case '/admin/product.php':
if($_GET['query']=='edit'){
# code...
}
break;
case '/admin/store.php':
case '/admin/theme.php':
case '/admin/blog-type.php':
case '/admin/blog-sub-type.php':
if($_GET['query']=='add' || $_GET['query']=='edit'){
# code...
}
break;
default:
# code...
break;
}
這樣
$arr = ['product-add','blog-add','blog','product','store','theme','blog-type','blog-sub-type'];
$path = pathinfo($nowSelf, PATHINFO_FILENAME);
if (strpos($nowSelf, 'admin') && in_array($path, $arr)) {
if (in_array($_GET['query'], ['add', 'edit'])) {
} else {
}
}
青菜寫的
剩下自己debug
我覺得,最大的重點並不是這支程式的簡化。而是為何要這樣寫??
其目的是為何?
由程式碼可以了解到的是,有可能還有add與edit的參數發送,再加上來源網址的安全驗証的問題。
讓我比較不解的地方是,為何add與edit會是同一個動作判斷式內。為何不能統一參數。
也就是從源頭找起並修正此問題。
要不然,其實程式的重點來看。因該是query參數來決定要add跟edit。
nowSelf 只是拿來做安全驗証處理。這樣程式碼就可以很容易的區分。
這段程式碼要簡寫的方式有太多了,但重點還是要先了解其目的。程式寫法百百種。
有時候不簡化也是為了日後的維護方便,並不一定需要簡化。
(不過我上面說的話,不適合用在你這段程式碼就是了,你這樣的程式碼是一定需要簡化的)
我也來學習一下 :)
<?php
$nowSelf = $_SERVER['PHP_SELF'];
$query = empty($_GET['query'])? '0' : $_GET['query'];
$verification = [
'/admin/product-add.php' => ['0' => TRUE,],
'/admin/blog-add.php' => ['0' => TRUE,],
'/admin/blog.php' => ['edit' => TRUE,],
'/admin/product.php' => ['edit' => TRUE,],
'/admin/store.php' => ['edit' => TRUE, 'add' => TRUE,],
'/admin/theme.php' => ['edit' => TRUE, 'add' => TRUE,],
'/admin/blog-type.php' => ['edit' => TRUE, 'add' => TRUE,],
'/admin/blog-sub-type.php' => ['edit' => TRUE, 'add' => TRUE,],
];
if (isset($verification[$nowSelf][$query])) {
}