Вы можете назначить chooseIndex
свойству index
экземпляра, а затем вернуть экземпляр, а затем setValue
просмотреть индекс, который был присвоен:
[114 ]
class multipleActionObject {
constructor(arr) {
this.arr = arr;
}
chooseIndex(index) {
this._index = index;
return this;
}
setValue(value) {
if (typeof this._index !== 'number') {
throw new Error('No index to set value of');
}
this.arr[this._index] = value;
return this;
}
}
const instance = new multipleActionObject([0, 1, 2, 3]);
instance.chooseIndex(4).setValue(10);
console.log(instance.arr[4]);
Это называется «цепочкой методов», хотя здесь кажется немного странным отделять выбранный элемент от действия, выполняемого над этим объектом. [ 118]
Только используя IPv4:
ip2long()
для преобразования дюйм/с и диапазона подсетей в длинных целых что-то вроде этого должно работать:
function cidr_match($ip, $range)
{
list ($subnet, $bits) = explode('/', $range);
if ($bits === null) {
$bits = 32;
}
$ip = ip2long($ip);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
$subnet &= $mask; # nb: in case the supplied subnet wasn't correctly aligned
return ($ip & $mask) == $subnet;
}
function cidr_match($ipStr, $cidrStr) {
$ip = ip2long($ipStr);
$cidrArr = split('/',$cidrStr);
$maskIP = ip2long($cidrArr[0]);
$maskBits = 32 - $cidrArr[1];
return (($ip>>$maskBits) == ($maskIP>>$maskBits));
}
Я хочу, чтобы вы взглянули на мои несколько строк. Примеры, которые предлагали мне люди, похоже, не работают. Одна из причин, насколько я понимаю, заключается в том, что биты маски CIDR являются двоичными числами, поэтому сдвиг битов должен выполняться на двоичном числе. Я пробовал преобразовать длинный IP-адрес ' Хорошо, вот несколько строк ... Я жду ваших комментариев.
function cidr_match($ipStr, $cidrStr) {
$ipStr = explode('.', $ipStr);
foreach ($ipStr as $key => $val) {
$ipStr[$key] = str_pad(decbin($val), 8, '0', STR_PAD_LEFT);
}
$ip = '';
foreach ($ipStr as $binval) {
$ip = $ip . $binval;
}
$cidrArr = explode('/',$cidrStr);
$maskIP = explode('.', $cidrArr[0]);
foreach ($maskIP as $key => $val) {
$maskIP[$key] = str_pad(decbin($val), 8, '0', STR_PAD_LEFT);
}
$maskIP = '';
foreach ($ipStr as $binval) {
$maskIP = $maskIP . $binval;
}
$maskBits = 32 - $cidrArr[1];
return (($ip>>$maskBits) == ($maskIP>>$maskBits));
}