Нүүр » Программчлал » Php хэл » ОХП -ын дадлагын ажил 4

ОХП -ын дадлагын ажил 4

Обьект хандалтад программчлалын дадлагын 4-р хичээлээр PHP -н онцгой тохиолдолын боловсруулалтыг өмнөх дадлагын ажлуудад хийгдсэн жишээн дээр хэрэгжүүлэх болно. Иймээс дадлагын ажлыг эхлэхийн өмнө танд Онцгой тохиолдол хичээлийн материалтай танилцахыг зөвлөх байна. Түүнээс гадна өмнөх дадлагын ажлуудыг 1-р ажил, 2-р ажил, 3-р ажил хичээлүүдээс үзэх боломжтой.

Дээрх материалуудтай танилцсан бол шууд даалгавартаа орцгооё.

  1. Users классын конструкторын бүх параметрүүдэд анхдагч утгуудаар ("") хоосон утгыг олгох
  2. Users классын конструкторт шаардлагатай өгөгдлүүдийг шалгах онцгой тохиолдолын боловсруулагчийг оруулах
  3. Онцгой тохиолдолыг баригчийг тодорхойлон хөтөчид алдааны мэдээллийг үзүүлэх
  4. Ямар нэгэн параметргүй Users классын хувийг үүсгэх

Энд өмнөх дадлага дээр боловсруулсан классыг ашиглан түүнд онцгой байдлын боловсруулагчийг нэмэн оруулбал доорх код гарна.

<?php
class Users{
    public $name;
    public $login;
    public $password;
    
    // конструкторыг үүсгэн анхдагч утгуудыг өгөх
    // онцгой тохиолдолыг барих
    function __construct($name="", $login="", $password=""){
        try{
            if($name == "" or $login == "" or $password == "")
                throw new Exception("Өгөгдөл дутуу байна!");
                
            $this->name = $name;
            $this->login = $login;
            $this->password = $password;
        }catch(Exception $e){
            echo $e->getMessage();
        }    
    }

    // clone аргыг үүсгэх
    function __clone(){
        $this->name = "Дулмаа";
        $this->login = "dulam";
        $this->password = "qwert";    
    }
    
    // getInfo() арга
    function getInfo(){
        echo "<p>Name: ".$this->name."<br>";
        echo "Login: ".$this->login."<br>";
        echo "Password: ".$this->password."<br>";
    }
}
// классын хувиудыг үүсгэхдээ конструкторт ямарч өгөгдөл дамжуулахгүй
$user1 = new Users();
// getInfo() аргыг дуудах
$user1->getInfo();

$user2 = new Users("Дорж", "dorj", "321");
// getInfo() аргыг дуудах
$user2->getInfo();

$user3 = new Users("Солонго", "soko", "456");
// getInfo() аргыг дуудах
$user3->getInfo();

//объект $user4 бол $user3 объектын хуулбар
$user4 = clone $user3;
// getInfo() аргыг дуудах
$user4->getInfo();
?>

Кодыг ажлуулбал $user1 хувийг үүсгэх үед "Өгөгдөл дутуу байна!" гэсэн мэдээлэл өгөөд $user1->getInfo() аргыг дуудахад шинжүүд бүгд хоосон утгатай байна. Бусад хувиуд дээр онцгой байдлын боловсруулагч ажиллахгүй тул өмнөх ажлуудынхтай ижил үр дүнг өгнө. Конструкторт шинжүүдэд анхдагч утга өгөх нь функцийн параметрт анхдагч утга өгөхтэй яг ижилхэн. function __construct($name="", $login="", $password="") Үүний дараа бид онцгой тохиолдолыг барих try блокийг эхлүүлсэн байгаа. Энд параметрүүдийн аль нэг нь л хоосон утгатай байвал онцгой байдлын боловсруулагч Exception классын шинэ хувийг үүсгээд түүний конструкторт мэдээллийг параметрээр дамжуулна. Боловсруулагч catch(Exception $e) блокт дамжуулсан мэдээллээ үзүүлнэ. Хэрвээ параметрүүд утгатай байвал онцгой тохиолдолыг баригч ажиллахгүй бүх зүйл хэвийн горимоор ажиллах юм.
Энд бас нэгэн зүйлийг хэлэхэд бид Exception классаас өөрийн классыг өвлүүлэн авч болно. Ингэснээр бид өөрийн онцгой тохиолдолыг боловсруулагчийг бий болгох боломжтой. Үүнийг хэрхэн хэрэгжүүлэхийг жишээгээр үзүүлбэл:

