详解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 nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
Aug 21 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
php适配器模式简单应用示例
Oct 23 PHP
PHP大文件分割分片上传实现代码
Dec 09 PHP
php7中停止php-fpm服务的方法详解
May 09 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
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
node.js中的console用法总结
2014/12/15 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
简单说明Python中的装饰器的用法
2015/04/24 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python实现剪切功能
2019/01/23 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
Python 图片处理库exifread详解
2021/02/25 Python
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
青春励志演讲稿
2014/04/29 职场文书
商场租赁意向书
2014/07/30 职场文书
社区志愿者活动方案
2014/08/18 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
留学推荐信怎么写
2015/03/26 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书