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

时间:2014-02-04 19:57:23

标签: php class directory

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

  • 插件

Plugins文件夹包含两个文件:Sample.php和Plugins.php。

Sample.php只是一个带有一个扩展Plugins类的函数的类。 Plugins类尝试创建位于Classes文件夹中的基类的新实例。

插件/ 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.php:

class Plugins {

    public $name;

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

类别/ Base.php:

class Base {

    public $name = "Will";

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

}

Index.php包含Plugins文件夹中的所有内容,并且应该执行OnCall()。它提供以下错误消息:

  

警告:include(../ Classes / Base.php)[function.include]:失败   open stream:没有这样的文件或目录   /Applications/XAMPP/xamppfiles/htdocs/Plugins/Plugins/Plugins.php on   第6行

     

警告:include()[function.include]:打开失败   '../Classes/Base.php'包含在内   (include_path中= ':/应用/ XAMPP / xamppfiles / LIB / PHP:/应用/ XAMPP / xamppfiles / LIB / PHP /梨')   在/Applications/XAMPP/xamppfiles/htdocs/Plugins/Plugins/Plugins.php   在第6行

     

致命错误:未找到“基础”类   /Applications/XAMPP/xamppfiles/htdocs/Plugins/Plugins/Plugins.php on   第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文件夹之外的类中使用Base类。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您需要在Sample类中调用父级的构造函数。

class Sample extends Plugins {

    public $eggs;
    public $pounds;

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

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

答案 1 :(得分:0)

您可能希望利用__autoloadhttp://ca1.php.net/manual/en/function.autoload.php

使用此功能可以轻松加载课程,无论他们在哪个目录中。

简单示例:

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

这意味着您可以从插件类中删除include语句,只需保持声明$base = new Base();__autoload将被神奇地调用并加载正确的文件。< / p>