PHP内部访问功能包括

时间:2014-08-21 19:26:20

标签: php

我在从include内部访问函数结果时遇到问题。我试图为此搜索一个答案,但是"包含在函数内部"支配该查询的格局。

以下代码有效(仅包括必要信息)。有两个主要链接,根据您的页面,相关链接将加下划线,另一个不会:

的index.php

if (basename($_SERVER['PHP_SELF']) == "index.php") {
    $nav1 = "navselected";
    $nav2 = "navnone";
} 
else {
    $nav1 = "navnone";
    $nav2 = "navselected";
}

include "/...../public_html/includes/header.php";

的header.php

<div class="nav1">
    <a href="index.php" class="navfont" id="<?php echo $nav1; ?>">Home</a>
</div>
<div class="nav2">
    <a href="marketmainstreet.php" class="navfont" id="<?php echo $nav2; ?>">Browse Market</a>
</div>

以下代码不起作用:

的functions.php

function underlineActivePage()
{
    if (basename($_SERVER['PHP_SELF']) == "index.php") {
        $nav1 = "navselected";
        $nav2 = "navnone";
    } else {
        $nav1 = "navnone";
        $nav2 = "navselected";
    }
}

的index.php

include "/...../public_html/includes/functions.php";
underlineActivePage();
include "/...../public_html/includes/header.php";

的header.php

<div class="nav1">
    <a href="index.php" class="navfont" id="<?php echo $nav1; ?>">Home</a>
</div>
<div class="nav2">
    <a href="marketmainstreet.php" class="navfont" id="<?php echo $nav2; ?>">Browse Market</a>
</div>

变量结果返回空。知道在页面的每个其他部分使用的函数都工作,只有在这个例子中,当变量需要在包含内部访问时才能访问。据我所知,并且迄今为止对我有用,就是通过包含这样的文件:

"/...../public_html/includes/header.php"

将代码添加到页面中,就像它是页面的一部分一样,而不是仅仅将代码的结果添加到页面中。我可以在header.php上以这种方式访问​​其他变量,而不是来自函数include的那些变量。我在布局中加入功能实际上很新(#34;懒惰&#34;重复代码,但我改变了这一点)感谢我们对此的帮助。

3 个答案:

答案 0 :(得分:1)

变量$ nav1和$ nav2在函数范围中设置,然后在全局范围中使用。为了完成这项工作,您可以将$ nav1和$ nav2声明为函数内的全局变量。

function underlineActivePage() {
  global $nav1, $nav2;

  if (basename($_SERVER['PHP_SELF']) == "index.php") {
    $nav1 = "navselected";
    $nav2 = "navnone";
  } 
  else {
    $nav1 = "navnone";
    $nav2 = "navselected";
  }

}

答案 1 :(得分:0)

这是一个非常简单的问题解决方案,(编辑:因为我假设你想要显示所选链接,即在导航栏中加下划线或粗体等)

定义一个php变量并将当前页面存储在其中:

$current_page_name = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);

在你的html中嵌入条件php并在你的CSS中编写一个选定的类:

<li><a <?php if($current_page_name=="index.php"){echo " class=\"selected\"";}?> href="index.php">Enter the value you want to display</a></li>
<li><a <?php if($current_page_name=="marketmainstreet.php"){echo " class=\"selected\"";}?> href="marketmainstreet.php">Enter another value</a></li>

答案 2 :(得分:0)

这是一个范围问题。但是,我建议从函数返回值,而不是进入&#34; global&#34;。尽可能避免全局变量(正如我在其他评论中提到的,特别是对于团队开发,全局变量是危险的)。

将functions.php更改为:

function underlineActivePage()
{
    if (basename($_SERVER['PHP_SELF']) == "index.php") {
        $nav[] = "navselected";
        $nav[] = "navnone";
    } else {
        $nav[] = "navnone";
        $nav[] = "navselected";
    }
    return $nav;
}

和index.php:

include "/...../public_html/includes/functions.php";
$nav = underlineActivePage();
include "/...../public_html/includes/header.php";

和header.php:

<div class="nav1">
<a href="index.php" class="navfont" id="<?php echo $nav[0]; ?>">Home</a>
</div>
<div class="nav2">
<a href="marketmainstreet.php" class="navfont" id="<?php echo $nav[1]; ?>">Browse Market</a>
</div>