类扩展在include_once()中不起作用

时间:2017-05-02 20:51:33

标签: php class

我的文件结构是这样的:

> 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

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

您收到错误是因为您的文件无法读取其他类文件。

假设这是文件结构:

encryptorBuilder.setSecureRandom(CryptoServicesRegistrar.getSecureRandom());

让我们说我希望- root - main.php - ClassA.php - ClassB.php - ClassC.php 扩展ClassCClassB以扩展ClassB

1。手动加载

main.php

ClassA

ClassA.php

<?php

require __DIR__ . '/ClassC.php';
new ClassC();

ClassB.php

<?php

class ClassA{

    public function __construct(){
        echo 'Hello World.';
    }

}

ClassC.php

<?php

require __DIR__ . '/ClassA.php';

class ClassB extends ClassA{

}

请注意<?php require __DIR__ . '/ClassB.php'; class ClassC extends ClassB{ } require中的ClassBClassC的结果将是:

main.php

2。自动加载(没有名称空间)

您可以通过创建文件(示例Hello World. )创建自己的autoloader并将其包含在您的主文件中。因此文件结构将变为:

autoload.php

main.php

- root
    - autoload.php
    - main.php
    - ClassA.php
    - ClassB.php
    - ClassC.php

ClassA.php

<?php

require __DIR__ . '/autoload.php';
new ClassC();

注意<?php class ClassA{ public function __construct(){ echo 'Hello World'; } } 与其他示例相同。

ClassB.php

ClassA

ClassC.php

<?php

class ClassB extends ClassA{

}

注意<?php class ClassC extends ClassB{ } ClassB不再在文件顶部显示ClassC

autoload.php

require

autoload.php的细分

首先注册您的自定义自动加载器,该自动加载器将以可调用的参数:

<?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会导致错误,因此您可以轻松查看路径是否不正确。