wp_parse_args

评论(3)

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

总结

了解了这个函数后,我们就会明白为什么WordPress函数参数的写法可以有不同形式,
同样也对我们以后写代码扩展了思路。
随着时间的推移,对WordPress的内部构成产生了兴趣,
也许过一阵子会强迫自己去看一遍其源代码。





转载请注明转自: wp_parse_args

  1. @满子博客
    谁让你不好好学了

  2. Pingback: WordPress 函数中参数(变量)的写法|WordPress

  3. 不明觉厉啊!!!