实在php程序也可以通过命令行调用,我们在写程序的时候,为了验证某个功能是否精确,可以直接写一段调用代码,然后通过命令走运行,就可以得到验证结果了。
通过命令走运行php程序有如下的好处:
1 在开拓程序的时候可以不用切换到浏览器进行测试,在phpstrom里直接通过终端窗口就可以实行验证程序了
2 通过命令行程序,可以快速建立最大略的单元测试代码,当然,如果要进行系统化、规范化的单元测试,最好还是选择phpunit 或者是 codeception等测试框架进行测试
3 通过命令行调用php程序,可以避免由于web做事器配置而引起的缺点,导致程序调试时误导了开拓者,我曾经在php的web端代码里调用curl功能,创造要求的目标做事器一贯返回400缺点,由于忽略了是web做事器的缘故原由,一贯在调试代码,末了才创造代码是精确的,只是由于web做事器配置的问题,导致调用curl功能出错了,如果切换到命令行程序下代码是正常运行的,这样实在事情的重点就变成跳转web做事器的配置,而不是在糊里糊涂的修正代码了。
下面我们就来看看怎么在命令行下实行php代码。
下面的代码是一个用php代码写的石头剪刀布游戏:
<?phpecho \"大众开始玩游戏\r\n\"大众;$game=new Game();$isContinu=1;while ($isContinu){ echo \"大众请选择你要出什么:1代表石头、2代表剪刀、3代表布、0代表退出游戏\r\n\公众; $input=intval(trim(fgets(STDIN))); switch ($input) { case 1: case 2: case 3: $computerSkill=$game->computerFight(); $result = $game->pk($input, $computerSkill); echo \"大众你出:\公众. $game->skills[$input].\公众,\"大众; echo \"大众电脑出:\公众.$game->skills[$computerSkill].\公众,\"大众; echo \"大众你\"大众.$game->pkResult[$result].\"大众\r\n\"大众; break; case 0: echo '您已经退出游戏'; $isContinu=0; break; default: echo \"大众输入有误,只能输入0到3的数字,1代表石头、2代表剪刀、3代表布、0代表退出游戏\r\n\公众; $isContinu=1; }}class SkillNode{ public $previous=null; public $next=null; public $data=null;}class Game { public $skills=[1=>'石头',2=>'剪刀',3=>'布']; public $pkResult=['输了','赢了','平局']; public $skillNodeList=array(); public $roundCount=0; public $winCount=0; public $loseCount=0; public $tieCount=0; public function __construct() { for ($i = 1; $i < 4; $i++) { $skillNode=new SkillNode(); $skillNode->data=$i; if ($i == 1) { $skillNode->previous=3; $skillNode->next=$i+1; } elseif ($i == 3) { $skillNode->previous=$i-1; $skillNode->next=1; }else{ $skillNode->previous=$i-1; $skillNode->next=$i+1; } $this->skillNodeList[$i]=$skillNode; } } public function pk($skillMan,$skillComputer){ $this->roundCount+=1; if ($skillMan == $skillComputer) { $this->tieCount+=1; return 2; }else{ if (($this->skillNodeList[$skillMan])->next == $skillComputer) { $this->winCount+=1; return 1; }else{ $this->loseCount+=1; return 0; } } } public function computerFight() { return random_int(1, 3); }}?>
假设我们将上面的代码保存到d盘的rockgame.php文件上,这样我们在phpstorm的terminal窗口,用下面的代码就可以通过命令行调用该程序了:
由于rockgame.php文件保存在D盘根目录下,我用cd命令,跳转到D盘,然后实行下面的命令就可以了,当然,条件条件是:你的电脑已经安装了php并且将php的路径加入到了系统参数中了:
php rockgame.php
结果入下图:
石头、剪刀、布,只有三个游戏技能,最大略的办法用几个判断语句就可以了,但是,为了表示封装的效果,用了OOP的办法,建立了game类,将游戏的业务逻辑封装到了game类里。
同时,为了表示可扩展性和代码判断逻辑的统一,特意建立了skillNode类,并在游戏布局函数里进行了初始化,这样在pk方法里,就可以用统一的判断逻辑,假设游戏后来有更多的游戏技能加入,同时,游戏的pk逻辑不变革的话,就只要往技能列表里增加技能元素就好,不用修正其他代码了。