ОХП -ын дадлагын ажил 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{} бүтэц бол алдаа боловсруулагч биш гэдгийг сануулъя. Энэ бол онцгой тохиолдолыг баригч юм. Кодод алдаа гарах магадлалыг бууруулах зорилгоор ашигладаг бүтэц. Өөрөөр хэлбэл кодын найдвартай ажиллагааг хангах бүтэц гэж үзэж болно. Бүтцийг яг шаардлагатай гэсэн газраа л ашиглахгүй бол кодын уншихад хүндрэл үүсгэх талтай байдгийг сануулъя.
Обьект хандалтад программчлалыг бодит жишээнд ашиглахыг АУСистем хийцгээе цуврал хичээлүүдээс үзээрэй.

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

  Нээгдсэн тоо: 2443 Төлбөртэй

Php сессиин тухай авч үзье. Хэрэглэгчтэй интерактив харьцаатай сайт хийхийн тулд энэ ойлголтыг сайн ойлгосон байх хэрэгтэй. Тэгэхлээр Php сессии гэж юу вэ? Хэрвээ та Php кукигийн тухай мэдлэгтэй бол сессии нь кукитай их төстэй. Бид Php Cookie хэрхэн ажилладаг вэ? хичээлд интерактив харьцаа үүсгэхийн тулд багахан хэмжээний мэдээллийг хадгалах шаардлага байдаг тухай дурдаж байсан. Мэдээж кукиг ашиглаад байж болох хэдий ч энд жижигхэн асуудал бий.

  • Куки бүх асуудлыг шийдэж чадахгүй
  • Хэмжээний хувьд хязгаарлагдмал
  • Хэрэглэгч кукиг устгах боломжтой

Эдгээр шалтгаануудаас үүдэн бидэнд сайтын бүх файлаас хандах боломжтой глобал хувьсагчидтай төстэй ямар нэгэн мэдээлэл хадгалах орон зай хэрэгтэй.

  Нээгдсэн тоо: 3122 Төлбөртэй

Веб сайтад хэрэглэгчийн оруулсан мэдээллийн зөв эсэхийг шалгах ажил олон гардаг. Ийм асуудлыг мөрийн функцуудээр шийдвэрлэх нь нилээд хүндрэлтэй ажил болно. Тэгэхлээр ийм төрлийн ажиллагаанд хамгийн үр дүнтэй шийдэл нь тогтмол илэрхийлэл буюу (regular expression) ашиглах явдал юм. Эхэндээ тогтмол илэрхийлэл нь танд их ойлгомжгүй мэт санагдаж болох боловч маш бага хэмжээний мэдлэгийн хүрээнд олон хүнд асуудлуудлыг шийдвэрлэж болно.

Тогтмол илэрхийлэл.

Тогтмол илэрхийлэл гэдэг нь текстэн мөр юм. Тусгай тэмдэгтүүдээр үүсгэсэн хэвээр (шаблон) мөр дотор хэвэнд тохирох хэсгийг хайдаг. PHP –д POSIX, PCRE гэсэн хоёр төрлийн тогтмол илэрхийллийг ашигладаг. Бид хичээлээр POSIX төрлийг авч үзнэ. Тогтмол илэрхийллийг хэрхэн үүсгэдэг талаар үзэхийн өмнө хэвийн (шаблон) тухай ойлголттой танилцъя.
Хэв гэдэг ойлголт нь зөвхөн програмчлалын хэлэнд байдаг ойлголт биш. Жишээ нь бид php суулгасан директорт ороод хайлт хийх (F3) товчийг дараад php гэж бичээд хайлт хийхэд нэрэнд нь php гэсэн үг орсон бүх файлуудыг гаргаж ирдэг. Энд бид хэв (шаблон) үүсгэж өгсөн гэсэн үг. Одоо хайлтын нөхцлөө нарийвчилъя. Хэрвээ бид хайлт хийхдээ php? бичиж өгвөл энэ нь хайж байгаа файлын нэр нь php гэж эхлээд араас нь дурын тэмдэгтүүд байж болохыг заасан хэв болж байгаа болно. Ерөнхийдээ ийм зарчмаар PHP -д хэвийг үүсгэж өгдөг.

  Нээгдсэн тоо: 2081 Төлбөртэй

Яагаад зөвхөн мөрний тухай тусгай хичээл байгаа талаар та гайхаж байж магадгүй. Өнгөцхөн харвал мөр гэдэг нь String гэсэн төрөл бүхий хувьсагч гэдгээс тэгж харагдаж болох талтай. Гэхдээ PHP -д мөртэй үр дүнтэй ажиллахын тулд энэ сэдвийг гүнзгий ойлгосон байх шаардлагатай.

