PHP访问函数的结果从内部包含


PHP accessing function result from inside 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>

下面的代码不起作用:

显然也
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>

变量结果返回空。要知道,在页面的其他部分使用的函数都可以工作,只有在这个实例中,当变量需要在include内部访问时,它才不能工作。根据我的理解,并且到目前为止对我有用的是,通过包含这样的文件:

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

将代码添加到页面中,就像它是页面的一部分一样,而不是将代码的结果添加到页面中。我可以通过这种方式访问header。php中的其他变量,而不是来自include函数的变量。我实际上是很新的功能在我的布局("懒惰"重复代码,但我正在改变)感谢我们的帮助与此。

变量$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";
  }
}

这是一个非常简单的解决方案为您的问题,(编辑:因为我假设你想显示链接作为选择即下划线或粗体在导航栏或其他东西)

定义一个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>

这是一个范围问题。但是,我建议从函数返回值,而不是"全局"。只要有可能,避免使用全局变量(正如我在其他评论中提到的,特别是对于团队开发,全局变量是危险的)。

将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>