【问题标题】:Why auto_prepend_file take no effect in php's interactive mode?为什么 auto_prepend_file 在 php 的交互模式下不起作用?
【发布时间】:2020-11-28 08:29:00
【问题描述】:

通过composer安装包并导入:

mkdir  myproject
cd myproject
composer require metowolf/meting
mkdir public
touch public/index.php

在 index.php 中加载它:

cd public
vim  index.php
<?php

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

显示项目目录结构:

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

在浏览器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

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

【问题讨论】:

    标签: php load interactive


    【解决方案1】:

    auto_prepend_file 可以在交互式 shell 中工作。问题是use 关键字只对当前行有效。

    有了这个 prepend.php 文件:

    <?php
    namespace foo;
    
    class Bar
    {
        function __construct()
        {
            echo 'Success';
        }
    }
    ?>
    

    这有效(全类名):

    php -d auto_prepend_file=prepend.php -a 交互式外壳 php > 新的 foo\Bar(); 成功

    这也有效(usenew 在同一行):

    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

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      相关资源
      最近更新 更多