在PHP中使用当前目录之外的类
我的目录中有两个文件夹: 插件 班级 Plugins文件夹包含两个文件:Sample.php和Plugins.php php只是一个具有扩展插件类的函数的类。插件类尝试创建基类的新实例,该实例位于Classes文件夹中 Plugins/Sample.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
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;
}
}