street; } public function getCity() : ?string { return $this->city; } public function getCountry() : ?string { return $this->country; } public function getState() : ?string { return $this->state; } public function getPostalCode() : ?string { return $this->postalCode; } public function withStreet(?string $street) : self { $newAddress = self::createBuilder() ->clone($this) ->setStreet($street) ->build(); return $newAddress; } public function withCity(?string $city) : self { $newAddress = self::createBuilder() ->clone($this) ->setCity($city) ->build(); return $newAddress; } public function withCountry(?string $country) : self { $newAddress = self::createBuilder() ->clone($this) ->setCountry($country) ->build(); return $newAddress; } public function withState(?string $state) : self { $newAddress = self::createBuilder() ->clone($this) ->setState($state) ->build(); return $newAddress; } public function withPostalCode(?string $postalCode) : self { $newAddress = self::createBuilder() ->clone($this) ->setPostalCode($postalCode) ->build(); return $newAddress; } public static function fromEntity(Entity $entity, string $field) : self { $obj = new self(); $obj->street = $entity->get($field . 'Street'); $obj->city = $entity->get($field . 'City'); $obj->country = $entity->get($field . 'Country'); $obj->state = $entity->get($field . 'State'); $obj->postalCode = $entity->get($field . 'PostalCode'); return $obj; } public static function fromRaw(array $raw) : self { $obj = new self(); $obj->street = $raw['street']; $obj->city = $raw['city']; $obj->country = $raw['country']; $obj->state = $raw['state']; $obj->postalCode = $raw['postalCode']; return $obj; } public static function createBuilder() : AddressBuilder { return new AddressBuilder(); } }