Мөр гэдэг нь String төрөлтэй хувьсагч ба үнэндээ бол тэмдэгтүүдийн багц юм.

Мөрийг дараах байдлаар тодорхойлж болно.

$string_1="Сайн байна уу";          // давхар хашилттай мөр
$string_2='Сайн байна уу';            // дан хашилттай мөр

Мөрийг тодорхойлох нь хувьсагчид утга олгохтой яг ижилхэн хийгдэж байгаа хэдий ч нэг эсвэл давхар хашилтыг мөр дотор гаргах үед асуудал гарахаар байна. Хэрвээ бид

$str="Тэр "сайн байна уу" гэж хэлэв";
echo $str;

гэсэн кодыг бичвэл програмын ажиллагаа нь мөрөнд утга олгох оператор дээр алдаа өгөх болно. Учир нь мөр гэдэг нь хамгийн ойрхон байрлах хашилтын хоорондох тэмдэгтүүдийн багцыг хэлнэ. Иймд дээрх код нь алдаа өгнө. Энэ байдлаас гарахын тулд бид (\) налуу зураас тэмдэгтийг ашиглана. Тэгвэл дээрх кодыг

  Нээгдсэн тоо: 1878 Төлбөртэй

Ихэнх эхлэн суралцагчид Cookie гэдгийг маш нарийн ойлголт гэж үзснээс болоод түүнийг бараг ашигладаггүй. Энэ хичээлээр бид Cookie –г үүсгэж, засварлаж устгаж сурах болно.
Cookie гэдэг нь хэрэглэгчийн броузерын тохиргоонд хадгалагдах багахан хэмжээний өгөгдөл юм. Ихэнхдээ Cookie –г хэрэглэгчийн талаарх мэдээллийг хадгалахад (логин паспорт гэх мэт) ашигладаг. Ингэснээр баазад дахин хандалт үүсгэхгүй өгөгдлийг авах хурд өндөр зэрэг олон давуу талтай. Гэхдээ зарим броузер Cookie –г дэмждэггүй бас хэрэглэгч Cookie ашиглахыг хаасан байдаг тул энэ механизмд хэт их найдлага тавих хэрэггүй. Internet Explorer-ийн анхдагч тохиргоо нь Cookie ашиглахыг зөвшөөрсөн байдаг. Cookie ашиглах тохиргоог та өөрийн броузерын тохиргооны аюулгүй байдал хэсэгт хийж болно.

Үйл явдал /event/ тодорхой үйлдэл хийгдсэн талаар системд мэдэгддэг. Хэрвээ бид энэхүү үйлдлийг ажиглах хэрэгтэй бол яг энд…

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

 

Манай төсөл олон хуудсуудтай болон тэдгээрийн хооронд динамикаар шилжилт хийж байгаа ч тухайн үед шилжилт хийгдсэн хуудаст тохирох…

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

 

Зочин (Visitor) паттерн классуудыг өөрчлөхгүйгээр тэдгээрийн обьектуудын үйлдлийг тодорхойлох боломжийг олгоно. Зочин хэвийг ашиглахдаа классуудын хоёр ангилалыг тодорхойлно.…

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

 

Лямбда-илэрхийлэл нь нэргүй аргын хураангуй бичилтийг илэрхийлнэ. Лямбда-илэрхийлэл утга буцаадаг, буцаасан утгыг өөр аргын…

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

 

Кодийн сайжруулалт /рефакторинг/ хичээлээр програмийн кодоо react -ийн зарчимд нийцүүлэн компонентод салгасан.…

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

 

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

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

 

Делегаттай нэргүй арга нягт холбоотой. Нэргүй аргуудыг делегатийн хувийг үүсгэхэд ашигладаг.
Нэргүй аргуудын тодорхойлолт delegate түлхүүр үгээр…

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

 

Математикт харилцан урвуу тоонууд гэж бий. Ямар нэгэн тооны урвуу тоог олохдоо тухайн тоог сөрөг нэг зэрэг дэвшүүлээд…

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

 

Төсөлд react-router-dom санг оруулан чиглүүлэгчдийг бүртгүүлэн тохируулсан Санг суулган тохируулах хичээлээр бид хуудас…

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

 
Энэ долоо хоногт

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

 

[-252; 299) завсарт орших 18 -д үлдэгдэлгүй хуваагдах тоонуудын нийлбэрийг ол.

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

 

тэгшитгэлийг бод.

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