0
点赞
收藏
分享

微信扫一扫

php命令行运行类中的方法

以前一直听说php可以在命令行中运行,但是网上的说明都是一大堆,我今天自己测试了一下,写了一个类,可以调用任意控制器中的方法。
首先,我们要知道几个函数和几个参数:

一个函数:

php_sapi_name() 获取php脚本当前运行环境,如果在浏览器上运行,结果非常多,具体参考一下手册,但是如果是命令行运行这个脚本,结果一般就一个,‘cli’,利用这个特性,我们就可以阻止不是cli运行。因为有的脚本在浏览器中运行非常消耗资源,但是命令行就非常快,这也是为啥我们要用命令行来操作某些类的某些方法的原因。

一个参数:

$argv 命令行模式下参数数组,就是你在命令行输入的东东,都在这个数组里面。
例如:

php D:\phpStudy\WWW\mytest.com\cli2cgi.php  test fsindcls

这个命令的意思就是调用php执行​​D:\phpStudy\WWW\mytest.com\cli2cgi.php​​这个文件,同时,传递三个参数进去。

如果我们在​​cli2cgi.php​​写上var_dump($argv),就可以看到如下结果:

php命令行运行类中的方法_命令行

看到没,获取到参数了!

那么,接下来就简单了,我们输入类和方法,然后在cli2cgi.php里面拼接文件路径和类名,方法名,然后引用一下,就可以实现在命令行中调用类中的某些方法了!原理就是这么简单。下面上代码:

cli2cgi.php

<?php
// 获取参数,第一为控制器,第二个为方法,第0个为调用的文件路径
// var_dump($argv);
// exit;
$c = $argv[1];
$a = $argv[2];
//拼出类文件路径, 如果a为index crontab_path = index.controller.php
$crontab_path = 'controller/' . $c . '.controller.php';
//引入该文件
require $crontab_path;
//实例化类
$controller = new $c;
//调用该方法
$controller->$a();

test.controller.php

<?php
class test {
public function index() {
echo 'test cgi';
}

public function find() {
if (php_sapi_name() !== 'cli') {
die('nedd cli environment !');
};
echo 'find function' . PHP_EOL;
echo date('Y-m-d H:i:s', time());
}
}

运行命令:

php D:\phpStudy\WWW\mytest.com\cli2cgi.php  test find

注意:我在这里把php加入全局环境变量了,所以可以直接调用php。

如是,就出现如下结果:

php命令行运行类中的方法_脚本_02

一般框架里面都有这个功能,如果没有的话,就自己这样写一个吧,也很简单!


举报

相关推荐

0 条评论