【问题标题】:Strange PHP autoload issue奇怪的 PHP 自动加载问题
【发布时间】:2012-03-21 07:37:40
【问题描述】:

我有一些类似的方法

public function getTime() {
    $date = new DateTime();
    $date->setTimezone(new DateTimeZone('Europe/Paris'));
    return $date->format('Y-m-d H:i:s');
}

从具有自动加载功能的文件内部调用此方法

function __autoload($class_name) {
    global $path;
    if (file_exists($path['classes'] . ds  . 'class.'. $class_name . '.php')) {
        require_once($path['classes'] . ds . 'class.'. $class_name . '.php');
    } else {
        die($path['classes'] . ds . 'class.'.$class_name . '.php');
    }
}

如您所知,DateTime 是 PHP 的内置类。问题是,脚本试图从类文件夹中加载它。此方法适用于我的本地服务器,但远程网络服务器因以下返回而死。

<path to classes folder>/class.DateTime.php

在这种情况下我该怎么办?

【问题讨论】:

  • 你的远程服务器有 PHP 5.2 吗?
  • 还建议使用spl_autoload_register 代替神奇的__autoload 方法。
  • global $path 让我很难过。
  • 尝试打印更多调试信息。例如文件夹中有哪些文件。你确定类<path to classes folder>/class.DateTime.php 确实存在于远程服务器上?
  • @fuzzyDunlop 将 __autoload() 更改为 spl_autoload_register 。整个脚本停止工作

标签: php class function datetime autoload


【解决方案1】:

您的方法 getTime() 可能正在尝试解析当前 namespace 中的 DateTime 类。

如果你想使用内置的DateTime 类,你必须refer to the global namespace

来自:

public function getTime() {
    $date = new DateTime();
    $date->setTimezone(new DateTimeZone('Europe/Paris'));
    return $date->format('Y-m-d H:i:s');
}

至此:

public function getTime() {
    $date = new \DateTime();
    $date->setTimezone(new \DateTimeZone('Europe/Paris'));
    return $date->format('Y-m-d H:i:s');
}

【讨论】:

  • 像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
相关资源
最近更新 更多