number = $number; } /** * Get a type. */ public function getType() : ?string { return $this->type; } /** * Get a number. */ public function getNumber() : string { return $this->number; } /** * Whether opted-out. */ public function isOptedOut() : bool { return $this->isOptedOut; } /** * Whether invalid. */ public function isInvalid() : bool { return $this->isInvalid; } /** * Clone with a type. */ public function withType(string $type) : self { $obj = $this->clone(); $obj->type = $type; return $obj; } /** * Clone set invalid. */ public function invalid() : self { $obj = $this->clone(); $obj->isInvalid = true; return $obj; } /** * Clone set not invalid. */ public function notInvalid() : self { $obj = $this->clone(); $obj->isInvalid = false; return $obj; } /** * Clone set opted-out. */ public function optedOut() : self { $obj = $this->clone(); $obj->isOptedOut = true; return $obj; } /** * Clone set not opted-out. */ public function notOptedOut() : self { $obj = $this->clone(); $obj->isOptedOut = false; return $obj; } /** * Create from a number. */ public static function fromNumber(string $number) : self { return new self($number); } /** * Create from a number and type. */ public static function fromNumberAndType(string $number, string $type) : self { return self::fromNumber($number)->withType($type); } private function clone() : self { $obj = new self($this->number); $obj->type = $this->type; $obj->isInvalid = $this->isInvalid; $obj->isOptedOut = $this->isOptedOut; return $obj; } }