详解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下网站防IP攻击代码,超级实用
Oct 24 PHP
PHP中if和or运行效率对比
Dec 12 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
PHP抽象类与接口的区别详解
Mar 21 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
浅谈PHP封装CURL
2019/03/06 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
jquery插件之easing使用
2010/08/19 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python基于贪心算法解决背包问题示例
2017/11/27 Python
python 接收处理外带的参数方法
2018/12/03 Python
英国门把手公司:Door Handle Company
2019/05/12 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
伊琍体标语
2014/06/25 职场文书
2014年安全生产责任书
2014/07/22 职场文书
工作失职检讨书500字
2014/10/17 职场文书
中学生思想品德评语
2014/12/31 职场文书
领导欢迎词范文
2015/01/26 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
学校运动会通讯稿
2015/07/18 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python