奇怪的PHP类自动加载程序行为-与PEAR相关
我有一个奇怪的问题,我想不出来。我正在使用奇怪的PHP类自动加载程序行为-与PEAR相关,php,pear,autoloader,Php,Pear,Autoloader,我有一个奇怪的问题,我想不出来。我正在使用PEAR从PHP页面发送邮件。Send\u-Mail类正在工作(使用SMTP发送邮件),但我收到了与我的自动加载器相关的奇怪警告 Warning: include(classes/LOGIN.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in C:\xampp\h
PEAR
从PHP页面发送邮件。Send\u-Mail
类正在工作(使用SMTP发送邮件),但我收到了与我的自动加载器相关的奇怪警告
Warning: include(classes/LOGIN.php)
[<a href='function.include'>function.include</a>]:
failed to open stream: No such file or directory in
C:\xampp\htdocs\mysite\initialize.php on line 46`
在我的header.php
文件中,我正在为该站点加载几个php类:
// autoload PHP classes for site
autoloader('Navigation');
autoloader('Validation');
该错误引用了我没有的登录类。但是我搜索了整个站点文件夹,包括php
,在C:\xampp\php\PEAR\Net\SMTP.php
中找到了这两行:
/* These standard authentication methods are always available. */
$this->setAuthMethod('LOGIN', array($this, '_authLogin'), false);
$this->setAuthMethod('PLAIN', array($this, '_authPlain'), false);
当我注释掉包含LOGIN
的行时,我会收到相同的警告,但对于PLAIN
,当我注释掉这两行时,警告会消失(但SMTP身份验证失败)
为什么会这样
更新
这是我的新自动加载器
:
function autoloader($class) {
if (file_exists('classes' . $class . '.php')) {
include 'classes' . $class . '.php';
}
}
当我回显“类”时$阶级。php'
,但是,我得到了以下信息:
classes/.php
然后,如果我将其更改为不使用文件,\u exists
它可以工作,但是echo
仍然显示classes/.php
我不确定您使用的是哪个版本的Net\u SMTP,但是setAuthMethod
函数将各种不同类型的结构作为参数-方法名称、类、对象、可调用项,等等
由于PHP是动态类型化的,SMTP.PHP
在Net_SMTP中必须对该对象进行大量检查,以确定它是什么类型的对象。作为其中的一部分,它尝试确定“LOGIN”是否是调用自动加载程序的类名
解决方案是在尝试包含之前,在自动加载器中执行一个文件。\u存在,但当然,如果您的包含路径在任何方面都很复杂,那么您基本上是在为自己设置麻烦。任何处理过编写全面自动加载器的人都知道你的痛苦。我又回到了一个简单的自动加载器,事情似乎进展顺利:
function autoloader($class) {
include 'classes/' . $class . '.php';
}
spl_autoload_register('autoloader');
谢谢你的建议。谢谢你的评论。我已经在这方面做了一些修改,当然我已经遇到了你所说的那些令人头痛的问题。。。该死;-)由于某种原因,使用一个简单的自动加载器,我得到了意想不到的结果。如果你能看一下,我已经更新了我的问题。
function autoloader($class) {
include 'classes/' . $class . '.php';
}
spl_autoload_register('autoloader');