Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的PHP类自动加载程序行为-与PEAR相关_Php_Pear_Autoloader - Fatal编程技术网

奇怪的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');