详解WordPress中用于合成数组的wp_parse_args()函数
wp_parse_args()函数是WordPress核心经常用到的函数,它的用途很多,但最主要用来给一个数组参数(args)绑定默认值。
因为wp_parse_args()函数返回的一定是一个数组,所以他会把传入查询字符串和对象(object)自动转换成数组,给了使用者更加方便的条件,也增加了兼容性。
常见的query_posts()、wp_list_comments()和get_terms()函数都使用了wp_parse_args()函数来帮它给数组参数添加默认值。
用法
wp_parse_args($args,$defaults);
参数
$args
(数组|字符串)(必须)查询字符串、对象或者数组参数,用来绑定默认值。
默认值:None
查询字符串:
type=post&posts_per_page=5&cat=1
数组:
array('type'=>'post','posts_per_page'=>5,'cat'=>'1')
$defaults
(数组)(可选)数组参数的默认参数。
默认值:空字符串
例子
functionexplain_parse_args($args=array()){ //$args的默认值 $defaults=array( 'before'=>'<divclass="box">', 'after'=>'</div>', 'echo'=>true, 'text'=>'wp_parse_args()函数演示' ); //绑定默认值 $r=wp_parse_args($args,$defaults); $output=$r['before'].$r['text'].$r['after']; if(!$r['echo'])return$output; echo$output; } //没有参数 explain_parse_args();//打印:<divclass="box">wp_parse_args()函数演示</div> //字符串参数 $output=explain_parse_args('text=字符串参数&before=<divclass="box-2">&echo=0'); echo$output;//打印:<divclass="box-2">字符串参数</div> //数组参数 explain_parse_args(array('text'=>'数组参数','before'=>'<divclass="box-3">'));//打印:<divclass="box-3">数组参数</div> 还有另一种不使用第二个$defaults参数的用法,就是帮你把一个查询字符串、对象或者数组的变量直接转换成通用的数组,避免判断类型。 //字符串 $array=wp_parse_args('text=测试另一种用法&type=字符串'); var_dump($array); /* array(2){ ["text"]=> string(21)"测试另一种用法" ["type"]=> string(9)"字符串" } */ //对象(object) classargs_obj{ public$text='测试另一种用法'; public$type='对象(object)'; functionfunc(){ //转换成数组的时候对象里边的函数会被忽略 } } $obj=newargs_obj; var_dump($obj); /* object(args_obj)#2175(2){ ["text"]=> string(21)"测试另一种用法" ["type"]=> string(18)"对象(object)" } */
wp_parse_args函数源代码详解
wp_parse_args函数的源代码比较简单,
依附于PHP内置函数get_object_vars、array_merge与WordPress的wp_parse_str函数来实现,
以下是该函数的源代码:
/** *Mergeuserdefinedargumentsintodefaultsarray. * *ThisfunctionisusedthroughoutWordPresstoallowforbothstringorarray *tobemergedintoanotherarray. * *@since2.2.0 * *第一个参数可以是字符串、数组或对象(obj) *@paramstring|array$argsValuetomergewith$defaults *第二个参数为默认的预设值数组,必须是数组 *@paramarray$defaultsArraythatservesasthedefaults. *返回值将是一个数组 *@returnarrayMergeduserdefinedvalueswithdefaults. */ functionwp_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)) returnarray_merge($defaults,$r); return$r; }
其中get_object_vars函数是用来返回由对象属性组成的关联数组。
array_merge函数用是将两个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。