commandstring / blood
处理血型的包
v2.1.1
2023-05-19 05:59 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.1
- squizlabs/php_codesniffer: ^3.7
README
血型的 composer 包(网站位于 gui 分支)
安装
composer require commandstring/blood
使用方法
创建血型
您可以使用 蛋白质、抗体 或 类型 创建血型对象
use CommandString\Blood\Blood; use CommandString\Blood\Enums\BloodType; use CommandString\Blood\Enums\Protein; $bloodFromType = new Blood(BloodType::A_POSITIVE); $bloodFromProteins = Blood::fromProteins(Protein::A, Protein::RH); $bloodFromAntibodies = Blood::fromAntibodies(Antibody::B, Antibody::RH);
检查血型间的兼容性
use CommandString\Blood\Blood; use CommandString\Blood\Enums\BloodType; use CommandString\Blood\Enums\Protein; $bloodType1 = new Blood(BloodType::A_POSITIVE); $bloodType2 = new Blood(BloodType::O_NEGATIVE); $bloodType1->canDonateTo($bloodType2); // false $bloodType1->canReceiveFrom($bloodType2); // true $bloodType2->canDonateTo($bloodType1); // true $bloodType2->canReceiveFrom($bloodType1); // false
获取蛋白质和抗体
use CommandString\Blood\Enums\Protein; /** * @var \CommandString\Blood\Blood $bloodType1 * @var Protein[] $proteins * @var Protein[] $antibodies */ $proteins = $bloodType1->getProteins(); $antibodies = $bloodType1->getAntibodies();
获取类型
use CommandString\Blood\Enums\BloodType; /** * @var \CommandString\Blood\Blood $bloodType1 * @var BloodType $type */ $type = $bloodType1->getType(); $type = $bloodType1->type;
示例脚本
<?php use CommandString\Blood\Blood; use CommandString\Blood\Enums\BloodType; require_once __DIR__ . '/vendor/autoload.php'; const ITEM_PREFIX = "* "; const H2 = "\n## "; const H3 = "\n### "; $forType = static function (BloodType $type): void { $blood = new Blood($type); echo H2 . "Blood Type: {$blood->getType()->value}\n"; // A+ echo H3 . "Proteins:\n"; foreach ($blood->getProteins() as $protein) { echo ITEM_PREFIX . "{$protein->value}\n"; } echo H3 . "Antibodies:\n"; foreach ($blood->getAntibodies() as $antibody) { echo ITEM_PREFIX . "{$antibody->value}\n"; } echo H3. "Can Donate To:\n"; foreach (BloodType::cases() as $type) { $toReceive = new Blood($type); echo $blood->canDonateTo($toReceive) ? ITEM_PREFIX . "{$toReceive->getType()->value}\n" : ''; } echo H3 . "Can Receive From:\n"; foreach (BloodType::cases() as $type) { $toDonate = new Blood($type); echo $blood->canReceiveFrom($toDonate) ? ITEM_PREFIX . "{$toDonate->getType()->value}\n" : ''; } }; $divider = "---\n"; foreach (BloodType::cases() as $type) { $forType($type); echo $divider; }
输出
血型:A-
蛋白质
- A
抗体
- B
- RH
可以捐献给
- A-
- A+
- AB-
- AB+
可以接收来自
- A-
- A+
- AB-
- AB+
是否为万能捐血者:否
是否为万能受血者:否
血型:A+
蛋白质
- A
- RH
抗体
- B
可以捐献给
- A+
- AB+
可以接收来自
- A+
- AB+
是否为万能捐血者:否
是否为万能受血者:否
血型:B-
蛋白质
- B
抗体
- A
- RH
可以捐献给
- B-
- B+
- AB-
- AB+
可以接收来自
- B-
- B+
- AB-
- AB+
是否为万能捐血者:否
是否为万能受血者:否
血型:B+
蛋白质
- B
- RH
抗体
- A
可以捐献给
- B+
- AB+
可以接收来自
- B+
- AB+
是否为万能捐血者:否
是否为万能受血者:否
血型:AB-
蛋白质
- A
- B
抗体
- RH
可以捐献给
- AB-
- AB+
可以接收来自
- AB-
- AB+
是否为万能捐血者:否
是否为万能受血者:否
血型:AB+
蛋白质
- A
- B
- RH
抗体
可以捐献给
- AB+
可以接收来自
- AB+
是否为万能捐血者:否
是否为万能受血者:是
血型:O-
蛋白质
抗体
- A
- B
- RH
可以捐献给
- A-
- A+
- B-
- B+
- AB-
- AB+
- O-
- O+
可以接收来自
- A-
- A+
- B-
- B+
- AB-
- AB+
- O-
- O+
是否为万能捐血者:是
是否为万能受血者:否
血型:O+
蛋白质
- RH
抗体
- A
- B
可以捐献给
- A+
- B+
- AB+
- O+
可以接收来自
- A+
- B+
- AB+
- O+