Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以在php中使用函数自动填充外部上下文中的变量?_Php_Function_Variables_Scope - Fatal编程技术网

有没有一种方法可以在php中使用函数自动填充外部上下文中的变量?

有没有一种方法可以在php中使用函数自动填充外部上下文中的变量?,php,function,variables,scope,Php,Function,Variables,Scope,我在想。。。让我们考虑一下: function get_current_post_id(){ global $wp_query; return $wp_query->get_queried_object_id(); } 后来 function test($post_id = null){ if(!$post_id) $post_id = get_current_post_id(); } 嗯。但如果我能写下这样的话那就太棒了: function test($post_id

我在想。。。让我们考虑一下:

function get_current_post_id(){
  global $wp_query;
  return $wp_query->get_queried_object_id();
}
后来

function test($post_id = null){
   if(!$post_id) $post_id = get_current_post_id();
}
嗯。但如果我能写下这样的话那就太棒了:

function test($post_id = null){
   if(!$post_id) get_current_post_id();

   // ...and directly have $post_id populated and ready to use
   do_something($post_id);
}

并在当前上下文中自动填充$post_id变量(test()函数)。有办法吗?我的意思是,不使用globals

好的,我发现这是可能的,正如@arkascha所说,我可以通过引用传递:

function get_current_post_id(&$post_id = null){// &$post_id instead of $post_id
  global $wp_query;
  $post_id = $wp_query->get_queried_object_id();
  return $post_id; // optional
}
问题是:我可以简单地通过引用传递变量。 然后:


如果不想使用全局变量,则必须编辑
函数get\u current\u post\u id(){…}
以接收参数,并将
$wp\u query
作为参数传递。另外,在
function test(){…}
中,由于
get\u current\u post\u id()
返回一个值,您必须将它分配给一个变量才能使用它,比如
如果(!$post\u id){$post\u id=get\u current\u post\u id($wp\u query)}list()
函数。但你必须以明确的方式去做。从健壮性的角度来看,这肯定是有意义的:内部函数不知道外部范围,因此会有破坏东西的风险…@Condorcho:不,那不是我的question@arkascha是的,有道理。@arkascha我补充了答案,谢谢。当然,这正是我提到的。但是,它降低了代码的可读性,这一直是一个坏主意。在这种情况下不是这样,因为这是我自己的自我封闭;)函数库。谢谢。相信我,你将来肯定会为此诅咒自己的。我会记得你告诉我的请记住,您总是在编写代码供其他人阅读。即使在两周的时间里,另一个人就是你;-)
function test($post_id = null){
   if(!$post_id) get_current_post_id($post_id); // even if I know it's null

   // ...then $post_id will be auto-populated
   do_something($post_id);
}