Why auto_prepend_file take no effect in php's interactive mode?

it_*_*ure 2 php load interactive

Install package via composer and import it :

mkdir  myproject
cd myproject
composer require metowolf/meting
mkdir public
touch public/index.php
Run Code Online (Sandbox Code Playgroud)

在 index.php 中加载它:

cd public
vim  index.php
<?php

require __DIR__ . '/../vendor/autoload.php';
use Metowolf\Meting;
$api = new Meting('netease');
Run Code Online (Sandbox Code Playgroud)

显示项目目录结构:

tree myproject
myproject
??? composer.json
??? composer.lock
??? public
?   ??? index.php
??? vendor
    ??? autoload.php
    ??? composer
    ?   ??? autoload_classmap.php
    ?   ??? autoload_namespaces.php
    ?   ??? autoload_psr4.php
    ?   ??? autoload_real.php
    ?   ??? autoload_static.php
    ?   ??? ClassLoader.php
    ?   ??? installed.json
    ?   ??? LICENSE
    ??? metowolf
        ??? meting
            ??? composer.json
            ??? LICENSE
            ??? README.md
            ??? src
                ??? Meting.php
Run Code Online (Sandbox Code Playgroud)

在浏览器中验证它 127.0.0.1/myproject/public,它工作正常,包Megting已加载。

现在,我想以交互模式加载它:

php  -d auto_prepend_file=/home/debian/myproject/vendor/metowolf/meting/src/Meting.php  -a
Interactive mode enabled
php > use Metowolf\Meting;
php > $api = new Meting('netease');
PHP Warning:  Uncaught Error: Class 'Meting' not found in php shell code:1
Stack trace:
#0 {main}
  thrown in php shell code on line 1
Run Code Online (Sandbox Code Playgroud)

为什么auto_prepend_file在php交互模式下不起作用?

Oli*_*ier 5

auto_prepend_file确实在交互式 shell 中工作。问题是use关键字仅对当前行有效。

使用这个 prepend.php 文件:

<?php
namespace foo;

class Bar
{
    function __construct()
    {
        echo 'Success';
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

这有效(完整的类名):

php -d auto_prepend_file=prepend.php -a
交互式外壳

php > 新的 foo\Bar();
成功

这也有效(use并且new在同一行):

php -d auto_prepend_file=prepend.php -a
交互式外壳

php > 使用 foo\Bar; 新酒吧();
成功

这失败了:

php -d auto_prepend_file=prepend.php -a
交互式外壳

php > 使用 foo\Bar;
php > 新栏();
PHP 警告:未捕获的错误:在 php shell 代码中找不到“Bar”类:1