在PHP中定义变量有困难吗?

在PHP中定义变量有困难吗?,php,variables,Php,Variables,好的,内容页使用以下内容: $tab = "Friends"; $title = "User Profile"; include '(the header file, with nav)'; 标题页的代码如下: if ($tab == "Friends") { echo '<li id="current">'; } else { echo '<li>'; } if($tab==“朋友”){ echo'; }否则{ 回音“”; } 问题是,if$tab==F

好的,内容页使用以下内容:

$tab = "Friends";
$title = "User Profile"; 
include '(the header file, with nav)';
标题页的代码如下:

if ($tab == "Friends") { 
echo '<li id="current">'; 
} else { 
echo '<li>'; 
}
if($tab==“朋友”){
echo'
  • ; }否则{ 回音“
  • ”; }
  • 问题是,
    if$tab==Friends
    条件从未激活,并且没有其他变量从内容页带到标题页

    有人知道我做错了什么吗

    更新: 好的,当我使用
    。/scripts/filename.php
    时,这个问题似乎消失了,并且只在我使用完整的URL时出现


    你知道为什么吗?

    你发布的代码应该可以工作。你是怎么把那个文件包括进去的?这会发生在函数内部吗?然后需要使用
    global
    语句才能使其工作。例如:

    文件1:

    function my_include($file) {
        global $tab; // <-- add this
        include '/some/path/' . $file;
    }
    
    $tab = 'Friends';
    my_inlcude('file_2.php');
    

    您发布的代码应该可以工作。你是怎么把那个文件包括进去的?这会发生在函数内部吗?然后需要使用
    global
    语句才能使其工作。例如:

    文件1:

    function my_include($file) {
        global $tab; // <-- add this
        include '/some/path/' . $file;
    }
    
    $tab = 'Friends';
    my_inlcude('file_2.php');
    
  • 现在您了解了为什么发布一些存根和skeches而不是真实代码是一种糟糕的做法

  • 试着想想,你的问题不是火箭科学。Include类似于复制粘贴代码而不是Include操作符。在浏览器中加载包含的URL,复制生成的代码并将其粘贴到第一个文件中,然后查看

  • 现在您了解了为什么发布一些存根和skeches而不是真实代码是一种糟糕的做法

  • 试着想想,你的问题不是火箭科学。Include类似于复制粘贴代码而不是Include操作符。在浏览器中加载包含的URL,复制生成的代码并将其粘贴到第一个文件中,然后查看


  • 当您
    包含一个完整的URL时,您没有包含PHP脚本,而是包含它生成的HTML。就像你去了
    http://wherever.your.url.goes
    ,但这是由服务器而不是浏览器完成的。脚本在一个完全独立的进程中运行,这是由服务器向自身发出的一个单独的请求引起的,并且
    $variable
    在两者之间不共享


    短版本:当您包含
    http://wherever.your.url.goes
    $tab
    将始终为空。如果包含实际的文件名,变量将被共享。

    包含完整的URL时,您不包括PHP脚本,而是包括它生成的HTML。就像你去了
    http://wherever.your.url.goes
    ,但这是由服务器而不是浏览器完成的。脚本在一个完全独立的进程中运行,这是由服务器向自身发出的一个单独的请求引起的,并且
    $variable
    在两者之间不共享


    短版本:当您包含
    http://wherever.your.url.goes
    $tab
    将始终为空。如果您包含实际的文件名,变量将被共享。

    非常确定在您的include中的某个地方您正在重新定义
    $tab
    。当您执行var\u dump($tab)时会发生什么;在头文件中?$tab为空,我尝试了。我没有重新定义它,当我更改include url时,问题已经解决了。非常确定在你的include中的某个地方你正在重新定义
    $tab
    。当你做var_dump($tab)时会发生什么;在头文件中?$tab为空,我尝试了。我没有重新定义它,当我更改包含url时,问题已经解决了。是的,这会解决它,我决定改为使用相对url,所以它是可移植的。谢谢如果时间允许,我会把它标记为最好的。@Jake然而,使用绝对路径总是首选。但是,当然是绝对的文件系统路径,而不是虚拟的URL。我是否忽略了什么?为什么会有一个函数?@Col.Shrapnel:一个函数可以解释为什么OP的代码不起作用。因为,如前所述,OP的代码应该可以正常工作。包含的文件继承包含所在行的范围。所以,我的猜测是OP使用的实际代码中有一个函数调用,而不仅仅是一个普通的包含在变量赋值的相同范围内。我懂了。很棒的编程技术。是的,这会解决它,我决定用相对URL代替这个网站,所以它是可移植的。谢谢如果时间允许,我会把它标记为最好的。@Jake然而,使用绝对路径总是首选。但是,当然是绝对的文件系统路径,而不是虚拟的URL。我是否忽略了什么?为什么会有一个函数?@Col.Shrapnel:一个函数可以解释为什么OP的代码不起作用。因为,如前所述,OP的代码应该可以正常工作。包含的文件继承包含所在行的范围。所以,我的猜测是OP使用的实际代码中有一个函数调用,而不仅仅是一个普通的包含在变量赋值的相同范围内。我懂了。很棒的编程技巧。令人惊讶的是,我知道include是如何工作的,问题是我没有意识到$tab必须设置为global。谢谢你不必要的鲁莽回答。令人惊讶的是,我知道include是如何工作的,问题是我没有意识到$tab必须设置为global。不过谢谢你不必要的鲁莽回答。