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 );
}