定制 paragonie/typed-arrays 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

paragonie/typed-arrays

Composer 安装命令:

composer require paragonie/typed-arrays

包简介

Strictly typed scalar arrays for PHP 8.3 and newer

README 文档

README

Build Status Latest Stable Version Latest Unstable Version License Downloads

Requires PHP 8.3. This is best described through example:

<?php
require_once 'vendor/autoload.php';

class Foo
{
    public function __construct(
        public readonly string⟦⟧ $foo,
        public readonly int⟦⟧ $bar
    ) {}
}

$x = new Foo(
    string⟦⟧('apple', 'bee'),
    int⟦⟧(4, 5, 120000),
);
var_dump($x->foo, $x->bar);
var_dump($x->foo[1]);

This should output the following:

object(string⟦⟧)#5 (2) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(3) "bee"
}
object(int⟦⟧)#6 (3) {
  [0]=>
  int(4)
  [1]=>
  int(5)
  [2]=>
  int(120000)
}
string(3) "bee"

If you try to pass an incorrect type, you'll get a TypeError:

<?php
declare(strict_types=1);
require_once 'vendor/autoload.php';

class Foo
{
    public function __construct(
        public readonly string⟦⟧ $foo
    ) {}
}

$x = new Foo(
    string⟦⟧('apple', 'bee', 25)
);
var_dump($x->foo, $x->bar);

Should produce:

Fatal error: Uncaught TypeError: string⟦⟧(): Argument #3 must be of type string, int given

What Is This Package Doing?

We are using Unicode characters ( and ) to create a class that implements ArrayAccess. All arguments to these types are then strictly typed.

In effect, we have turned a class into a typed array that your IDE will not complain about.

Does It Support Multi-Level Types? e.g. string⟦⟧⟦⟧

You betcha.

<?php
declare(strict_types=1);
require_once 'vendor/autoload.php';

class Bar
{
    public function __construct(
        public readonly string⟦⟧⟦⟧ $double,
    ) {}
}

$test = new Bar(string⟦⟧⟦⟧(
    string⟦⟧('test'),
    string⟦⟧('example'),
));
var_dump($test->double);

This will produce:

object(string⟦⟧⟦⟧)#7 (2) {
  [0]=>
  object(string⟦⟧)#5 (1) {
    [0]=>
    string(4) "test"
  }
  [1]=>
  object(string⟦⟧)#6 (1) {
    [0]=>
    string(7) "example"
  }
}

Does This Support Arrays of Classes?

Of course!

<?php
declare(strict_types=1);
require_once 'vendor/autoload.php';

class Foo {}

class Bar
{
    public function __construct(
        public readonly Foo⟦⟧ $example
    ) {}
}

$test = new Bar(new Foo⟦⟧(new Foo));
var_dump($test);

Output:

object(Bar)#2 (1) {
  ["example"]=>
  object(Foo⟦⟧)#5 (1) {
    [0]=>
    object(Foo)#6 (0) {
    }
  }
}

How Does This Create Types for My Classes?

See: the autoloader.

统计信息

  • 总下载量: 10
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 72
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 72
  • Watchers: 6
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: ISC
  • 更新时间: 2024-05-14

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固