php - 如何简化这个复合 php if/else 语句
问题描述
我有三种可能的方法可以设置给定页面的“英雄”部分的高度,其中有一个应该选择哪个变量的优先级。
如果变量是在页面级别设置的,那么就使用它。
如果是博客存档或博客文章,请使用博客选项设置。
如果它们不可用,请使用主题设置。
如果它们不可用,请使用默认值。
如果它不是博客,则使用可用的主题设置,否则,使用硬编码的默认设置。
到目前为止,我是这样写的:
//// CUSTOMIZER OPTIONS
$heroHeightDefault = 'header_md';
$heroHeightTheme = get_theme_mod( 'hero_header_height', 0 );
$heroHeightBlog = get_field($sepPrefix . '_override_height', 'options');
$heroHeightPage = get_field($sepPrefix . '_override_height');
if(empty($heroHeightTheme) && empty($heroHeightBlog) && empty($heroHeightPage)){
$heroHeight = $heroHeightDefault; // No settings - choose default (this is my safety in case my logic below is flawed)
} elseif(!empty($heroHeightPage)){
$heroHeight = $heroHeightPage; // if the page settings are NOT empty choose the page settings
} elseif($isBlogPage) { // if the page settings are empty Check to see if it's a blog page
if(!empty($heroHeightBlog)){
$heroHeight = $heroHeightBlog; // If the blog options are set, use the blog options
} elseif(!empty($heroHeightTheme)){
$heroHeight = $heroHeightTheme; // if the blog options were not set, and the theme options are not set, use the default
} else {
$heroHeight = $heroHeightDefault; // use the default if no settings for the blog page
}
} elseif(!empty($heroHeightTheme)) {
$heroHeight = $heroHeightTheme; // If nothing else has been set, check the theme settings and use that
} else {
$heroHeight = $heroHeightDefault; // Otherwise, use the default.
}
这行得通,它可以正常工作,可以做我想做的事,但我不确定是否有更好、更有效的方法来做同样的事情——任何建议都将不胜感激!
解决方案
这要短得多,应该会产生相同的结果。它的可读性有点差...
if(trim($heroHeightTheme.$heroHeightBlog.$heroHeightPage) === '') $heroHeight = $heroHeightDefault;
elseif(!empty($heroHeightPage)) $heroHeight = $heroHeightPage;
elseif($isBlogPage) $heroHeight = !empty($heroHeightBlog) ? $heroHeightBlog : (!empty($heroHeightTheme) ? $heroHeightTheme : $heroHeightDefault);
else $heroHeight = !empty($heroHeightTheme) ? $heroHeightTheme : $heroHeightDefault;
更容易破译的是从逻辑中分离出条件
$no_settings = trim($heroHeightTheme.$heroHeightBlog.$heroHeightPage) === '' ;
$blogHeight = !empty($heroHeightBlog) ? $heroHeightBlog : (!empty($heroHeightTheme) ? $heroHeightTheme : $heroHeightDefault);
$themeHeight = !empty($heroHeightTheme) ? $heroHeightTheme : $heroHeightDefault;
if($no_settings) $heroHeight = $heroHeightDefault;
elseif(!empty($heroHeightPage)) $heroHeight = $heroHeightPage;
elseif($isBlogPage) $heroHeight = $blogHeight;
else $heroHeight = $themeHeight;
推荐阅读
- python - Django视图混乱,两个视图显示相同的内容
- github-api - Github API /用户标识符属性
- linux - 从“dd”恢复备份(softRAID HDD 可能有问题)
- ruby-on-rails - Sidekiq 在使用多个队列时忽略并发性
- pandas - 将具有远期日期的 CSV 解析为 Parquet
- javascript - Javascript构建动态多维数组
- html - 框转换不会响应 :hover
- arrays - React Native - 无法从 json 文件中的 Array 中访问 Array 中的数据
- javascript - 有条件地渲染属性对象值?
- android - Android的DisplayMetrics的heightpixels是否考虑了状态栏和软导航栏?