在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()
,但是我希望简洁起见,因为在我的实际项目中,所包含的文件将分别调用同一函数数十次。