bdelespierre / underscore
Underscore.js 在 PHP 中的端口
Requires
- php: >=5.4.0
Requires (Dev)
- atoum/atoum: dev-master
This package is auto-updated.
Last update: 2024-09-06 20:14:30 UTC
README
» 目录
Underscore.php
PHP 缺乏一致性,这是事实。在类似领域内的许多函数——例如数组函数——可能有不一致的名称和原型。Underscore.php 通过提供简单、一致且数据类型容忍的80多个函数来纠正这一点,这些函数支持常用的功能:映射、选择、调用——以及更专业的辅助工具:函数绑定、PHP 模板、深度相等性测试等。
Underscore.php 受 Underscore.js 的强烈启发,并尽可能与它保持一致(PHP 语言限制不允许完全覆盖——特别是对于函数函数...)。不要犹豫,报告 与 Underscore.js 之间的任何差异。
功能
- 为 PHP 5.4+ 制作
- 数据类型容忍
- 抛出异常而不是错误
- 一致的函数名称/参数
- 轻松链式操作
- ERB 风格模板
- 可扩展
请注意!
此库处于 beta 阶段:强烈建议您尝试它并做出贡献。如果您遇到错误或意外结果,请随时 提交问题。
关于数据类型容忍性
在 PHP 中处理类型可能很繁琐。类型有时可能是模糊的,它们不适用于每个 API 函数/方法。例如,如果您想使用 array_map 将迭代器中的每个项映射,您必须首先将其转换为数组,或者使用循环自己编写映射。同样适用于 sort、diff 或 filter...
PHP 是弱类型语言,这意味着您正在处理的数据比它们的结构更重要。Underscore.php 通过提供几乎适用于每种数据类型的全面接口来理解这一点,因此您不必担心是否可以使用某个函数/方法。
基本上,Underscore.php 使用 3 种主要数据类型
- 标量(整数、浮点数、布尔值或字符串)
- 可遍历(数组、对象或迭代器)
- 可调用(闭包、函数、方法或运行时创建的函数)
当函数需要一个可遍历参数时,您可以提供数组、stdClass 实例(默认 (object)
转换)、迭代器或实现 Traversable 接口的对象(如 PDOStatement 对象)。对于某些函数(如 #extend),您甚至可以扩展一个数组与对象实例,一切都将正常。
<?php
// let's merge our configuration object with data from $_SESSION and MySQL
$userConfig = _::extend([],
include "global.conf.php", // is an array
$pdo->query($groupConfigurationQuery) // is a PDOStatement
$_SESSION['user']->configuration, // is an object
);
?>
目录
安装
Composer
将以下require规则添加到composer.json中,并运行composer update
。有关更多详细信息,请参阅Packagist存储库。
require: { "bdelespierre/underscore": "dev-master" }
使用Git
git clone https://github.com/bdelespierre/underscore.php ./underscore.php
手动
curl -sS https://github.com/bdelespierre/underscore.php/archive/master.zip > underscore.php.zip
unzip underscore.php.zip && rm underscore.zip
或者简单地下载zip文件并解压到您想要的位置。
使用
Composer
<?php
require_once "vendor/autoload.php";
use Underscore\Underscore as _;
_::each([1,2,3], function ($i) { echo "{$i}\n"; });
?>
手动
<?php
require_once "path/to/underscore/src/Underscore/Underscore.php";
require_once "path/to/underscore/src/Underscore/Bridge.php";
use Underscore\Underscore as _;
_::each([1,2,3], function ($i) { echo "{$i}\n"; });
?>
函数
Underscore函数也可以用作过程式函数。要这样做,请包含functions.php
库。唯一的限制是不能使用_::mixin
动态添加新函数。
<?php
require_once "path/to/underscore/src/functions.php";
_each([1,2,3], function ($i) { echo "{$i}\n"; });
?>
集合函数
- each
- eachReference
- map
- reduce
- reduceRight
- find
- filter
- where
- findWhere
- reject
- every
- some
- contains
- invoke
- pluck
- max
- min
- sortBy
- indexBy
- groupBy
- countBy
- shuffle
- sample
- toArray
- size
each
描述:遍历元素列表,依次将每个元素传递给迭代函数。如果传递了上下文对象,则迭代器绑定到该对象。每次迭代调用迭代器时都会传递三个参数:(元素、索引、列表)。如果列表是对象,则迭代器的参数将是(值、键、列表)。
参数
- list:可遍历的,要遍历的列表
- iterator:可调用的,迭代函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::each(list,iterator,context)
示例
<?php
_::each([1,2,3], function ($i) { echo $i; });
// => 123
_::each((object)['a'=>1,'b'=>2,'c'=>3], function ($value, $key) { echo "$key => $value\n"; });
// => displays each pair in turn
?>
eachReference
别名:walk
描述:与each执行相同的工作,但向迭代函数提供每个列表项的引用。
参数
- list:可遍历的,要遍历的列表
- iterator:可调用的,迭代函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::eachReference(list,iterator,context)
示例
<?php
$numbers = [1,2,3];
_::eachReference($numbers, function (& $value) { $value *= $value; });
// => [1,4,9]
?>
map
别名:collect
描述:通过映射列表中的每个值通过一个转换函数(迭代器)来生成一个新的值数组。如果传递了上下文对象,则迭代器绑定到该对象。每次迭代调用迭代器时都会传递三个参数:(元素、索引、列表)。如果列表是对象,则迭代器的参数将是(值、键、列表)。
参数
- list:可遍历的,要映射的项目列表
- iterator:可调用的,转换函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::map(list,iterator,context)
示例
<?php
_::map([1,2,3], function ($value) { return $value -1; });
// => [0,1,2]
?>
reduce
别名:inject, foldl
描述:也称为inject和foldl,reduce将值列表缩减为一个单一值。Memo是缩减的初始状态,每次迭代应该通过迭代器返回。迭代器传递四个参数:memo、值和迭代(或键)的索引,以及整个列表的引用。
参数
- list:可遍历的,要缩减的项目列表
- iterator:可调用的,缩减函数
- memo:混合型,缩减的初始状态
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::reduce(list,iterator,memo,context)
示例
<?php
$sum = _::reduce([1,2,3], function ($memo, $num) { return $memo + $num; }, 0);
// => 6
?>
reduceRight
别名:foldr
描述:reduce的右结合版本。
参数
- list:可遍历的,要缩减的项目列表
- iterator:可调用的,缩减函数
- memo:混合型,缩减的初始状态
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::reduceRight(list,iterator,memo,context)
示例
<?php
$list = [[0, 1], [2, 3], [4, 5]];
$flat = _::reduceRight($list, function ($a, $b) { return array_merge($a, $b); }, []);
// => [4,5,2,3,0,1]
?>
find
别名:detect
描述:遍历列表中的每个值,返回第一个通过真值测试(迭代器)的值,如果没有值通过测试则返回null。该函数一旦找到可接受元素就返回,并且不会遍历整个列表。
参数
- list:可遍历的,要迭代的项列表
- iterator:可调用的,真值测试函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::find(list,iterator,context)
示例
<?php
$even = _::find([1,2,3,4,5,6], function ($num) { return $num % 2 == 0; });
// => 2
?>
filter
别名:select
描述:遍历列表中的每个值,返回所有通过真值测试(迭代器)的值数组。如果没有提供迭代器,则每个值都将被评估为布尔值。
参数
- list:可遍历的,要过滤的项列表
- iterator:可调用的,过滤函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::filter(list,iterator,context)
示例
<?php
$evens = _::filter([1,2,3,4,5,6], function ($num) { return $num % 2 == 0; });
// => [2,4,6]
?>
where
描述:遍历列表中的每个值,返回一个包含所有匹配properties中列出的键值对的值的数组。
参数
- list:可遍历的,要过滤的项列表
- properties:可遍历的,每个过滤项必须匹配的键值对
原型
_::where(list,properties)
示例
<?php
$people = [
['name' => 'Jack Nicholson', 'born' => 1937, 'profession' => 'actor'],
['name' => 'Morgan Freeman', 'born' => 1937, 'profession' => 'actor'],
['name' => 'Leonardo Dicaprio', 'born' => 1974, 'profession' => 'actor'],
['name' => 'Nathalie Portman', 'born' => 1981, 'profession' => 'actor'],
['name' => 'Ridley Scott', 'born' => 1937, 'profession' => 'producer'],
];
$actorsBornIn1937 = _::where($people, ['born' => 1937, 'profession' => 'actor']);
// => Jack Nicholson & Morgan Freeman
?>
findWhere
描述:遍历列表并返回第一个匹配properties中列出的所有键值对的值。
参数
- list:可遍历的,要过滤的项列表
- properties:可遍历的,每个过滤项必须匹配的键值对
原型
_::findWhere(list,properties)
示例
<?php
$people = [
['name' => 'Jack Nicholson', 'born' => 1937, 'profession' => 'actor'],
['name' => 'Morgan Freeman', 'born' => 1937, 'profession' => 'actor'],
['name' => 'Leonardo Dicaprio', 'born' => 1974, 'profession' => 'actor'],
['name' => 'Nathalie Portman', 'born' => 1981, 'profession' => 'actor'],
['name' => 'Ridley Scott', 'born' => 1937, 'profession' => 'producer'],
];
$actor = _::findWhere($people, ['born' => 1937, 'profession' => 'actor']);
// => Jack Nicholsonn
?>
reject
描述:返回列表中不通过真值测试(迭代器)的元素。filter的相反操作。
参数
- list:可遍历的,要过滤的项列表
- iterator:可调用的,真值测试函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::reject(list,iterator,context)
示例
<?php
$odds = _::reject([1,2,3,4,5,6], function ($num) { return $num % 2 == 0; });
// => [1,3,5]
?>
every
别名:all
描述:如果列表中的所有值都通过迭代器真值测试,则返回true。如果找到false元素,则短路并停止遍历列表。
参数
- list:可遍历的,要过滤的项列表
- iterator:可调用的,真值测试函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::every(list,iterator,context)
示例
<?php
_::every([true, 1, null, 'yes']);
// => false
?>
some
别名:any
描述:如果列表中的任何值通过迭代器真值测试,则返回true。如果找到true元素,则短路并停止遍历列表。
参数
- list:可遍历的,要过滤的项列表
- iterator:可调用的,真值测试函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::some(list,iterator,context)
示例
<?php
_::some([null, 0, 'yes', false]);
// => true
?>
contains
别名:includes
描述:如果值存在于列表中,则返回true。
参数
- list:可遍历的,项列表
- value:混合型,要查找的值
- strict:布尔型,值的类型也用于比较
原型
_::contains(list,value,strict)
示例
<?php
_::contains([1,2,3], 3);
// => true
?>
invoke
描述:在列表的每个值上调用名为methodName的方法。传递给invoke的任何额外参数都将转发到方法调用。如果列表项是数组(而不是对象),可以使用ArrayObject中的方法(如asort)。如果在迭代过程中当前项上找不到要调用的方法,则该项将被保留不变。
参数
- list:可遍历的,要在其上调用方法/函数的项列表
- methodName:可调用的,字符串,要调用的方法名称或闭包
- arguments:数组,方法的参数
原型
_::invoke(list,methodName,arguments)
示例
<?php
_::invoke([[5, 1, 7], [3, 2, 1]], 'sort');
// => [[1, 5, 7], [1, 2, 3]
?>
pluck
描述:这是map最常见用例的便利版本:提取每个项目的属性值列表。
参数
- list:可遍历的,项列表
- propertyName:字符串,从每个项中提取的属性名称
原型
_::pluck(list,propertyName)
示例
<?php
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'larry', 'age' => 50],
['name' => 'curly', 'age' => 60]
];
_::pluck($stooges, 'name');
// => ['moe','larry','curly']
?>
max
描述:返回列表中的最大值。如果传递了迭代器,则将对其中的每个值使用它,以生成用于对值进行排序的准则。
参数
- list:可遍历的,项列表
- iterator:可调用的,可选的,比较函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::max(list,iterator,context)
示例
<?php
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'larry', 'age' => 50],
['name' => 'curly', 'age' => 60]
];
_::max($stooges, function($stooge) { return $stooge['age']; });
// => 60
?>
min
描述:返回列表中的最小值。如果传递了迭代器,则将对其中的每个值使用它,以生成用于对值进行排序的准则。
参数
- list:可遍历的,项列表
- iterator:混合型,无描述...
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::min(list,iterator,context)
示例
<?php
$numbers = [10, 5, 100, 2, 10000];
_::min($numbers);
// => 2
?>
sortBy
描述:返回一个按通过迭代器运行每个值的结果按升序排序的(稳定)列表副本。如果出错,则返回NULL。
参数
- list:可遍历的,要排序的项列表
- iterator:可调用的,生成用于排序项的准则的函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::sortBy(list,iterator,context)
示例
<?php
_::sortBy([1, 2, 3, 4, 5, 6], function($num) { return sin($num); });
// => [5, 4, 6, 3, 1, 2]
?>
indexBy
描述: 给定一个列表和一个迭代器函数,该函数为列表中的每个元素返回一个键(或属性名),返回一个具有每个项目索引的对象。就像groupBy,但是当你知道你的键是唯一的时候。
参数
- list: 可遍历的,要索引的项目列表
- iterator: 可调用对象,标量,生成键或属性名的函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::indexBy(list,iterator,context)
示例
<?php
$stooges = [
['name' => 'moe', 'age' => 40],
['name' => 'larry', 'age' => 50],
['name' => 'curly', 'age' => 60]
];
_::indexBy($stooges, 'age');
// => [
// "40" => ['name' => 'moe', 'age' => 40],
// "50" => ['name' => 'larry', 'age' => 50],
// "60" => ['name' => 'curly', 'age' => 60]
// ]
?>
groupBy
描述: 将集合分割成集合,按迭代器运行每个值的返回结果分组。如果迭代器是一个字符串而不是一个函数,则按迭代器命名的属性对每个值进行分组。
参数
- list: 可遍历的,要分组的项目列表
- iterator: 可调用对象,标量,生成键或属性名的函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::groupBy(list,iterator,context)
示例
<?php
_::groupBy([1.3, 2.1, 2.4], function($num) { return floor($num); });
// => [1 => [1.3], 2 => [2.1, 2.4]]
$values = [
['val' => 'one', 'length' => 3],
['val' => 'two', 'length' => 3],
['val' => 'three', 'length' => 5]
];
_::groupBy($values, 'length');
// => [3 => [['val' => 'one', 'lenght' => 3], ['val' => 'two', 'length' => 3], 5 => [['val' => 'three', 'length' => 5]]]
?>
countBy
描述: 将列表排序成组并返回每组中对象的数量。类似于groupBy,但是返回的不是值的列表,而是该组中值的数量。
参数
- list: 可遍历的,要分组和计数的项目列表
- iterator: 可调用对象,标量,生成键或属性名的函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::countBy(list,iterator,context)
示例
<?php
_::countBY([1, 2, 3, 4, 5], function($num) {
return $num % 2 == 0 ? 'even' : 'odd';
});
// => ['odd' => 3, 'even' => 2]
?>
shuffle
描述: 返回列表的随机副本。
参数
- list: 可遍历的,要打乱顺序的项目列表
原型
_::shuffle(list)
示例
<?php
_::shuffle([1, 2, 3, 4, 5, 6]);
// => [4, 1, 6, 3, 5, 2]
?>
sample
描述: 从列表中生成随机样本。传递一个数字来返回列表中的n个随机元素。否则将返回一个随机元素。
参数
- list:可遍历的,项列表
- n: int,可选的,要选择的项目数量
原型
_::sample(list,n)
示例
<?php
_::sample([1, 2, 3, 4, 5, 6]);
// => 4
_::sample([1, 2, 3, 4, 5, 6], 3);
// => [1, 6, 2]
?>
toArray
描述: 从列表创建一个真实数组(任何可迭代的)。此方法也将接受标量,如字符串、数字,甚至是null,并将它们转换为数组,例如Underscore::toArray(null)是[],尽管Underscore::toArray('a')是['a']。
参数
- list:可遍历的,项列表
原型
_::toArray(list)
示例
<?php
$object = new stdClass;
$object->one = 1;
$object->two = 2;
$object->three = 3;
_::toArray($object);
// => ['one' => 1, 'two' => 2, 'three' => 3]
_::toArray(null);
// => []
_::toArray("hello");
// => ["hello"]
?>
size
描述: 返回列表中的值的数量。此方法也将接受标量,如字符串、数字,甚至是null或资源,但将返回1。
参数
- list:可遍历的,项列表
原型
_::size(list)
示例
<?php
$object = new stdClass;
$object->one = 1;
$object->two = 2;
$object->three = 3;
_::size($object);
// => 3
?>
未分类
partition
描述: 将集合分割成两个数组:一个其元素都满足给定谓词,另一个其元素都不满足谓词。
参数
- list:可遍历的,项列表
- iterator: 可调用对象,谓词
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::partition(list,iterator,context)
示例
<?php
_::partition([0, 1, 2, 3, 4, 5], function($num) { return $num % 2 != 0; });
// => [[1, 3, 5], [0, 2, 4]]
?>
now
描述: 返回当前时间的整数时间戳。
参数
原型
_::now()
数组函数
- first
- initial
- last
- rest
- compact
- flatten
- without
- uniq
- union
- intersection
- difference
- zip
- obj
- indexOf
- lastIndexOf
- sortedIndex
- range
first
别名: head, take
描述: 返回数组的第一个元素。传递n将返回数组的第一个n个元素。传递guard将强制返回值是数组。
参数
- array: 可遍历的,项目列表
- n: int,可选的,要选择的项目数量
- guard: bool,可选的,true表示总是返回数组
原型
_::first(array,n,guard)
initial
描述: 返回数组中除了最后一个条目之外的所有内容。传递n将排除结果中的最后一个n个元素。传递guard将强制返回值是数组。
参数
- array: 可遍历的,项目列表
- n: int,可选的,要排除的元素数量
- guard: bool,可选的,true表示总是返回数组
原型
_::initial(array,n,guard)
last
描述: 返回数组的最后一个元素。传递n将返回数组的最后一个n个元素。传递guard将强制返回值是数组。
参数
- array: 可遍历的,项目列表
- n: int,可选的,要选择的项目数量
- guard: bool,可选的,true表示总是返回数组
原型
_::last(array,n,guard)
rest
别名: tail, drop
描述: 返回数组中的其余元素。传递一个索引来返回从该索引开始的数组值。传递guard将强制返回值是数组。
参数
- array: 可遍历的,项目列表
- 索引: int, 可选,从哪个索引开始选取项目
- guard: bool,可选的,true表示总是返回数组
原型
_::rest(array,index,guard)
compact
描述:返回一个删除了所有假值的数组的副本。在PHP中,false、null、0、""、array()和"0"都是假值。
参数
- array: 可遍历的,项目列表
原型
_::compact(array)
flatten
描述:将嵌套数组(可以是任何深度)展平。如果传入 shallow,则数组只会展平一个层级。
参数
- array: 可遍历的,项目列表
- shallow: bool, 可选,如果为true,则只在一个层级上展平
原型
_::flatten(array,shallow)
without
描述:返回一个删除了所有指定值的数组的副本。
参数
- array: 可遍历的,项目列表
- values: array,mixed, 多个,要排除的值
原型
_::without(array,values)
uniq
别名: unique
描述:产生一个无重复版本的数组,使用 === 来测试对象相等性。如果你事先知道数组已经排序,传递 true 给 isSorted 将运行一个更快的算法。如果你想根据转换计算唯一项,传递一个迭代函数。警告:此函数的圈复杂度至少是二次的!与大型数组(>1000项)一起使用可能会非常慢且消耗内存。
参数
- array: 可遍历的,项目列表
- isSorted: bool, 可选,如果列表已排序,使用更快算法
- iterator: callable, 可选,如果需要,比较函数
- context:对象,可选的,如果提供,将成为迭代器的作用域
原型
_::uniq(array,isSorted,iterator,context)
union
描述:计算传入数组的并集:存在于一个或多个数组中的唯一项列表,按顺序排列。
参数
- array: 可遍历的,多个,要连接的数组
原型
_::union(array)
intersection
描述:计算所有数组的交集列表。结果中的每个值都存在于每个数组中。
参数
- array: 可遍历的,多个,要交集的数组
原型
_::intersection(array)
difference
描述:类似于 without,但返回来自数组的值,这些值不在其他数组中。
参数
- array: 可遍历的,多个,要差分的数组
原型
_::difference(array)
zip
描述:将每个数组的值与对应位置的值合并在一起。当您有通过匹配数组索引协调的不同数据源时非常有用。
参数
- array: 可遍历的,多个,要压缩的数组
原型
_::zip(array)
obj
描述:将数组转换为对象。传递一个包含 [key, value] 对的单个数组列表,或者一个键列表和一个值列表。如果存在重复键,则最后一个值获胜。
参数
- list: array, 属性
- values: array, 可选,值,如果不提供,则使用 $list 中的每个项作为一对
原型
_::obj(list,values)
indexOf
描述:返回值在数组中的索引,如果值不在数组中,则返回 -1。此方法内部使用 array_search,并且没有针对长数组二分搜索进行优化。
参数
- array: 可遍历的,项目列表
- item: mixed, 要查找的值
原型
_::indexOf(array,item)
lastIndexOf
描述:返回值在数组中最后一次出现的索引,如果值不在数组中,则返回 -1。此方法内部使用 array_keys,并且没有针对长数组二分搜索进行优化。
参数
- array: 可遍历的,项目列表
- item: mixed, 要查找的值
原型
_::lastIndexOf(array,item)
sortedIndex
描述:使用二分搜索确定值应在列表中插入的索引以保持列表的排序顺序。如果传递了迭代器,它将用于计算每个值的排序排名,包括您传递的值。迭代器也可以是按排序的属性名称的字符串名称(例如,长度)。
参数
- array: 可遍历的,项目列表
- value: mixed, 要找到索引的值
- iterator: callable, scalar, 可选,评估值的函数或属性的名称
- context: object, 可选,如果提供,将成为 $iterator 的上下文
原型
_::sortedIndex(array,value,iterator,context)
range
描述: 一个创建灵活编号整数列表的函数,方便在each和map循环中使用。start参数如果省略,默认为0;step参数默认为1。返回从start到stop的整数列表,步长为step(增加或减少),不包括stop。此方法使用range函数内部实现。
参数
- start: int, 起始索引
- stop: int, 可选,结束索引
- step: int, 可选,迭代步长
原型
_::range(start,stop,step)
函数(嗯,嗯)函数
wrap
描述: 将第一个函数包裹在包装函数内部,将其作为第一个参数传递。这允许包装函数在函数运行前后执行代码,调整参数并根据条件执行。参数将传递给包装函数。
参数
- function: 可调用对象,函数
- wrapper: 混合类型,无描述...
原型
_::wrap(function,wrapper)
negate
描述: 返回一个取反后的谓词函数的新版本。
参数
- function: 可调用对象,函数
原型
_::negate(function)
compose
描述: 返回一系列函数的组合,其中每个函数都消费下一个函数的返回值。用数学术语来说,组合函数f()、g()和h()产生f(g(h()))。
参数
- functions: 可调用对象,多个,要组合的函数
原型
_::compose(functions)
after
描述: 创建一个函数版本,该函数将在被调用count次之后才会运行。请注意,该函数不应接收参数。
参数
- count: int, 函数将被执行的次数
- function: 可调用对象,函数
原型
_::after(count,function)
before
描述: 创建一个函数版本,该函数最多只能被调用count次。当达到count时,返回最后一次函数调用的结果,并将其缓存。
参数
- count: int, 函数将被执行的次数
- function: 可调用对象,函数
原型
_::before(count,function)
once
描述: 创建一个只能被调用一次的函数版本。重复调用修改后的函数将没有效果,返回原始调用的值。对于初始化函数很有用,而不是必须设置一个布尔标志然后稍后检查它。
参数
- function: 可调用对象,函数
原型
_::once(function)
partial
描述: 通过填充任何数量的参数来部分应用一个函数。在部分构造时,不需要所有参数都存在。
参数
- function: 可调用对象,函数
- arguments: array,mixed, 多个,参数
原型
_::partial(function,arguments)
bind
描述: 将函数绑定到一个对象,意味着每次调用该函数时,$this的值将是该对象。可选地,传递参数给函数以预填充它们,也称为部分应用。
参数
- function: closure, 函数
- object: object, 绑定闭包的对象
原型
_::bind(function,object)
bindClass
描述: 将函数绑定到一个类,意味着每次调用该函数时,self或static的值将是该类。可选地,传递参数给函数以预填充它们,也称为部分应用。
参数
- function: closure, 函数
- class: object,string, 要绑定闭包的对象或类名
原型
_::bindClass(function,class)
bindAll
描述: 将指定的多个方法绑定到对象上,这些方法在调用时将在该对象的上下文中运行。对于将用作事件处理器的函数来说非常方便,否则这些函数的调用将带有相当无用的this。methodNames是必需的。请记住,PHP不允许像方法一样调用闭包属性值,例如,给定$o是stdClass的实例,$o->myClosure()将不起作用。
参数
- object: object, 对象
- methodNames: array,callable, 多个,要附加的函数
原型
_::bindAll(object,methodNames)
memoize
描述:通过缓存计算结果来记忆化给定的函数。对于加快慢速运行的计算非常有用。如果传入了一个可选的hashFunction,它将用于根据原始函数的参数计算存储结果的哈希键。默认的hashFunction只是将记忆化函数的第一个参数作为键。
参数
- 函数:可调用,要记忆化的函数
- hashFunction:可调用,可选,如果提供,将用于哈希$function的结果
- cache:数组,ArrayAccess,可选,函数结果的缓存
原型
_::memoize(function,hashFunction,cache)
throttle
描述:创建并返回传递的函数的新、节流版本,当多次调用时,实际上最多每wait毫秒调用一次原始函数。对于速率限制比你能跟上更快发生的事件非常有用。
参数
- function: 可调用对象,函数
- wait:int,每次调用之间等待的时间(以毫秒为单位)
原型
_::throttle(function,wait)
call
描述:调用(执行)给定的函数,可选地绑定到$context,使用给定的参数并返回其结果。
参数
- function: 可调用对象,函数
- context:对象,函数的上下文
原型
_::call(function,context)
apply
描述:调用(执行)给定的函数,可选地绑定到$context,使用给定的参数列表并返回其结果。
参数
- function: 可调用对象,函数
- context:对象,函数的上下文
- 参数:列表,参数
原型
_::apply(function,context,arguments)
对象函数
- keys
- values
- pairs
- invert
- functions
- extend
- pick
- omit
- defaults
- duplicate
- tap
- has
- property
- matches
- get
- set
- is
- isEqual
- isEmpty
- isArray
- isObject
- isFunction
- isNumber
- isInteger
- isFloat
- isString
- isDate
- isRegExp
- isFinite
- isNaN
- isBoolean
- isNull
- isScalar
- isTraversable
- isResource
- typeOf
keys
描述:检索对象属性的所有名称。
参数
- 对象:可遍历,提取键的列表
原型
_::keys(object)
values
描述:返回对象属性的所有值。
参数
- 对象:可遍历,提取值的列表
原型
_::values(object)
pairs
描述:将对象转换为[key, value]对列表。
参数
- 对象:可遍历,要转换为对的对象列表
原型
_::pairs(object)
invert
描述:返回对象的副本,其中键已变为值,值变为键。为此,你的对象的所有值都应该是唯一的,并且可以序列化为字符串。
参数
- 对象:可遍历,要反转的对象
原型
_::invert(object)
functions
别名:方法
描述:返回对象中每个方法名称的排序列表——也就是说,对象的每个函数属性的名称。
参数
- 对象:可遍历,对象,从中提取函数的对象
原型
_::functions(object)
extend
描述:将源对象中的所有属性复制到目标对象中,并返回目标对象。它是按顺序的,所以最后一个源将覆盖前面参数中具有相同名称的属性。
参数
- destination:对象,数组,目标对象
- sources:对象,数组,多个,源对象
原型
_::extend(destination,sources)
pick
描述:返回对象的副本,只包含白名单键(或有效键数组)的值。如果提供对象是对象(在广义上),则返回stdClass实例,否则返回数组。
参数
- object:可遍历,要选择属性的列表
- keys:数组,标量,多个,要选择的键
原型
_::pick(object,keys)
omit
描述:返回一个对象的副本,过滤掉被列入黑名单的键(或键数组)。如果提供的是对象(广义上),则返回stdClass实例,否则返回数组。
参数
- object:可遍历的,要排除键的对象
- keys:数组,标量,多个,要排除的键
原型
_::omit(object,keys)
defaults
描述:用默认对象的值填充对象的null属性,并返回对象。属性一被填充,进一步的默认值将不再起作用。
参数
- object:可遍历的,要填充的对象
- defaults:可遍历的,多个,将填充对象缺失键的对象或数组
原型
_::defaults(object,defaults)
duplicate
别名:copy
描述:创建对象的浅拷贝副本。任何嵌套的对象或数组将通过引用复制,而不是复制。此方法可以安全地与数组一起使用。
参数
- object:可遍历的,要克隆的对象
原型
_::duplicate(object)
tap
描述:调用拦截器并使用对象作为参数,然后返回对象。此方法的主要目的是“介入”方法链,以便在链的中间结果上执行操作。
参数
- object:混合类型,对象
- interceptor:可调用类型,带有对象作为参数的函数
原型
_::tap(object,interceptor)
has
描述:判断对象是否对于给定的键有非null的值。优先考虑数组的getter($obj[$key]优先于 $obj-> $key)。'null'与'undefined'等价。
参数
- object:对象,数组,对象
- key:标量,键
原型
_::has(object,key)
property
描述:返回一个函数,该函数将返回任何传入对象的键属性。
参数
- key:字符串,整数,要获取的键或偏移量
原型
_::property(key)
matches
描述:返回一个谓词函数,它将告诉你传入的对象是否包含在properties中存在的所有键/值属性。
参数
- properties:可遍历的,谓词使用的属性
原型
_::matches(properties)
get
描述:获取对象的键值。如果这样的键不存在,则返回默认值。如果对象既不是数组也不是对象,则返回对象本身。
参数
- object:对象,数组,对象
- key:标量,键
- default:混合类型,可选,如果键不存在,则返回默认值
原型
_::get(object,key,default)
set
描述:设置对象的键值。如果对象既不是数组也不是对象,则返回对象本身。
参数
- object:混合类型,引用,对象
- key:标量,键
- value:混合类型,要设置的值
原型
_::set(object,key,value)
is
描述:判断对象是否是给定的类型、类或伪类型。你可以一次性传递多个类型(使用类型数组或通过传递多个类型作为参数),如果对象匹配这些类型中的任何一个,则Underscore::is将返回true。
参数
- object:混合类型,对象
- types:字符串,要测试的类型
原型
_::is(object,types)
isEqual
描述:在两个对象之间执行优化的深度比较,以确定它们是否应该被视为相等。
参数
- object:混合类型,第一个对象
- other:混合类型,第二个对象
原型
_::isEqual(object,other)
isEmpty
描述:如果对象不包含任何值(没有可枚举的自有属性),则返回true。这也适用于标量。
参数
- object:混合类型,对象
原型
_::isEmpty(object)
isArray
描述:如果对象是数组或可像数组一样使用,则返回true。如果可选的native参数设置为true,则仅在对象是本地数组时返回true。
参数
- object:混合类型,对象
- native:布尔类型,可选,如果为true,则不将ArrayAccess实例视为数组
原型
_::isArray(object,native)
isObject
描述:如果值是对象,则返回true。
参数
- object:混合类型,对象
原型
_::isObject(object)
isFunction
描述:如果对象是函数,则返回true。
参数
- object:混合类型,对象
原型
_::isFunction(object)
isNumber
别名:isNum,isNumeric
描述:如果对象是数字,则返回true。如果可选的native参数设置为true,则仅在对象是本地int或float时返回true。
参数
- object:混合类型,要选择属性的对象
- native:布尔类型,可选,如果为true,则不将SplType实例视为数字
原型
_::isNumber(object,native)
isInteger
别名:isInt
描述:如果对象是整数,则返回true。如果可选的原生参数设置为true,则只有当对象是原生整型时才返回true。
参数
- object:混合类型,对象
- native:bool,可选,如果为true,则不考虑SplInt实例作为整数
原型
_::isInteger(object,native)
isFloat
描述:如果对象是浮点数,则返回true。如果可选的原生参数设置为true,则只有当对象是原生浮点数时才返回true。
参数
- object:混合类型,对象
- native:bool,可选,如果为true,则不考虑SplFloat实例作为整数
原型
_::isFloat(object,native)
isString
描述:如果对象是字符串,则返回true。如果对象具有__toString方法,则它也将被视为字符串。如果可选的原生参数设置为true,则只有当对象是原生字符串时才返回true。
参数
- object:混合类型,对象
- native:bool,可选,如果为true,则不考虑具有toString或SplString的对象作为字符串
原型
_::isString(object,native)
isDate
描述:如果对象是DateTime实例,则返回true。strtotime函数可以理解的一切也被视为日期。
参数
- object:混合类型,对象
原型
_::isDate(object)
isRegExp
描述:如果对象是有效的正则表达式(PCRE),则返回true。
参数
- object:混合类型,对象
原型
_::isRegExp(object)
isFinite
描述:如果对象是有限数字,则返回true。
参数
- object:混合类型,对象
原型
_::isFinite(object)
isNaN
描述:如果对象是NaN(非数字),则返回true。
参数
- object:混合类型,对象
原型
_::isNaN(object)
isBoolean
别名:isBool
描述:如果对象是布尔值,则返回true。如果可选的原生参数设置为true,则只有当对象是原生布尔值时才返回true。
参数
- object:混合类型,对象
- native:bool,可选,如果为true,则不考虑SplBool实例作为整数
原型
_::isBoolean(object,native)
isNull
描述:如果对象是Null,则返回true。
参数
- object:混合类型,对象
原型
_::isNull(object)
isScalar
描述:如果$object是标量,则返回true。如果可选的原生参数设置为true,则只有当对象是原生标量时才返回true。
参数
- object:混合类型,对象
- native:mixed,无描述...
原型
_::isScalar(object,native)
isTraversable
描述:如果对象可以用foreach循环遍历,则返回true。
参数
- object:混合类型,对象
原型
_::isTraversable(object)
isResource
描述:如果对象是资源(如fopen返回的文件句柄),则返回true。
参数
- object:混合类型,对象
原型
_::isResource(object)
typeOf
别名:getType
描述:获取给定对象的类或其原生类型。此函数聚合了大多数is*函数,可以视为PHP原生函数gettype的更精确版本。类参数让您了解对象的准确类型,如果设置为false,则对于对象返回'TYPE_OBJECT'。否则将返回Underscore::TYPE_*常量之一。
参数
- object:混合类型,对象
- class:bool,可选,如果为true,则返回$object的确切类而不是'TYPE_OBJECT'
原型
_::typeOf(object,class)
实用函数
identity
描述:返回用作参数的相同值。在数学中:f(x) = x。此函数看似无用,但在Underscore中用作默认迭代器。
参数
- value:mixed,要返回的值
原型
_::identity(value)
constant
描述:创建一个函数,该函数返回用作_::constant参数的相同值。
参数
- value:mixed,值
原型
_::constant(value)
noop
描述:无论传递给它的参数如何,都返回undefined。作为可选回调参数的默认值很有用。
参数
原型
_::noop()
times
描述:n次调用给定的迭代器函数。每次迭代器调用都带有索引参数。返回包含返回值的数组。
参数
- n:int,$iterator将运行的时间次数
- iterator:callable,迭代器函数
- context: object, 可选,如果提供,将成为 $iterator 的上下文
原型
_::times(n,iterator,context)
random
描述:返回介于min和max之间(包括)的随机整数。如果您只传递一个参数,则将返回介于0和该数字之间的数字。
参数
- min: int, 下限(如果$max为null,则取最大值,此时下限为0)
- max: int, 可选的上限
原型
_::random(min,max)
mixin
描述: 允许您使用自己的实用函数扩展Underscore。传递一个包含数组('name' => function)定义的哈希表,以便将您的函数添加到Underscore库和OOP包装器中。
参数
- functions: array, 要添加到Underscore类中的函数集合
原型
_::mixin(functions)
provide
描述: 返回任何Underscore方法(即使是用户定义的)的可调用版本。
参数
- method: string, 多个,Underscore的方法名
原型
_::provide(method)
uniqueId
描述: 生成一个伪唯一ID。
参数
- prefix: string, 可选,ID的前缀
原型
_::uniqueId(prefix)
escape
描述: 对字符串进行转义,以便将其插入HTML中,替换&、<、>、"、'和/字符。
参数
- string: string, 要转义的字符串
原型
_::escape(string)
unescape
描述: escape的反操作,将&、<、>、"、'和/替换为它们的未转义对应项。
参数
- string: string, 要取消转义的字符串
原型
_::unescape(string)
result
描述: 如果命名属性的值是函数,则以对象为上下文调用它;否则,返回它。
参数
- object: object,array, 对象或数组
- property: scalar, 要获取的属性
原型
_::result(object,property)
lastly
描述: 等同于finally关键字(自PHP 5.5以来可用)。
参数
- function: callable, 一个函数
- finally: callable, 另一个函数,将在$function之后始终执行
- context: object, 函数的上下文
原型
_::lastly(function,finally,context)
template
描述: 将PHP模板编译成可以用于渲染的函数。对于从JSON数据源渲染复杂的HTML片段非常有用。模板函数既可以插值变量,使用<%= ... %>,也可以执行任意PHP代码,使用<% ... %>。如果您想插值一个值,并使其成为HTML转义,请使用<%- ... %>。当您评估模板函数时,请传入一个具有与模板的自由变量相对应的属性的数据对象。如果您正在编写一次性代码,可以将数据对象作为模板的第二个参数传递,以立即渲染而不是返回一个模板函数。设置参数应包含任何应该覆盖的Underscore::$templateSettings的哈希表。如果您不喜欢ERB样式的定界符,可以更改Underscore的模板设置,使用不同的符号来设置插值代码。定义一个插值正则表达式来匹配应该直接插值的表达式,一个转义正则表达式来匹配应该转义后插入的表达式,以及一个评估正则表达式来匹配应该在不插入到结果字符串中评估的表达式。您可以定义或省略这三个中的任何一个或多个。
参数
- templateString: string, 模板缓冲区
- data: array,object, 可选,如果提供,将使用此数组作为变量计算模板
- settings: array, 可选,如果提供,将覆盖默认匹配器(请谨慎使用)
原型
_::template(templateString,data,settings)
链式调用
chain
描述: 返回一个包装的对象。调用此对象的方法将继续返回包装的对象,直到使用value。调用链将导致所有未来的方法调用都返回包装的对象。当您完成计算后,使用value检索最终值。
参数
- object: mixed, 链接的初始状态
原型
_::chain(object)
类伪造
forge
别名: 策略
描述: 在运行时创建新的混入。实现基于Bob Weinand关于Scala traits在PHP中的实现想法(请参阅此处 https://gist.github.com/bwoebi/7319798)。此方法分解$classname以创建一个新的类,使用'\with'作为特质的分隔符。
参数
- classname: string, 要构造的类
原型
_::forge(classname)