我一直在为一个游戏项目工作(所以你会明白我不能发布实际的脚本),而且我正在清理代码并将代码放入函数中,而不是仅仅在< / p>
if ($_POST['name'] { //code }
这是我正在尝试的正确方法吗? (我试过,但它打破了我的系统)
if ($_POST['action'] == "actionName") actionName($_POST); //calls function if the $_POST is present
function actionName($_POST) { //code }
提前感谢您的正确答案!
答案 0 :(得分:7)
$ _ POST可全局访问。所以你不必传递给你的函数:
if ($_POST['action'] == 'actionName') actionName();
function actionName() {
//code using $_POST
}
如果你希望你的函数能够用任何数组(即$ _POST除外)做它想做的事情,那么让函数接受一个参数,但不要调用它$ _POST:
if ($_POST['action'] == 'actionName') actionName($_POST);
function actionName(parameters) {
//code using parameters
}
答案 1 :(得分:0)
$_POST
是super-global。所有PHP代码,无论范围如何,都可以自动访问此数据结构。
因此,以下情况很好:
if ($_POST['action'] == "actionName") {
actionName();
}
然后
function actionName() {
print_r($_POST);
// code
}
答案 2 :(得分:0)
$_POST
已经是一个超全局变量,因此您无需将其传递给函数。如果函数需要$_POST
的内容,则复制并将其传递给函数。
但是,从您的示例中,我觉得您需要将$_POST['action']
传递给您的函数而不是$_POST
。
答案 3 :(得分:0)
在您的示例中,您需要在字符串变量周围加上引号:
//calls function if the $_POST is present
if ($_POST['action'] == 'actionName') actionName($_POST);
function actionName($_POST) { /*code*/ }
答案 4 :(得分:0)
虽然$_POST
是超全球性的,但是你当然可以做到这一点,实际上是个好主意。这样您就可以解耦代码,也许可以在应用程序的其他部分重用actionName
。
但是,不要命名函数$_POST
的参数(这比有用的更令人困惑)。
要避免对每个可能的操作发出大量if
语句,请查看call_user_func
[docs]。
E.g。你可以这样做:
$allowed_actions = array_fill_keys(array('actionName', ...), true);
if(isset($allowed_actions[$_POST['action']])) {
call_user_func($_POST['action'], $_POST);
}
答案 5 :(得分:0)
你应该在执行它的代码之前移动函数,以及这里的其他人对$ _POST数组的说法。如果你想要试试这个
function actionName($input) { // code and return }
if (isset($_POST['action'])) {
$action = $_POST['action'];
if ($action == 'actionName') {
$name = actionName($action);
}
}
答案 6 :(得分:0)
答案 7 :(得分:0)
如果您正在谈论动态调用函数,您可以通过以下方式实现:
/*
Example Post
$_POST['functionName'] = 'doSomething';
$_POST['value'] = 'woot!';
*/
function doSomething($message) {
echo $message;
}
// Call the function if it exists
if (function_exists($_POST['functionName']) {
call_user_func($_POST['functionName'], $_POST['value']);
}
// The above would output "Woot!"