我一直在构建 Wordpress 小部件,并且一直使用如下代码:
$instance = wp_parse_args( (array) $instance);
它从来没有引起问题,并且在几个地方被推荐(贾斯汀·塔德洛克,我有的两本 Wordpress 书籍等),但是这些来源都没有真正解释为什么。
那么,这实际上是做什么的,如果省略它会发生什么?
用外行的话来说,它是合并数组。
它经常被使用,因为它允许一个函数接受多个参数而不会使代码看起来混乱。然后通过允许开发人员设置默认值进行下一步。
这就是 wp_parse_args 的用武之地,它将传入的值与默认值合并。
$args = wp_parse_args($passed_in_args, $default_values);
它还将 URL 查询字符串转换为数组。
希望这可以帮助
https://developer.wordpress.org/reference/functions/wp_parse_args/
wp_parse_args 是一个通用实用程序,用于将参数数组和默认值数组合并在一起。也可以给它一个 URL 查询类型字符串,该字符串将被转换为一个数组(即“id=5&status=draft”)。
它在整个 WordPress 中使用,以避免担心默认值和输入的逻辑,并为传递参数生成稳定的模式。query_posts、wp_list_comments 和 get_terms 等函数是 wp_parse_args 简化能力的常见示例。
具有基于 $args 设置的函数能够无限扩展可能传递给它们的值的数量,避免超长函数调用的烦恼,因为要跟踪的参数太多,其中许多参数只有函数是在极少数情况下覆盖通常良好的默认值。
一般来说,它正在简化函数调用,以避免长代码检查外观/存在以及作为参数传递的变量的默认值
这是wordpresswp-includes/functions.php
文件中的代码:
/**
* Merge user defined arguments into defaults array.
*
* This function is used throughout WordPress to allow for both string or array
* to be merged into another array.
*
* @since 2.2.0
*
* @param string|array $args Value to merge with $defaults
* @param array $defaults Array that serves as the defaults.
* @return array Merged user defined values with defaults.
*/
function wp_parse_args( $args, $defaults = '' ) {
if ( is_object( $args ) )
$r = get_object_vars( $args );
elseif ( is_array( $args ) )
$r =& $args;
else
wp_parse_str( $args, $r );
if ( is_array( $defaults ) )
return array_merge( $defaults, $r );
return $r;
}