我的目录中有两个文件夹:
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类。我怎么能这样做?
答案 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)
您可能希望利用__autoload
(http://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>