clouding / has-attributes
一个用于添加类属性的特质
v0.1.1
2019-03-25 07:00 UTC
Requires
- php: >=7.2
Requires (Dev)
- nunomaduro/collision: ^3.0
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-09-08 00:25:18 UTC
README
一个用于添加类属性的特质
特性
- 使用数组提供类属性。
- 定义严格的属性类型。
快速示例
只需使用 HasAttributes 特质并将键值数组传递给构造函数
class Post { use \Clouding\HasAttributes\HasAttributes; } $post = new Post([ 'title' => 'Hello', 'body' => 'World', ]); echo $post->title; // Hello echo $post->body; // World
安装
composer require clouding/has-attributes
用法
定义类型
使用 $define 声明来定义类型
require 'vendor/autoload.php'; interface Eatable {} class Pig implements Eatable { } class Zoo { use \Clouding\HasAttributes\HasAttributes; protected $define = [ 'name' => 'string', 'number' => 'int', 'animal' => Eatable::class, ]; } $zoo = new Zoo([ 'name' => 'Mike', 'number' => 100, 'animal' => new Pig(), ]); echo $zoo->name; // Mike echo $zoo->number; // 100 echo get_class($zoo->animal); // Pig
如果你声明了 $define 属性,它将严格检查类型
new Zoo(['name' => 999]); // InvalidArgumentException: [name => 999] value is not equal to define type [string]
并且不能设置未定义的键
new Zoo(['foo' => 'bar']); // InvalidArgumentException: Key [foo] is not defined
支持的 $define 类型
字符串int,integerbool,boolean对象数组real,float,double- 类,接口
设置属性
有多种方法可以设置属性
class Person { use \Clouding\HasAttributes\HasAttributes; } $person = new Person([ 'id' => 100, ]); $person->setAttributes([ 'name' => 'Marry', 'phone' => '0912345678' ]); $person->setAttribute('sex', 'female'); $person->age = 18; echo $person->id; // 100 echo $person->name; // Marry echo $person->phone; // 0912345678 echo $person->sex; // female echo $person->age; // 18
获取属性
class Person { use \Clouding\HasAttributes\HasAttributes; } $person = new Person([ 'id' => 100, 'name' => 'Jack', ]); echo $person->getAttribute('id'); // 100 echo $person->getAttribute('salary', 0); // 0 (if key not exists return default value) var_dump($person->getAttributes('id', 'name')); // ['id' => 100, 'name' => 'Jack'] var_dump($person->getAttributes(['id', 'name'])); // ['id' => 100, 'name' => 'Jack']