写得好的代码与写得不好的代码不同,这是一个不同的观点和品味问题。有各种style guides 如果你有兴趣看例子。
就个人而言,在上面的示例中,我会更改两件事:缩进和大括号。
我发现模板中的php打开/关闭标记和html标记很难阅读,因为它们没有与缩进的其余部分对齐:
<?php
if ( ! is_user_logged_in() ) {
$args = array(
\'redirect\' => site_url( \'/index.php/portal \' ),
\'form_id\' => \'loginform-custom\',
\'label_username\' => __( \'Username\' ),
\'label_password\' => __( \'Password\' ),
\'label_remember\' => __( \'Remember Me\' ),
\'label_log_in\' => __( \'Log in\' ),
\'remember\' => true
);
wp_login_form( $args );
?>
<p>The portal is for registered users only.</p>
<?php
} else {
wp_loginout( index.php/portal() );
?>
<p>We recommend logging out after each session.</p>
<p><a href="/index.php/portal">Continue to portal</a></p>
<?php } ?>
这使得每个if/else块中的内容更加清晰。按照同样的思路,我将用冒号和endif标记替换if/else花括号,并将任何php打开/关闭标记移动到与php功能相同的行上。
<?php if ( ! is_user_logged_in() ) : ?>
<?php
$args = array(
\'redirect\' => site_url( \'/index.php/portal \' ),
\'form_id\' => \'loginform-custom\',
\'label_username\' => __( \'Username\' ),
\'label_password\' => __( \'Password\' ),
\'label_remember\' => __( \'Remember Me\' ),
\'label_log_in\' => __( \'Log in\' ),
\'remember\' => true
);
wp_login_form( $args ); ?>
<p>The portal is for registered users only.</p>
<?php else: ?>
<?php wp_loginout( index.php/portal() ); ?>
<p>We recommend logging out after each session.</p>
<p><a href="/index.php/portal">Continue to portal</a></p>
<?php endif; ?>
这样可以更容易地看到哪些if/else/end块彼此相关,也可以问清楚什么是php功能,什么是HTML。
多行php块对我来说有点代码味道,表示应该放在其他地方的函数或类中并在模板中的单行中引用的逻辑:
<?php
# some other file, maybe have a modules/ or helpers/ directory in your plugin
# or theme that contains functions and classes that are used for functionality.
function 5south_custom_login_form() {
$args = array(
\'redirect\' => site_url( \'/index.php/portal \' ),
\'form_id\' => \'loginform-custom\',
\'label_username\' => __( \'Username\' ),
\'label_password\' => __( \'Password\' ),
\'label_remember\' => __( \'Remember Me\' ),
\'label_log_in\' => __( \'Log in\' ),
\'remember\' => true
);
wp_login_form( $args );
}
# your template file
<?php if ( ! is_user_logged_in() ) : ?>
<?php 5south_custom_login_form() ?>
<p>The portal is for registered users only.</p>
<?php else: ?>
<?php wp_loginout( index.php/portal() ); ?>
<p>We recommend logging out after each session.</p>
<p><a href="/index.php/portal">Continue to portal</a></p>
<?php endif; ?>
一般来说,我发现如果一个php中有5-10行以上
if
块,通常值得将该功能分解为单独的模板,并将其包含在
if
或
else
陈述这使得模板逻辑更容易遵循。
如果您发现自己在模板文件中以复杂的方式嵌套If/else语句,那么可能是时候重新评估模板文件的加载方式,并创建一个或多个函数来为每个特定情况选择精确的模板或部分模板了。
有些人会看到我在上面所做的事情,并在他们的嘴里吐了一点。