【问题标题】:set_include_path Fatal error: Class 'MyClass' not found in fileset_include_path 致命错误:在文件中找不到类“MyClass”
【发布时间】:2012-12-31 12:21:54
【问题描述】:

我正在尝试使用 php 的 set_include_path 包含指向某个文件的自定义路径。代码如下:

文件.php

<?php
    $path = 'classes/';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    $obj = new MyClass();
    $obj->methodCall();
?>

这是我的根目录结构

www
|_webapp
       |_classes
               |_MyClass.php
       |_nbproject
       |_file.php

我在执行脚本时得到的只是这条错误消息:Fatal error: Class 'MyClass' not found in C:\wamp\www\webapp\file.php。我尝试使用require 包含该文件并且它可以工作,但我使用set_include_path 碰壁了。有人知道我能做些什么吗?

谢谢

【问题讨论】:

  • 只是说“当试图包含文件时,查看文件夹 A、B 和 C”并不会神奇地说“加载类 Foo,包含文件 Foo.php”。您需要使用类定义明确地include/require 文件,或者使用自动加载器。
  • 我同时使用了include/requirespl_autoload_register 用于相同的目的,但我从未遇到任何错误。那么为什么set_include_path 不能达到同样的目的呢?
  • 可能是因为您指定了类目录的相对路径而不是绝对路径?很难说。
  • 我想我误解了set_include_path 的行为。我的印象是它的行为类似于__autoload。所以我明确地包含了该文件并且它可以工作。这太尴尬了……我怎么错过了?!

标签: php set-include-path


【解决方案1】:
  1. 您正在向全局包含路径添加相对路径。这是你的本意吗?
  2. 您可能没有包含定义类MyClass 的文件。 set_include_path() 允许省略 require_once 语句中的路径,而不是省略语句本身。

我的印象是你想到的工具是class autoloader

【讨论】:

  • 你说得对,我的印象是set_include_path() 的行为类似于__autoloader。我包含了该文件并且它可以工作。天哪,我到底是怎么错过的?!...太尴尬了!
【解决方案2】:

您选择包含这种格式的包含方法 include 'path/filename.php'

【讨论】:

  • include 像我之前指出的那样工作,但set_include_path 没有......我一定错过了什么,但我不知道它是什么
猜你喜欢
  • 2013-03-12
  • 2014-10-03
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2015-01-20
  • 2014-12-21
  • 2013-12-10
相关资源
最近更新 更多