在较新的PHP版本中使用具有相同CSS选择器名称的PHP变量时出现问题

在较新的PHP版本中使用具有相同CSS选择器名称的PHP变量时出现问题,php,css,variables,css-selectors,Php,Css,Variables,Css Selectors,我在一个电子商务网站上工作,作为Treehouse.com在线PHP课程的一部分。我遇到一个问题,其中一个菜单项显示不正确,如下所示: 在论坛中寻找答案时,另一名学生得出结论,新版本的PHP存在问题,因为旧版本的PHP与此处看到的代码完全相同,没有显示问题: 第一个示例(有错误)运行的是PHP版本5.4.24,第二个示例运行的是5.2.17。我的本地主机服务器运行的是5.5.6,我的错误与第一个示例相同 然而,这个学生发现了一个新版本中的解决方法,即简单地更改任何与css选择器名称相同的php变

我在一个电子商务网站上工作,作为Treehouse.com在线PHP课程的一部分。我遇到一个问题,其中一个菜单项显示不正确,如下所示:

在论坛中寻找答案时,另一名学生得出结论,新版本的PHP存在问题,因为旧版本的PHP与此处看到的代码完全相同,没有显示问题:

第一个示例(有错误)运行的是PHP版本5.4.24,第二个示例运行的是5.2.17。我的本地主机服务器运行的是5.5.6,我的错误与第一个示例相同

然而,这个学生发现了一个新版本中的解决方法,即简单地更改任何与css选择器名称相同的php变量名称,至少当php写在标记的class属性中时是这样

我的问题是:这是这些较新版本的PHP中的一个bug,还是作为某种自动更正功能正常工作


编辑*这是Treehouse的论坛讨论:

只要看看HTML标记,你就会发现以下php注意事项:

<b>Notice</b>:  Undefined variable: section in <b>/home4/herkuhle/public_html/shirts4mike/inc/header.php</b> on line <b>17</b>
注意:未定义变量:第17行/home4/herkuhle/public_html/shirts4mike/inc/header.php中的部分

只需查看第17行附近的header.php文件。您的问题是此php通知的后续问题。看起来css类的定义不正确。

如果您在网站上查看css时发现错误,您会注意到您的类
.section.shirts
在style.css的第605行有以下css

padding-bottom: 42px;
background: #fff
有趣的是,如果你把这两个都去掉,它看起来和另一个网站完全一样

此外,该类中还有一个错误:

shirts <br /> <b>Notice</b>: Undefined variable: section in <b>/home4/herkuhle/public_html/shirts4mike/inc/header.php</b> on line <b>17</b><br /> 
shirts
注意:未定义变量:第17行/home4/herkuhle/public_html/shirts4mike/inc/header.php中的部分
我想看看第17行的header.php,看看是什么导致了这种情况。

更多信息 编辑:这个问题似乎与教育网站上提供的预定义项目有关。OP似乎不明白为什么完全相同的代码在某些服务器上失败,而似乎对其他服务器起作用。他们认为这与PHP版本有关。这很可能是由于服务器端禁止了警告。您只需添加以下内容:

error_reporting(E_ERROR | E_PARSE);
但是,;最好是正确地定义或测试变量(在本例中为$section),而不是简单地掩盖问题

使用名为$section的PHP变量和同名CSS选择器将起作用

…你能做点什么并不意味着你应该

无论如何,这本身不是CSS错误,但在这种情况下肯定没有帮助

请注意,代码中的错误/警告包含单词
部分

<li class="shirts <br /> <b>Notice</b>: Undefined variable: section ....."> 
由于错误/警告的位置,大多数浏览器会将您的类解释为包含引号中的任何单词(例如,
shirts
未定义的
部分
等),并将它们作为样式应用于CSS中。在您的页面版本中,由于错误的位置,您正在应用上述样式。另一个站点在类内的双引号内没有包含单词
部分
的错误/警告,因此它不应用该特定样式



PHP变量与同名的CSS选择器之间没有关联(阅读:PHP变量与当前、旧版本或我敢说,未来版本的PHP中的CSS选择器名称/变量之间没有冲突),除非在生成的HTML中出现错误。在本例中,您通过在类内的双引号之间创建错误来完成此操作

修复错误,您的样式将按预期应用。这里没有bug(除了代码中的第17行:)

在不查看代码的情况下,要修复错误/警告,请执行以下操作:

  • [不太可能]如果代码中某个地方缺少$section(如下面的
    $section
    ),可以在代码中适用的地方在
    部分前面添加$section

  • 在if语句中测试$section之前,可能要确保您已经定义了它

  • 如果您不知道$section之前是否已初始化,则可能在测试$section时使用isset

  • 总之,word部分在HTML中呈现为错误/警告,并解释为CSS类结构的一部分,如前所述

    为什么它适用于旧版本的PHP?

    如果您想知道它为什么在其他环境中工作,您是否考虑过它可能与PHP版本无关-可能在具有相同错误/警告的其他环境中,他们已将PHP配置为禁止显示错误和/或警告

    如果没有错误,单词
    部分
    将不会出现在您的类中;因此,没有风格问题

    从PHP手册:

    依赖未初始化变量的默认值是 在将一个文件包含到另一个使用 相同的变量名。这也是一个重大的安全风险 已打开寄存器\全局。如果发生以下情况,将发出E_通知级别错误: 使用未初始化的变量,但在 将元素追加到未初始化的数组。isset()语言 构造可用于检测变量是否已被删除 初始化


    有关您的特定错误的更多信息,请参阅此答案。

    我从未听说过,而且您的浏览器没有看到任何PHP变量。你能提供一些代码吗?我已经把你的问题读了4遍了,我仍然不知道你在问什么或者问题是什么。PHP不知道CSS,反之亦然。CSS和PHP之间没有相关性。一定还有别的事情发生。PHP是服务器端的。C
    .section.shirts {
        background: none repeat scroll 0 0 #FFFFFF;
        padding-bottom: 42px;
    }