为什么我的条件声明不起作用?

时间:2016-08-18 18:08:25

标签: php if-statement conditional

我正在尝试使用一个header.php来处理我的公共页面和使用条件语句的管理页面。当我使用include时,我可以使用这种技术,但是我学会了使用函数包含文件的不同技术,现​​在我的admin和public的条件语句不起作用。

所以这段代码位于我的header.php的顶部,包含在php标签中。

if (!isset($layout_context)) {
    $layout_context = "public"; 
    } 

然后在我的标题标签中,我有像这样的代码部分

<?php if($layout_context == "public") { ?>
  <header id="home">
<?php ; } elseif($layout_context == "admin") { ?>
  <header id="cms-pages">
<?php ; } ?>

然后在我的所有页面中,我将此代码放在顶部

<?php $layout_context = "public"; ?>

<?php $layout_context = "admin"; ?>

当我使用此代码时:

<?php include("includes/layouts/header.php"); ?>

我可以使那些有条件的公共和管理代码工作,但是当我尝试使用这种技术来包含我的header.php

<?php include_layout_template('header-admin.php'); ?>  

函数存在于includes文件夹中的functions.php中。

function include_layout_template($template="") {
include(SITE_ROOT.DS.'includes'.DS.'layouts'.DS.$template);
}

我无法使用条件代码。有谁知道为什么会这样?

谢谢:)

2 个答案:

答案 0 :(得分:0)

不要使用==进行字符串比较。始终使用strcmp()进行字符串比较。
更改

if($layout_context == "public")

if (strcmp($layout_context, "public") == 0) 
{
 //string is equal
}

答案 1 :(得分:0)

您声明在标准包含include("includes/layouts/header.php");之后,您可以使用$layout_context,但是在使用函数include_layout_template('header-admin.php');进行包含后,您不是。{/ p>

这是变量范围的问题。

您的$layout_context是在header.php文件中定义的,在任何函数声明之外。

在这样的文件中,如果将其包含在全局级别,那么其中的变量将成为全局变量。

但是,如果从函数中包含它,那么这些变量将成为该函数中的变量。

因此,当您调用include_layout_template()时,会创建变量,但仅限于include_layout_template()范围内。一旦函数返回,那些变量就不再可用了。

这里快速而肮脏的解决方案是在header.php文件中将它们定义为全局。因此,将global $layout_context;添加到此文件中代码的顶部,并将其添加到其中声明的任何其他变量。

这可能会帮助你完成现在最小的工作。

然而,全局变量是一种非常生硬的工具,并且由于多种原因通常被认为是非常差的实践。重写配置变量会更好,以便您可以从函数调用或对象中引用它们。通过这种方式,您可以从任何地方包含它们,任何它们仍然可以以相同的方式访问。

相关问题