使用php文件作为Web服务,也可以作为普通的包含文件

时间:2014-08-01 08:13:09

标签: php web-services

我们在webservice中写了php。这非常简单,你可以http request做一个"动作" (post变量)和webservice相应地执行函数。我们的应用(webserviceandroid)使用此iOS

我们还有一个用户管理系统。它最初是一个创建/编辑/删除用户页面,但后来增长了很多以包含更多功能。我们希望在此webservice应用程序中使用某些php的功能。

这是webservice的设计方式:

include "config.php"; //for database connection
//some more includes for additional classes and functions

$action = $_POST["action"];
switch ($action) {
  case "login": {
    //do login stuff
    break;
  }
  case "get_roster": {
    //do roster list stuff
    break;
  }
}

当包含来自另一个php文件的文件时,这不起作用,因此我将其放在function中(因此它不会立即执行)。为区分http电话和包含,我添加了$userId变量。如果未设置,则立即调用function,如果已设置,则应从包含webservice的文件中调用该函数。这很好用,但是看到这段代码让我的眼睛抽搐了。我真的想要一个更优雅的解决方案,但我不确定它是否可行。这是现在编码的方式:

include "config.php"; //for database connection
//some more includes for additional classes and functions

//there is no way to set $userId when doing a http request
//when including this file you can set $userId first so startService() isn't called immediately
if (!isset($userId)) {
  startService();
}

function startService() {
  $action = $_POST["action"];
  switch ($action) {
    case "login": {
      //do login stuff
      break;
    }
    case "get_roster": {
      //do roster list stuff
      break;
    }
  }
}

实现此行为的最佳方法是什么?我想要的是switch case在执行http request时立即执行,但在刚刚从另一个php文件中包含此文件时不立即执行。

1 个答案:

答案 0 :(得分:1)

这非常简单,实际上:将函数声明和函数调用分成两个单独的文件。

services.php

function startService($action) {
   ...
}

go.php

require_once 'services.php';

startService($_POST['action']);

如果您继续保持代码声明和代码调用之间逻辑分离的态度,并且如上所示另外注入参数,那么你就是使您的代码更加灵活,可重用和可维护。你在这里所拥有的基本上是MVC术语中适当的控制器的卑微开端。