处理血型的包

v2.1.1 2023-05-19 05:59 UTC

This package is auto-updated.

Last update: 2024-09-19 16:24:45 UTC


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+

是否为万能捐血者:否

是否为万能受血者:否