2016-12-28 184 views
1

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

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

enter image description here

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

什么是正确的方式来得到这个工作?

UPDATE

问题一直解决。我应该使用define(myString而不是$myString = ...。通过这样做,我需要header.php中的一个include,常数也可以用于page.php

非常感谢,你们都很棒。

+0

你的设置还不清楚。如果您必须以明确的方式进行操作,您可以在最上面的文件中包含或要求一次文件。 'page.php'和'header.php'不能成为请求中调用的最顶层文件。如果你真的需要在两个文件中都包含一个文件,那么使用''nclude_once()'或'require_once()'。 – arkascha

+2

如果'page.php'需要'header'和'constants',但'header'已经有'constants' ...然后'page.php'只需要'header' –

+0

@mistermartin我试过了,但是它触发了一个错误:'注意:未定义的变量:re_afornone_ov in C:\ xampp \ htdocs \ t \ wp-content \ themes \ c \ home_page.php'字符串常量可用于'header.php'而不是'homepage.php',但它们都需要它们。 – RubenGeert

回答

3

你想要做的一件事是区分常量和变量。特别是如果其他开发人员最终在这方面工作,他们会被您的术语混淆。

常量,你并不需要他们宣告全球和他们像这样定义:

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'); 
+0

谢谢!我需要在几分钟内查阅这本手册。 – RubenGeert

+0

从评论中可以看出他也在使用wordpress ......如果这对于已经组织好的东西有什么影响。 –

+0

@mister martin:是的,这确实是Wordpress。 – RubenGeert

0

对于包含很多关于包含的深度目录或“文件”,在尝试调试时可能会在以后真正导致问题。作为一项规则,我试图只考虑包括文件在内的一个层次。即创建一个名为includes的文件夹,并将所有内容放在那里如果有需要多个变量,函数等文件,然后将它们包括在这一点上需要的页面做一些包括像这样:

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

也有关于其他问题有多个包括,就像如果你有会话或饼干一些LAMP堆栈会要求你在每一个页面的顶部,包括可能需要访问会话或饼干都包含PHP文件声明

session_start(); 

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

0

在标题页上ontop u写
include'header.php';

和在header.php中你写的 include'my_string_constants.php';

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

+0

这是一个答案?它不觉得像一个,感觉就像一个评论.... –