| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | <?php/* * By adding type hints and enabling strict type checking, code can become * easier to read, self-documenting and reduce the number of potential bugs. * By default, type declarations are non-strict, which means they will attempt * to change the original type to match the type specified by the * type-declaration. * * In other words, if you pass a string to a function requiring a float, * it will attempt to convert the string value to a float. * * To enable strict mode, a single declare directive must be placed at the top * of the file. * This means that the strictness of typing is configured on a per-file basis. * This directive not only affects the type declarations of parameters, but also * a function's return type. * * For more info review the Concept on strict type checking in the PHP track * <link>. * * To disable strict typing, comment out the directive below. */declare(strict_types=1);class Allergies {  /**   * @var \Allergen[]   */  private array $allergies = [];  public function __construct(int $score) {    $score &= Allergen::CATS * 2 - 1;    $id = Allergen::EGGS;    while ($id <= Allergen::CATS) {      if ($id & $score) {        $this->allergies[] = new Allergen($id);      }      $id <<= 1;    }  }  public function isAllergicTo(Allergen $allergen): bool {    return in_array($allergen, $this->allergies);  }  /**   * @return \Allergen[]   */  public function getList(): array {    return $this->allergies;  }}class Allergen {  public const EGGS = 1;  public const PEANUTS = 2;  public const SHELLFISH = 4;  public const STRAWBERRIES = 8;  public const TOMATOES = 16;  public const CHOCOLATE = 32;  public const POLLEN = 64;  public const CATS = 128;  private int $id;  public function __construct(int $id) {    $this->id = $id;  }  public static function allergenList(): array {    return [];  }  public function getScore(): int {    return $this->id;  }}
 |