详解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 存储文本换行实现方法
Jan 05 PHP
PHP 学习路线与时间表
Feb 21 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
php json_encode奇怪问题说明
Sep 27 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 PHP
php单例模式实现方法分析
Mar 14 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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读取csv实现csv文件下载功能
2013/12/18 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
php编程每天必学之表单验证
2016/03/01 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
JPype实现在python中调用JAVA的实例
2017/07/19 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
经贸韩语专业大学生职业规划
2014/02/14 职场文书
酒店管理求职信范文
2014/04/06 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python
Python提取PDF指定内容并生成新文件
2021/06/09 Python
Go 语言中 20 个占位符的整理
2021/10/16 Golang
SQL CASE 表达式的具体使用
2022/03/21 SQL Server