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

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

  Нээгдсэн тоо: 2824 Бүртгүүлэх

Функц гэсэн ойлголт нь маш дээрээс түүхтэй. Анх машины кодоор програм зохиож байх үеэс програм зохиогчид машинтай нэг хэлээр ойлголцохын тулд нэг тэгүүдийг (01) команд болгон хувиргасны үр дүнд команд үүссэн. Шийдэх бодлогын цар хүрээ ихэссэнтэй уялдан командын тоо нь геометр прогресоор өссөн. Энэ үед програм зохиогчид командуудыг нэг блок болгон нэр өгч ашиглаж болох бүтцийг санаачилсан байна. Үүнийг процедур гэдэг. Ингэснээр програмын кодыг жижигхэн ойлгомжтой болгоход асар их түлхэц болсон. Цаашид процедурууд нь оролтын параметруудтай болж хөгжсөн бөгөөд эцэст нь ямар нэгэн үйлдэл хийгээд зогсохгүй утга буцаадаг функц гэсэн ойлголт гарч ирсэн. PHP –д процедур гэсэн ойлголт байдаггүй. Утга буцаадаг ч бай үгүй ч бай бид ганцхан функц гэсэн ойлголтыг хэрэглэнэ. PHP нь маш олон дотоод функцтэй. Үүнээс гадна бусад програмчлалын хэлний адилаар PHP нь програмын код дотор өөрийн функцыг үүсгэх боломжтой. Эдгээрийн голдуу хэрэглэгчдийн функцууд гэдэг. Бид хичээлдээ яг энэ төрлийн функцуудын талаар түлхүү авч үзэх болно.

  Нээгдсэн тоо: 1841 Нийтийн

Өмнөх хичээлүүд бид манай АУСистемийн цөм болох Article классыг бичсэн. Одоо сайтын хэрэглэгчийн талын скриптийг бичих болно. Юуны өмнө хэрэглэгчийн талын программыг агуулах index.php нэртэй файл үүсгэнэ. Энэ файл нь хэрэглэгчийн хөтөч дээр хуудсыг үзүүлэх юм. Файлыг сайтын үндсэн хавтаст хадгалан өгөөд доорх кодыг оруулна.

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

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

  • Та сайтаа ачааллахдаа http://localhost/blog/ байдлаар хандах болно. Гэхдээ хэдийгээр локал гэсэн ч сайтад хандахдаа www.blog.mn байдлаар хандах нь хамаагүй ойлгомжтой бас илүү бодитой харагдана.
  • Сайтын файлуудаа систем байрлах диск дээр байршуулах нь тийм ч сайн арга биш
  • Та ганцхан сайттай ажиллаад байхгүй цаашдаа локал сайтын тоо олон болох үед хаяглалд хүндрэл үүсэх магадлалтай.

Иймд бид локал сервер дээр виртуал хостын тохиргоог хийж сурах хэрэгтэй. Ингэснээр дээрх хүндрэлүүдийг үүсгэхгүй байх боломжтой.

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

Файлтай ажиллах

Файл нь мэдээлэл хадгалагч дээрх нэр бүхий хэсэг. Файлтай ажиллахын тулд эхлээд түүнийг нээх хэрэгтэй. Энэ зорилгод ихэнхдээ fopen() функцыг ашигладаг. Функц нь нээх файлын нэр болон нээлтийн горимыг заасан тусгай тэмдэгтүүдийг оролтын параметр болгон авна. Эхний параметрын хувьд хэрвээ заагдсан нэртэй файл байхгүй бол функц нь алдаа өгнө. Функцээс source төрлийн утгатай файлын дискрипторийг (файлыг нээхэд олгогдсон дугаар) буцаана. Файлыг нээх ажиллагаа бүтэлгүй болсон тохиолдолд FALSE утгыг буцаана. Хоёрдугаар параметр нь файл нээх горимыг заах бөгөөд доорх утгуудыг авна.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

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

 

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

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

 

Хоёр тамирчин тойрог замаар нэгэн зэрэг гарч 3,2 км замыг туулан барианд оржээ. Тойргийг нэг тамирчин нөгөөгөөсөө 10 секундээр хурдан тойрдог. Ялагч барианд орж байхад нөгөө нь бүтэн тойрог гүйх үлдсэн байлаа. Ялагч замыг 9 мин 20 секундэд туулсан бол тойрог замын уртыг ол. Тамирчдын хурдыг тогтмол гэж үзнэ.

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