brad-jones/import

此包已被废弃且不再维护。未建议替代包。

以某种方式包含PHP文件,使其与包含它的地方隔离开。

v0.0.4 2016-02-25 03:12 UTC

This package is not auto-updated.

Last update: 2021-05-01 00:26:39 UTC


README

Build Status Latest Stable Version Total Downloads License HHVM Tested

以某种方式包含PHP文件,使其与包含它的地方隔离开。此包提供了一种新的伪语言构造,您将熟悉如何使用includerequire,那么我们现在添加了import

感谢:https://gist.github.com/Eraknelo/6795b983825fc6a720ef

安装

composer require brad-jones/import

获取访问import函数的方法

有多种方法可以访问import函数。

  • 如果使用PHP 5.6或更高版本,您可以导入import函数。

    use function Brads\import;
    import(...args...);
  • 或者您可以在Importer类上调用静态方法。

    use Brads\Importer;
    Importer::import(...args...);
  • 或者您可以创建一个Importer的实例。

    use Brads\Importer;
    $importer = new Importer;
    $importer->newImport(...args...);
  • 或者如果您想全局安装import函数。

    Brads\Importer::globalise();
    import(...args...);

依赖注入

导入器对Di & Test友好,它实现了ImporterInterface。

一个简单的php-di示例

use Brads\Importer;
use Brads\ImporterInterface;

$builder = new DI\ContainerBuilder();
$builder->addDefinitions
([
    ImporterInterface::class => DI\object(Importer::class)
]);
$container = $builder->build();

$container->get(ImporterInterface::class)->newImport(...args...);

示例用法

首先,假设foo.php的内容是

<?php return get_defined_vars(); ?>

其次,假设我们只是使用全局化的import函数。无论您如何访问它,结果都是相同的。

导出值

import函数将返回导入文件返回的任何值。就像includerequire一样。当与闭包和di容器结合使用时,您可以获得类似于node.js CommonJs模块系统的结果。

$exported = import('foo.php');

隔离导入

这个项目的整个目的是确保导入的文件不能访问父文件的任何变量。所以对于一个普通的includerequire,您会得到这样的结果

$abc = '123';
$exported = include('foo.php');
var_dump($exported == ['abc' => '123']); // true

使用我们的import函数,这是发生的

$abc = '123';
$exported = include('foo.php');
var_dump($exported == []); // true

提供自定义作用域

有时我们可能希望导入的文件可以访问某些特定数据。

$abc = '123';
$scope = ['bar' => 'baz'];
$exported = include('foo.php', $scope);
var_dump($exported == $scope); // true

包含或require

在内部,import确实使用了正常的includerequire
默认情况下,我们使用require,但您可以轻松地更改此设置。

import('foo.php', null, true);  // requires foo.php
import('foo.php', null, false); // includes foo.php