Php 如何使用其他函数作为参数调用函数
我只是在学习php 我正在尝试将带有注释的日志添加到我的函数输出中。 现在看起来是这样的:Php 如何使用其他函数作为参数调用函数,php,Php,我只是在学习php 我正在尝试将带有注释的日志添加到我的函数输出中。 现在看起来是这样的: //the function function add1($x){ if($GLOBALS['logging'] === 'on'){ $log[] = 'Adding 1 to '.$x;}; $a = $x + 1; if($GLOBALS['logging'] === 'on'){ $return[] = $a; $return[] = $log; return
//the function
function add1($x){
if($GLOBALS['logging'] === 'on'){ $log[] = 'Adding 1 to '.$x;};
$a = $x + 1;
if($GLOBALS['logging'] === 'on'){
$return[] = $a;
$return[] = $log;
return $return;
}else{ return $a; };
};
//calling the function
if($GLOBALS['logging'] === 'on'){
$return = add1($x);
$number = $return[0];
$log = $return[1];
}else{ $number = add1($x); };
//function
function log_return($data = 'x', $log = 'x'){
if($GLOBALS['logging'] === 'on'){
if($data !== 'x') $return[] = $data;
if($log !== 'x') $return[] = $log;
return $return;
} return $data;
};//function end
我有点恼火,因为我需要重新键入这个if语句。
所以我做了一个单独的函数来返回这个函数
看起来是这样的:
//the function
function add1($x){
if($GLOBALS['logging'] === 'on'){ $log[] = 'Adding 1 to '.$x;};
$a = $x + 1;
if($GLOBALS['logging'] === 'on'){
$return[] = $a;
$return[] = $log;
return $return;
}else{ return $a; };
};
//calling the function
if($GLOBALS['logging'] === 'on'){
$return = add1($x);
$number = $return[0];
$log = $return[1];
}else{ $number = add1($x); };
//function
function log_return($data = 'x', $log = 'x'){
if($GLOBALS['logging'] === 'on'){
if($data !== 'x') $return[] = $data;
if($log !== 'x') $return[] = $log;
return $return;
} return $data;
};//function end
并将其连同:
return $return = isset($log) ? log_return($data, $log) : log_return($data);
现在我的问题是:有没有一种方法可以用函数调用函数。。
比如:
因此,我可以返回日志或不返回..给定答案-这应该可以:
function add1($a)
{
// add1 code goes here
}
function call_function($name, $param)
{
$name($param);
}
call_function('add1', $x);
另一方面,变量和函数名不是很直观。也许您应该研究如何编写高质量的可读代码。我推荐阅读Martin Fowler的《重构》第9章,它非常好。你可以在网上找到PDF版本
另一个注意事项,您的return语句return$return=isset$log)?日志返回($data,$log):日志返回($data)代码>对$return有不必要的赋值。代码应该简单地读取
return isset($log) ? log_return($data, $log) : log_return($data);
给出答案-这应该有效:
function add1($a)
{
// add1 code goes here
}
function call_function($name, $param)
{
$name($param);
}
call_function('add1', $x);
另一方面,变量和函数名不是很直观。也许您应该研究如何编写高质量的可读代码。我推荐阅读Martin Fowler的《重构》第9章,它非常好。你可以在网上找到PDF版本
另一个注意事项,您的return语句return$return=isset$log)?日志返回($data,$log):日志返回($data)代码>对$return有不必要的赋值。代码应该简单地读取
return isset($log) ? log_return($data, $log) : log_return($data);
是的,这是可能的。要简化:
function first($x) {
return $x+1;
}
function second($y) {
return $y+1;
}
echo second(first(1)); // Returns 3, ie. 1+1+1
是的,这是可能的。要简化:
function first($x) {
return $x+1;
}
function second($y) {
return $y+1;
}
echo second(first(1)); // Returns 3, ie. 1+1+1
正如gview在评论中所说,不要使用全局变量。参数列表的存在有几个原因,包括但不限于使代码更易于阅读、编辑和调试。函数名和变量名也是如此
此外,您的代码非常混乱。它可以合并为:
function addTo($currentValue, $valueToAdd, $logging = 0)
{
if ($logging) {
logWrite('addTo', "Adding $valueToAdd to $currentValue");
return $currentValue + $valueToAdd;
} else {
return $currentValue;
}
}
function logWrite($operation, $message)
{
$log = getLog(); // maybe it's a file, or DB record or something
// perform the write, depending on your implementation
}
$number = addTo($someStaringValue, $someOtherValue, 1);
所有这些都表明,日志不应该控制程序流。换句话说,系统是否记录了某些内容不应该影响代码的执行。我真的认为你需要对你要做的事情有一个更广阔的视角,并把它分解成不同的部分
充其量,您的代码应该告诉记录器记录信息,记录器本身应该确定日志记录是否实际打开。如果是,则记录信息。如果没有,那么调用记录器的代码仍然可以正常工作。正如gview在评论中所说,不要使用全局变量。参数列表的存在有几个原因,包括但不限于使代码更易于阅读、编辑和调试。函数名和变量名也是如此
此外,您的代码非常混乱。它可以合并为:
function addTo($currentValue, $valueToAdd, $logging = 0)
{
if ($logging) {
logWrite('addTo', "Adding $valueToAdd to $currentValue");
return $currentValue + $valueToAdd;
} else {
return $currentValue;
}
}
function logWrite($operation, $message)
{
$log = getLog(); // maybe it's a file, or DB record or something
// perform the write, depending on your implementation
}
$number = addTo($someStaringValue, $someOtherValue, 1);
所有这些都表明,日志不应该控制程序流。换句话说,系统是否记录了某些内容不应该影响代码的执行。我真的认为你需要对你要做的事情有一个更广阔的视角,并把它分解成不同的部分
充其量,您的代码应该告诉记录器记录信息,记录器本身应该确定日志记录是否实际打开。如果是,则记录信息。如果没有,那么调用记录器的代码仍然可以正常工作。可能重复:不要使用$GLOBALS。将需要的参数传递到函数中。它更安全、自文档化,并且可以捕获错误,特别是如果您使用PHP中现在可用的类型暗示,这就是为什么许多框架都是围绕依赖注入模式构建的。我强烈建议:可能重复:不要使用$GLOBALS。将需要的参数传递到函数中。它更安全、自文档化,并且可以捕获错误,特别是如果您使用PHP中现在可用的类型暗示,这就是为什么许多框架都是围绕依赖注入模式构建的。我强烈建议:谢谢你的回复,我将重写没有全局变量的代码,是的,日志是打开(文件或屏幕)/关闭的。有很多工作要做。。尝试尽可能多地整合。感谢您的回复,我将在不使用globals的情况下重写代码,是的,日志已打开(文件或屏幕)/关闭。有很多工作要做。。尽可能地进行整合。