什么是框架?!types

v0.4.1 2024-09-24 19:49 UTC

This package is auto-updated.

Last update: 2024-09-24 19:50:29 UTC


README

此库提供了一种流畅的接口来操作字符串、数组和数字。

安装

composer require wtframework/types

文档

此库中提供的每个类都是相关原生函数的包装器。方法名称主要使用原生函数名称,但去除了下划线和某些前缀,如 str*array*。大多数方法都是可链式的,即使从字符串切换到数组或反之亦然。

use function WTFramework\Types\arr;
use function WTFramework\Types\num;
use function WTFramework\Types\str;

str('reverse me')
->explode(' ')  // returns arr(['reverse', 'me'])
->reverse()
->implode(' '); // returns str('me reverse')


某些方法在适当的情况下默认不可链式。

str('example')
->len(); // returns 7


在这种情况下,可以通过引用传递一个最终的 $return 参数。默认返回值将被分配给此变量,并且方法将返回当前对象。

str('example')
->len(return: $length); // returns $this

// $length = 7


每个类都提供了一个 extract 方法来提取当前对象的克隆。

str('eXaMpLe')
->toupper()
->extract($uppercase)
->tolower()
->extract($lowercase);

// $uppercase = str('EXAMPLE');
// $lowercase = str('example');


StrNum 类提供了一个 echo 方法来输出当前值。此方法有可选的 $prefix$suffix 参数。

str('example')
->echo(
  prefix: 'this is an ',
  suffix: '.'
);

// this is an example.


虽然大多数方法名称基于原生函数名称,但在 Arr 类中有两个显著的例外:使用 advance 调用 next,使用 contains 调用 in_array

arr([1, 2, 3])->contains(1); // returns true
arr([1, 2, 3])->advance(); // advances the internal pointer


在适当的情况下,使用静态方法调用函数。这些是

use WTFramework\Types\Arr;
use WTFramework\Types\Num;
use WTFramework\Types\Str;

Str::httpbuildquery($data);
Str::unserialize($data);

Arr::fill($start_index, $count, $value);
Arr::range($start, $end);

Num::max(...$values);
Num::min(...$values);
Num::pi();


要返回当前值,可以调用 return 方法或作为函数调用对象。

str('example')->return(); // returns 'example'
arr([1, 2, 3])(); // returns [1, 2, 3]


StrNum 类实现了 Stringable,而 Arr 类实现了 ArrayAccessCountableIteratorSerializable

扩展库

要扩展库,可以使用静态 macro 方法,传入新方法名称和要调用的闭包。这对静态和非静态方法都适用。

use WTFramework\Types\Str;

Str::macro('camelCase', function ()
{

  return $this->ucwords()
  ->replace(' ', '')
  ->lcfirst();

});
// Returns 'camelCase'
str('camel case')->camelCase()();