Ten blog nie jest już rozwijany. Wraz ze wszystkimi artykułami zostały przeniesiony pod adres wmroczkowski.pl

Czy chcesz przejść pod nowy adres?

niedziela, 6 września 2009

Programowanie obiektowe (cz. 9) - klasa sprawdzająca poprawność maski sieciowej - przykład

Wykorzystując poznane do tej pory wiadomości możemy napisać np. klasę, która będzie sprawdzała poprawność maski sieciowej. Przykład takiej klasy znajduje się poniżej. W komentarzach jest opis. Jeżeli coś jest nie jasne to proszę pytać w komentarzach.

<?php
class Netmask {

private $_netmask;

//funkcja zamieniająca numeryczny adres maski na binarny
private function dqtobin($dqin) {
$dq = explode(".",$dqin);
for ($i=0; $i<4 ; $i++) {
//oktet nie może przekraczać 255. Maska to binarny rząd jedynek lub zer
//Do ciągu binarnego pasuje również 256, więc trzeba je wykluczyć
if ($dq[$i] <= 255) {
$bin[$i]=str_pad(decbin($dq[$i]), 8, "0", STR_PAD_LEFT);
}
else
{
throw new Exception ("Oktet numer $i wynosi $dq[$i], więc jest większy niż 255.");
}

}
return implode("",$bin);
}

//sprawdzamy format zapisu adresu i przypisujemy wartość do właściwości _netmask
public function setNetmask($netmask) {
if (!ereg('^([0-9]{1,3}\.){3}[0-9]{1,3}$', $netmask)) {
throw new Exception ("Format maski $netmask jest nieprawidłowy.");
}
else {
$this->_netmask = $netmask;
}
}

//sprawdzamy binarnie czy maska jest prawidłowa. Maska sieciowa to zawsze binarny rząd jedynek
public function checkNetmask(){
$bin_nmask = $this->dqtobin($this->_netmask); //zamiana na adres binarny, wywołanie metody dqtobin
$bin_nmask_valid=rtrim($bin_nmask, "0"); //usuwamy zera z końca adresu binarnego

if (!ereg("0",$bin_nmask_valid) ){ //jeżeli nie ma już żadnych zer w adresie to maska jest ok
echo "Maska $this->_netmask jest poprawna.";
}
else
{
throw new Exception ("Maska $this->_netmask jest nieprawidłowa.");
}
}


}


//objekt
$objNetmask = new Netmask();

$objNetmask-> setNetmask('1.0.0.0');
$objNetmask-> checkNetmask();


?>

Brak komentarzy: