$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])) {
	
}