以下两种技术似乎都可行。我想知道哪种技术是最合适的技术。
// parameters
$text_str = 'antique picture';
$error_arr = array();
$error_arr
变量包含在参数中:
function step_one($text_str,$error_arr) {
global $error_arr;
//... some code goes here ...
$error_arr['step_one'] = true;
}
function step_two($text_str,$error_arr) {
global $error_arr;
//... some code goes here ...
$error_arr['step_two'] = true;
}
// call the two functions that have $error_arr included in the parameters
step_one($test_str,$error_arr);
step_two($text_str,$error_arr);
// they output the following
print_r outputs array('step_one' => 1)
print_r outputs array('step_one' => 1, 'step_two' => 1)
参数中省略了$error_arr
变量。
function step_one($text_str) {
global $error_arr;
//... some code goes here ...
$error_arr['step_one'] = true;
}
function step_two($text_str) {
global $error_arr;
//... some code goes here ...
$error_arr['step_two'] = true;
}
// call the functions that have the $error_arr variable omitted from the parameters
step_one($text_str);
step_two($text_str);
// the last two functions have exactly the same output as the
// first two functions even though the `$error_arr` is not included
// in the parameters
print_r outputs array('step_one' => 1)
print_r outputs array('step_one' => 1, 'step_two' => 1)
我在共享主机上运行PHP 7.1。我在控制面板中打开了display_errors
。
如果我在参数中包含$error_arr
变量,或者如果我使用省略参数中$error_arr
变量的函数,PHP不会抛出任何错误消息。
答案 0 :(得分:0)
您可以拥有以下内容:
$error_arr = [
'step_one' => step_one($text_str),
'step_two' => step_two($text_str),
];
从问题不清楚这个代码的目的是什么,所以一些方法或其他可能更好。例如,如果您需要在此特定位置分几个步骤处理$text_str
- 您可以使用闭包:
$processing = [
'step_one' => function($str) { /* some code */ return true },
'step_two' => function($str) { /* some code */ return true },
];
$results = [];
foreach($processing as $func) {
array_push($results, $func($text_str));
}
如果您希望这些函数共享一些变量 - 您可以通过use
子句传递它:
$shared = [];
$processing = [
'step_one' => function($str) use ($shared) { /* some code */ return true },
'step_two' => function($str) use ($shared) { /* some code */ return true },
];
$results = [];
foreach($processing as $func) {
array_push($results, $func($text_str));
}
答案 1 :(得分:0)
这两种技术实际上是相同的技术。
以下是一个例子:
$error_arr = ['example' => 'value'];
$not_error_arr = ['something' => 'else'];
function step_one($text_str, $error_arr) {
global $error_arr;
$error_arr['step_one'] = true;
}
step_one('foo', $not_error_arr);
var_dump($error_arr, $not_error_arr);
这将输出
数组(大小= 2) 'example'=>字符串'value'(长度= 5)'step_one'=>布尔值
数组(大小= 1) 'something'=>字符串'else'(长度= 4)
'step_one'值未分配给您作为参数传递的数组,因为该分配已被global $error_arr
覆盖。
所以,无论你传递的是
的第二个参数function step_one($text_str,$error_arr) {...
函数中的全局定义意味着它将被忽略。看起来你只是在写它,因为全局范围内的变量恰好与你作为参数传递的变量相同。