php命令行运行类中的方法

来源:互联网 发布:windows snmpwalk 编辑:程序博客网 时间:2024/06/09 21:32

以前一直听说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),就可以看到如下结果:

这里写图片描述

看到没,获取到参数了!

那么,接下来就简单了,我们输入类和方法,然后在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

<?phpclass 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。

如是,就出现如下结果:

这里写图片描述

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

0 0