<?php
// Exception классаас өвлөгдсөн nameException классыг үүсгэх
class nameException extends Exception{
    function __construct($message){
        $message= "name " . $message;
        // эцэг классын конструкторыг дуудахгүй бол боловсруулагч ажиллахгүй
        parent::__construct($message);
    }
}
// Exception классаас өвлөгдсөн loginException классыг үүсгэх
class loginException extends Exception{
    function __construct($message){
        $message= "login " . $message;
        // эцэг классын конструкторыг дуудахгүй бол боловсруулагч ажиллахгүй
        parent::__construct($message);
    }
}
// Exception классаас өвлөгдсөн passwordException классыг үүсгэх
class passwordException extends Exception{
    function __construct($message){
        $message= "password " . $message;
        // эцэг классын конструкторыг дуудахгүй бол боловсруулагч ажиллахгүй
        parent::__construct($message);
    }
}

class Users{
    public $name;
    public $login;
    public $password;
    
    // конструкторыг үүсгэн анхдагч утгуудыг өгөх
    // онцгой тохиолдолыг барих
    function __construct($name = "", $login = "", $password = ""){
        // параметр бүрд өөрийн боловсруулагчийг хэрэглэнэ
        try{
            if($name == "")
                throw new nameException("параметрийг оруулна уу!");    
            $this->name = $name;
            
            if($login == "")
                throw new loginException("параметрийг оруулна уу!");
            $this->login = $login;
            
            if($password == "")
                throw new passwordException("параметрийг оруулна уу!");
            $this->password = $password;
            
        }catch(nameException $e){
            echo $e->getMessage();
        }catch(loginException $e){
            echo $e->getMesage();
        }catch(passwordException $e){
            echo $e->getMessage();
        }
    }
    
    // getInfo() арга
    function getInfo(){
        echo "<p>Name: ".$this->name."<br>";
        echo "Login: ".$this->login."<br>";
        echo "Password: ".$this->password."<br>";
    }
}
// классаас $user1 хувийг үүсгэхдээ нууц үгийг дамжуулааагүй тул password параметрийг оруулна уу! гэсэн мэдээлэл өгнө
$user1 = new Users("Бат", "bataa");
// getInfo() аргыг дуудах
$user1->getInfo();

$user2 = new Users("Дорж", "dorj", "321");
// getInfo() аргыг дуудах
$user2->getInfo();

$user3 = new Users("Солонго", "soko", "456");
// getInfo() аргыг дуудах
$user3->getInfo();
?>

try{} catch{} бүтэц бол алдаа боловсруулагч биш гэдгийг сануулъя. Энэ бол онцгой тохиолдолыг баригч юм. Кодод алдаа гарах магадлалыг бууруулах зорилгоор ашигладаг бүтэц. Өөрөөр хэлбэл кодын найдвартай ажиллагааг хангах бүтэц гэж үзэж болно. Бүтцийг яг шаардлагатай гэсэн газраа л ашиглахгүй бол кодын уншихад хүндрэл үүсгэх талтай байдгийг сануулъя.
Обьект хандалтад программчлалыг бодит жишээнд ашиглахыг АУСистем хийцгээе цуврал хичээлүүдээс үзээрэй.

 

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

Абстракт класс ба аргууд

Обьект хандалтад программчлалын үндэс болсон класс нь абстракт төрлийнх байж болдог. Хичээлээр абстракт класс ба аргууд гэж юу болох, хэрхэн…

Нээгдсэн тоо : 1766

Өвлөх (Inheritance) зарчим

Өвлөх (Inheritance) гэдэг нь "эцэг" хэмээн нэрлэгдэх байгаа классаас шинэ классыг үүсгэх боломжийг бүрдүүлдэг обьект хандалтат программчлалын үндсэн механизмуудын нэг…

Нээгдсэн тоо : 907

Виртуал хостын тохиргоо хийх

Компьютерт локал веб сервер суулгах хичээлээр \xampp\htdocs\ хавтаст сайтын нэр бүхий хавтас үүсгээд сайтаа байршуулан туршин үзсэн. Энэ арга нь…

Нээгдсэн тоо : 762

Өгөгдлийн сантай ажиллах

Бүх л програмчлалын хэлүүд өгөгдлийн сантай ажилладагийн адилаар PHP нь бас өгөгдлийн сантай ажиллана.Өгөгдлийн сан - мэдээллийг хадгалагч. Ер нь…

Нээгдсэн тоо : 1372