详解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缓存类代码(附详细说明)
Jun 09 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
php 生成短网址原理及代码
Jan 23 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
thinkphp 验证码 的使用小结
May 07 PHP
PHP命令空间namespace及use的用法小结
Nov 27 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
May 23 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 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中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
在Python下进行UDP网络编程的教程
2015/04/29 Python
python版本的读写锁操作方法
2016/04/25 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
理论讲解python多进程并发编程
2018/02/09 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
如何用Python 加密文件
2020/09/10 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
优秀教师主要事迹
2014/02/01 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
工会积极分子个人总结
2015/03/03 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android