我们在webservice
中写了php
。这非常简单,你可以http request
做一个"动作" (post变量)和webservice
相应地执行函数。我们的应用(webservice
和android
)使用此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
文件中包含此文件时不立即执行。
答案 0 :(得分:1)
这非常简单,实际上:将函数声明和函数调用分成两个单独的文件。
services.php
function startService($action) {
...
}
go.php
require_once 'services.php';
startService($_POST['action']);
如果您继续保持代码声明和代码调用之间逻辑分离的态度,并且如上所示另外注入参数,那么你就是使您的代码更加灵活,可重用和可维护。你在这里所拥有的基本上是MVC术语中适当的控制器的卑微开端。