【问题标题】:Include php file that includes another php file?包含包含另一个 php 文件的 php 文件?
【发布时间】:2016-12-28 18:59:03
【问题描述】:

我的 PhP 文件包含一些长字符串常量,我正在尝试将它们分解出来。所以我创建了“my_string_constants.php”并在header.php 中使用了include。到目前为止一切正常。

现在另一个文件page.php 也需要字符串常量 header.php。下面的方案试图澄清这些依赖关系。

字符串常量现在似乎只在我的标题中可用,而不是在我的页面的其余部分。我试图通过将global ... 添加到string_constants.php 中的每个字符串常量来解决此问题。这解决了“未知变量”的错误,但我的字符串常量似乎仍然无法用于大多数页面内容。

什么是让它工作的正确方法?

更新

问题已解决。我应该使用define(myString 而不是$myString = ...。通过这样做,我只需要在header.php 中添加一个include,并且page.php 也可以使用常量。

谢谢一百万,你们太棒了。

【问题讨论】:

  • 如果page.php需要headerconstants,但header已经有constants... 那么page.php只需要header
  • 所以它们是字符串变量,而不是字符串常量。常量不能更改,也不需要声明为全局的。
  • @RubenGeert 正确,这不是一个真正的常数。使用真正的常量应该可以解决这个问题。
  • @RubenGeert,如果你能做到$someString = 'blah...'; $someString = 'something else';,那么它在任何语言中都不是常数。
  • 你做错了如果这是 WordPress。 page.php 是您主题的一部分吗?如果是这样,请在主题的 functions.php 文件中定义常量,然后就完成了。您不必包含标题、引导程序等 - 所有这些都由 WordPress 自动处理(我已将 WP 标签添加到您的问题中,因为这是一个非常重要的细节)。

标签: php wordpress include global-variables


【解决方案1】:

您想要做的一件事是将常量与变量区分开来。特别是如果其他开发人员最终从事此工作,他们会被您的术语弄糊涂。

对于常量,您不需要将它们声明为全局,它们的定义如下:

define('MY_CONSTANT', 'Value');

在我看来,常量文件充当了站点范围的配置文件,所以对我来说,在每个页面上都有它是有意义的,无论是否使用标题。我通常会为此创建一个引导文件。

bootstrap.php:

<?php
require_once(__DIR__ . '/constants.php');
require_once(__DIR__ . '/database.php');
require_once(__DIR__ . '/session.php');

你明白了,那么每个可访问的页面都需要包含这个引导文件,然后可能还有标题。

page.php:

<?php
require_once(__DIR__ . '/bootstrap/bootstrap.php');
require_once(__DIR__ . '/header.php');
?>
<h1>Page Title</h1>

在 header.php 中,因为它需要这些常量,所以您可以通过两种方式来处理这个问题,要么检查常量是否已定义(意味着首先包含引导程序),要么只使用另一个 require_once 来确保加载该文件。

if (!defined('MY_CONSTANT')) exit('Bootstrap failure');

require_once(__DIR__ . '/bootstrap/constants.php');

【讨论】:

  • 谢谢!我需要在这方面查阅手册几分钟。
  • 从评论中可以看出他也在使用 wordpress...如果这对已经的组织方式有任何影响。
  • @mister martin:是的,确实是 Wordpress。
  • 如果这实际上是一个 WordPress 问题,那么所有这些都是无关紧要的。 OP 需要在他的主题的 functions.php 文件中定义他的常量,并且不需要根据这个(和其他)答案执行包含等操作。
【解决方案2】:

当您尝试调试时,访问许多与包含有关的目录或“文件”确实会导致问题。作为一项规则,我尝试只在包含文件方面深入一层。 IE。创建一个名为 include 的文件夹并将所有内容都放在其中。如果有一个文件需要多个变量、函数等,然后将它们包含在所需的页面中,然后执行几个包含,如下所示:

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

关于拥有多个包含还有其他问题,例如,如果您有会话或 cookie,某些 LAMP 堆栈将要求您声明

session_start();

在每个页面的顶部,包括可能需要访问该会话或 cookie 的所有包含的 php 文件。

因此,要回答您的问题,我相信最简单的解决方案是重新组织您的网站或脚本。

【讨论】:

    【解决方案3】:

    在标题页上你写
    包括'header.php';

    在 header.php 中你写 包括'my_string_constants.php';

    所以在这种情况下 page.php 调用标题,而在标题中 my_string_constants 被调用...这是你的意思吗?

    【讨论】:

    • 这是一个答案吗?感觉不像一个,感觉像评论......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多