有没有一种方法可以在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)}这显然与标识符作用域背后的想法相矛盾。。。可以使用引用参数,但也可以指定返回值。对于多个值,可以使用php的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);
}