详解WordPress中用于合成数组的wp_parse_args()函数


Posted in PHP onDecember 18, 2015

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

(数组)(可选)数组参数的默认参数。

默认值:空字符串

例子

function explain_parse_args( $args = array() ){
 
  //$args 的默认值
  $defaults = array(
    'before' => '<div class="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();//打印:<div class="box">wp_parse_args() 函数演示</div>
 
//字符串参数
$output = explain_parse_args( 'text=字符串参数&before=<div class="box-2">&echo=0' );
echo $output;//打印:<div class="box-2">字符串参数</div>
 
//数组参数
explain_parse_args( array( 'text' => '数组参数', 'before' => '<div class="box-3">' ) );//打印:<div class="box-3">数组参数</div>
还有另一种不使用第二个 $defaults 参数的用法,就是帮你把一个查询字符串、对象或者数组的变量直接转换成通用的数组,避免判断类型。

//字符串
$array = wp_parse_args( 'text=测试另一种用法&type=字符串' );
var_dump( $array );
/*
  array(2) {
    ["text"]=>
      string(21) "测试另一种用法"
    ["type"]=>
      string(9) "字符串"
  }
*/
 
//对象(object)
class args_obj{
 
  public $text = '测试另一种用法';
 
  public $type = '对象(object)';
 
  function func(){
    //转换成数组的时候对象里边的函数会被忽略
  }
 
}
$obj = new args_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函数来实现,
以下是该函数的源代码:

/**
 * 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函数用是将两个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

PHP 相关文章推荐
php 字符转义 注意事项
May 27 PHP
php win下Socket方式发邮件类
Aug 21 PHP
php中几种常见安全设置详解
Apr 06 PHP
服务器web工具 php环境下
Dec 29 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
php轻松实现文件上传功能
Mar 03 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 #PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 #PHP
详解 PHP加密解密字符串函数附源码下载
Dec 18 #PHP
PHP封装的字符串加密解密函数
Dec 18 #PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 #PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 #PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 #PHP
You might like
php中的动态调用实例分析
2015/01/07 PHP
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
Python中 Lambda表达式全面解析
2016/11/28 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
利用Python检测URL状态
2019/07/31 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
一套软件测试笔试题
2014/07/25 面试题
合作经营协议书
2014/04/17 职场文书
信息技术课后反思
2014/04/27 职场文书
经典演讲稿汇总
2014/05/19 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
2014年除四害工作总结
2014/12/06 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS