Make IPAddress typed and strict

* Added scalar typehints
* Added return statements
* Added strict declaration

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2018-01-13 21:46:27 +01:00 committed by Morris Jobke
parent 60f38d37fe
commit bb2938a47d
No known key found for this signature in database
GPG key ID: FE03C3A163FEDE68

View file

@ -1,4 +1,5 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
@ -36,7 +37,7 @@ class IpAddress {
/**
* @param string $ip IP to normalized
*/
public function __construct($ip) {
public function __construct(string $ip) {
$this->ip = $ip;
}
@ -47,13 +48,12 @@ class IpAddress {
* @param int $maskBits
* @return string
*/
private function getIPv4Subnet($ip,
$maskBits = 32) {
private function getIPv4Subnet(string $ip, int $maskBits = 32): string {
$binary = \inet_pton($ip);
for ($i = 32; $i > $maskBits; $i -= 8) {
$j = \intdiv($i, 8) - 1;
$k = (int) \min(8, $i - $maskBits);
$mask = (0xff - ((pow(2, $k)) - 1));
$mask = (0xff - ((2 ** $k) - 1));
$int = \unpack('C', $binary[$j]);
$binary[$j] = \pack('C', $int[1] & $mask);
}
@ -67,12 +67,12 @@ class IpAddress {
* @param int $maskBits
* @return string
*/
private function getIPv6Subnet($ip, $maskBits = 48) {
private function getIPv6Subnet(string $ip, int $maskBits = 48): string {
$binary = \inet_pton($ip);
for ($i = 128; $i > $maskBits; $i -= 8) {
$j = \intdiv($i, 8) - 1;
$k = (int) \min(8, $i - $maskBits);
$mask = (0xff - ((pow(2, $k)) - 1));
$mask = (0xff - ((2 ** $k) - 1));
$int = \unpack('C', $binary[$j]);
$binary[$j] = \pack('C', $int[1] & $mask);
}
@ -84,7 +84,7 @@ class IpAddress {
*
* @return string
*/
public function getSubnet() {
public function getSubnet(): string {
if (\preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $this->ip)) {
return $this->getIPv4Subnet(
$this->ip,
@ -102,7 +102,7 @@ class IpAddress {
*
* @return string
*/
public function __toString() {
public function __toString(): string {
return $this->ip;
}
}