> WordPress开发手册 > wp_parse_args

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

上一篇:
下一篇: