我的文件结构是这样的:
> main.php
- file1.php
- file2.php
- file3.php
我在file1.php
内有一个班级:
class ClassFileOne extends OtherClassInSameFile
{
}
我希望在file2.php
内使用
class ClassFileTwo extends ClassFileOne
{
}
但是当我这样做时,我得到错误: Fatal error: Class 'ClassFileOne' not found in
。
有没有办法解决这个问题?
答案 0 :(得分:1)
您收到错误是因为您的文件无法读取其他类文件。
假设这是文件结构:
encryptorBuilder.setSecureRandom(CryptoServicesRegistrar.getSecureRandom());
让我们说我希望- root
- main.php
- ClassA.php
- ClassB.php
- ClassC.php
扩展ClassC
和ClassB
以扩展ClassB
。
ClassA
<?php
require __DIR__ . '/ClassC.php';
new ClassC();
<?php
class ClassA{
public function __construct(){
echo 'Hello World.';
}
}
<?php
require __DIR__ . '/ClassA.php';
class ClassB extends ClassA{
}
请注意<?php
require __DIR__ . '/ClassB.php';
class ClassC extends ClassB{
}
和require
中的ClassB
。 ClassC
的结果将是:
main.php
您可以通过创建文件(示例Hello World.
)创建自己的autoloader并将其包含在您的主文件中。因此文件结构将变为:
autoload.php
- root
- autoload.php
- main.php
- ClassA.php
- ClassB.php
- ClassC.php
<?php
require __DIR__ . '/autoload.php';
new ClassC();
注意:<?php
class ClassA{
public function __construct(){
echo 'Hello World';
}
}
与其他示例相同。
ClassA
<?php
class ClassB extends ClassA{
}
注意:<?php
class ClassC extends ClassB{
}
和ClassB
不再在文件顶部显示ClassC
。
require
首先注册您的自定义自动加载器,该自动加载器将以可调用的参数:
<?php
spl_autoload_register(function($class){
$path = __DIR__ . '/' . $class . '.php';
if(file_exists($path))
require $path;
});
此时,如果您在自动加载器中spl_autoload_register(function($class){
});
,您将获得:
var_dump($class)
因此,使用类的名称,您需要找到要加载的文件:
ClassC
在加载文件之前,您需要确保该文件存在。
$path = __DIR__ . '/' . $class . '.php';
如果该文件不存在,则只会转到下一个自动加载器。
答案 1 :(得分:0)
在file2.php的顶部,您需要const waitForEvent = (api) => {
return new Promise(resolve) => {
api.on('eventOne', () => {
resolve('eventOne');
})
api.on('eventTwo', () => {
resolve('eventTwo');
})
api.on('eventThree', () => {
resolve('eventThree');
})
api.load();
}
}
如果找不到file1,使用require而不是include会导致错误,因此您可以轻松查看路径是否不正确。