【问题标题】:Predefined PHP constants not working预定义的 PHP 常量不起作用
【发布时间】:2015-11-06 17:22:11
【问题描述】:

我正在学习使用所需文件创建实例化文件的教程。这是项目树:

这是我的instantiate.php:

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT') ? null : define('SITE_ROOT', DS.'var'.DS.'www'.DS.'html'.DS.'photo_gallery');

defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'includes');

//load config file first
require_once(LIB_PATH.DS."config.php");

//load basic functions next so that everything after can use them
require_once(LIB_PATH.DS."functions.php");

//load core objects
require_once(LIB_PATH.DS."session.php");
require_once(LIB_PATH.DS."database.php");

//load database-related classes
require_once(LIB_PATH.DS."user.php");

login.php,我要求初始化文件为:

require_once("../../includes/initialize.php");

但是按照教程,我可以在文件中使用LIB_PATH,例如需要config.phpdatabase.php 和需要database.phpuser.php

目前,它们需要文件,没有路径,因为它们位于同一个包含文件中。但是,如果我完全理解了目录分隔符、站点根目录和 lib_path 的工作方式,那是为了改进它,不需要在任何地方添加不同的路径,只需通过常量添加路径即可。好吧,它不起作用!它显示:(在顶部,您会在公共文件夹的 index.php 中看到 dirname(__FILE__) 的回声。

我检查了phpinfo 以查看根路径...一切似乎都很好,但如果我尝试使用此LIB_PATH.DS 则无法正常工作。

我读到的最后一件事是 ibay 的一些限制,但我试图做更多的研究,但我什至找不到这个“ibay”是什么。

有谁知道为什么会这样?谢谢!

【问题讨论】:

  • 你说那里的代码是instantiate.php,但貌似真名是initialize.php,是你搞错了,还是有别的文件?

标签: php oop initialization constants


【解决方案1】:

您收到通知是因为包含文件的路径出错:您没有在脚本中加载initialize.php 文件。如果您真的想要加载该文件(并且您真的想要它,因为您的代码不能没有它),您应该使用require 而不是include。这样,如果文件不存在,您将收到一条错误消息并且您的代码将停止(将停止视为您真正想要的东西,就好像您没有路径,您的程序将惨遭失败)。

更重要的是,您应该使用require_once,这样您就不会使正在构建的应用程序过载:如果文件被加载过一次,它将不会再次被加载。

您可以按照以下问题的建议检查文件是否已加载:Check if a file was included or loaded

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多