Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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中使用当前目录之外的类_Php_Class_Directory - Fatal编程技术网

在PHP中使用当前目录之外的类

在PHP中使用当前目录之外的类,php,class,directory,Php,Class,Directory,我的目录中有两个文件夹: 插件 班级 Plugins文件夹包含两个文件:Sample.php和Plugins.php php只是一个具有扩展插件类的函数的类。插件类尝试创建基类的新实例,该实例位于Classes文件夹中 Plugins/Sample.php: class Sample extends Plugins { public $eggs; public $pounds; public function __construct() { $this

我的目录中有两个文件夹:

插件 班级 Plugins文件夹包含两个文件:Sample.php和Plugins.php

php只是一个具有扩展插件类的函数的类。插件类尝试创建基类的新实例,该实例位于Classes文件夹中

Plugins/Sample.php:

class Sample extends Plugins {

    public $eggs;
    public $pounds;

    public function __construct() {
        $this->eggs   = "100";
        $this->pounds = "10";
    }

    public function OnCall() {
        echo "{$this->eggs} eggs cost {$this->pounds} pounds, {$this->name}!";
    }
}
Plugins/Plugins.php:

class Plugins {

    public $name;

    public function __construct() {
        include '../Classes/Base.php';
        $base = new Base();
        $this->name = $base->name;
    }
}
Classes/Base.php:

class Base {

    public $name = "Will";

    public function Say() {
        echo $this->name;
    }

}
php包含Plugins文件夹中的所有内容,应该执行OnCall。它将给出以下错误消息:

警告:include../Classes/Base.php[函数.include]:未能 open stream:中没有此类文件或目录 /上的Applications/XAMPP/xamppfiles/htdocs/Plugins/Plugins/Plugins.php 第6行

警告:包括[功能.包括]:打开失败 “../Classes/Base.php”以供包含 include_path='。:/Applications/XAMPP/xamppfiles/lib/php:/Applications/XAMPP/xamppfiles/lib/php/pear' 在/Applications/XAMPP/xamppfiles/htdocs/Plugins/Plugins/Plugins.php中 第6行

致命错误:在中找不到类“Base” /上的Applications/XAMPP/xamppfiles/htdocs/Plugins/Plugins/Plugins.php 第7行

Index.php如果有帮助:

foreach(glob('Plugins/*.php') as $file) {
    require_once $file;
    $class = basename($file, '.php');
    if(class_exists($class)) {
        $obj = new $class;
        $obj->OnCall();
    }
}

我需要做的是在classes文件夹之外的类中使用基类。我该怎么做呢?

您需要在示例类中调用父类的构造函数


您可能想利用自动加载

使用此函数将允许您轻松加载类,无论它们位于哪个目录中

简单的例子:

function __autoload($classname) {
  $path = "path/to/Classes/$classname.php";
  if(file_exists($path)) {
    require_once $path;
  }
}

这意味着您可以从Plugins类中删除include语句,只需保留声明$base=newbase;并且uu autoload将被神奇地调用并加载正确的文件。

index.php的代码在哪里?如果这是显示错误并加载类的脚本,我们需要查看它。@helion3 Oops。现在将其与错误消息一起添加。尝试使用Classes/Base.php的绝对路径而不是相对路径。我已经修复了include错误,但它仍然不会显示name变量。我通过添加require_once“Classes/Base.php”来修复它$全局['base']=新基;在Plugins.php中将$this->base更改为$GLOBALS['base'],并将$this->name更改为$this->base->name。它现在产出100个鸡蛋,价值10英镑,100岁!100岁的老人将不会花10英镑买100个鸡蛋!。谢谢,但我似乎收到了相同的错误。从PHP8开始,自动加载被贬值了。
function __autoload($classname) {
  $path = "path/to/Classes/$classname.php";
  if(file_exists($path)) {
    require_once $path;
  }
}