详解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笔记之:文章中图片处理的使用
Apr 26 PHP
PHP运行模式的深入理解
Jun 03 PHP
php 强制下载文件实现代码
Oct 28 PHP
memcache命令启动参数中文解释
Jan 13 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
php获取一个变量的名字的方法
Sep 05 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 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 文件系统详解
2012/09/13 PHP
php中return的用法实例分析
2015/02/28 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
jQuery each()小议
2010/03/18 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
jquery实现图片预加载
2015/12/25 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Python实现字典去除重复的方法示例
2017/07/31 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python骚操作之动态定义函数
2019/03/26 Python
python实现图像全景拼接
2020/03/27 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
中国梦演讲稿5分钟
2014/08/19 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript
python playwright之元素定位示例详解
2022/07/23 Python