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交互模式下不起作用?
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
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |