为什么不能在其中一种方法包含的文件中调用ServiceProvider文件中定义的函数

时间:2019-12-03 14:52:04

标签: php laravel scope require

在Vanilla PHP中,如果我具有以下条件:

master.php
<?php

function contextFunction()
{
    test('Master: context');
    $context = 'contextFunction';
    require 'included.php';
}

class ObjectContext
{
    public function __construct()
    { 
        test('Master: ObjectConstructor');
        $context = 'ObjectConstructor';
        require 'included.php';
    }

    public function boot() {
        test('Master: ObjectFunction');
        $context = 'ObjectFunction';
        require 'included.php';
    }
}

test('Master: main');
contextFunction();
$object = new ObjectContext();
$object->boot();

function test($s)
{
    echo "$s\n";
}
included.php
<?php

test('Included: ' . $context);

然后运行master.php:可以从所有上下文和打印的所有字符串访问测试功能。但是,如果我在服务提供程序文件中做类似的事情:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class MyTestProvider extends ServiceProvider
{

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        testfunc();
        require 'testinclude.php';
        die();
    }

    public function testmethod() {
        echo 'method';
    }

}

function testfunc()
{
    echo 'func';
}

testfunc()可从引导方法中访问,但不能从'testinclude.php'中访问。

为什么?

我当然可以使用$this->testmethod(),但是我希望简洁起见,因为在我的实际项目中,所包含的文件将分别调用同一函数数十次。

0 个答案:

没有答案