wp_parse_args
wp_parse_args 函数是 WordPress 内核文件中比较常用到的函数,因为这个函数在很多地方比较实用,所以我也就简单的研究了一下,该函数在 WordPress 中主要被用来处理函数接受的参数,并将参数组装为数组的一个函数。
函数用法
wp_parse_args 函数可以将一个对象、参数字符串、数组与预设的数组整合并返回一个新的数组。
因为函数使用起来很简单,所以只给一个简单的例子
$r = wp_parse_args( $args, $defaults );
参数
- $args:函数接收到的参数
- $defaults:函数的默认参数(一些参数没有设置的情况下的预设值)
来看一下,WordPress 中是怎么使用这个函数的
以下截自 WordPress 内置get_post()函数
function get_posts($args = null) { $defaults = array( //设置预设值 'numberposts' => 5, 'offset' => 0, 'category' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'include' => array(), 'exclude' => array(), 'meta_key' => '', 'meta_value' =>'', 'post_type' => 'post', 'suppress_filters' => true); //将接收的 $args参数与$defaults整合,返回给$r变量 $r = wp_parse_args( $args, $defaults ); if ( empty( $r['post_status'] ) ) //以下省略其他无用代码//...... }
wp_parse_args函数源代码详解
wp_parse_args 函数的源代码比较简单,
依附于PHP 内置函数get_object_vars、array_merge与WordPress的wp_parse_str函数来实现,
以下是该函数的源代码:
/** * 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 * *第一个参数可以是 字符串、数组或对象(obj) * @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 )) // 将接收的对象(obj)转换为数组 $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; }
其中get_object_vars函数是用来返回由对象属性组成的关联数组。
array_merge函数用是将两个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
wp_parse_str函数
也是一个 WordPress 的内置函数,
详细就不写了,函数主要是用来将一个带参数的字符串转化为一个数组,
主要是用到了PHP内置的parse_str函数。
源代码如下:
function wp_parse_str($string, &$array) { parse_str ( $string, $array ); if (get_magic_quotes_gpc ()) $array = stripslashes_deep ( $array ); $array = apply_filters ( 'wp_parse_str', $array ); }