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

Бид Php -н обьект хандалтад программчлалын талаар өмнөх хичээлүүдэд үзсэн. Ямар нэгэн зүйлийг сурч эзэмших хамгийн сайн арга бол онолын мэдлэгээс гадна практик ажилд ашиглах явдал байдаг. Иймд бид энэ хичээлээр ОХП -ын дадлагын ажлыг хийх болно.

Нэгдүгээр даалгавар

  1. name, login, password шинжүүдтэй Users классыг үүсгэ
  2. Users классаас 3 обьект үүсгэнэ
  3. Обьект бүрийн шинжүүдэд дурын утгуудыг олго.

Даалгавар маш энгийн учраас Класс ба обьект хичээлийг үзээд өөрөө хийх гээд оролдоод үзээрэй. Өмнөх хичээлүүдийн материалыг сан ойлгосон бол энэхүү даалгавар танд ямар нэгэн хүндрэл үүсгэх ёсгүй. Бүр дийлэхгүй байгаа бол даалгаварын шийдлийг харцгаая.

<?php
class Users{
    public $name;
    public $login;
    public $password;
}
$user1 = new Users();
    $user1->name = "Бат";
    $user1->login = "bataa";
    $user1->password = 123;

$user2 = new Users();
    $user2->name = "Дорж";
    $user2->login = "dorj";
    $user2->password = 321;

$user3 = new Users();
    $user3->name = "Солонго";
    $user3->login = "soko";
    $user3->password = 456;
?>

Эхний даалгаварын шийдэл бол ердөө л энэ юм. Класст шинж ба арга гэсэн хоёр зүйл байдгийг бид мэднэ. Дээрх даалгавараар бид шинжийг үүсгээд түүнд утгуудыг олгохыг хийсэн. Одоо аргыг арай дэлгэрүүлэн авч үзье. Маш энгийнээр хэлбэл энэ бол обьектын үйлдлүүд. Машин гэсэн обьектыг аваад үзье. Машин урагшаа, зүүн, баруун, ухрах хөдөлгөөнийг хийж болохоос гадна тодорхой хэмжээний хурдыг авч болно. Энэ бүгд бол аргууд буюу тухайн обьектын хийж чадах үйлдлүүд. Тэгвэл бид ОХП-аар обьектын боломжуудыг /аргууд/ хэрхэн бичих вэ?
Арга гэдэг бол зүгээр л функцууд. Тэдгээр нь ердийн функцуудын адилаар л тодорхойлогдоно.

Программын кодын хаа нэгэн хэсэгт бичигдсэн функцууд бол ердийн функцууд. Харин классын дотор тодорхойлогдсон функцууд бол түүний аргууд. Үүнийг тогтоогоод аваарай.

Аргыг хэрхэн тодорхойлохыг жишээн дээр аваад үзье. Жишээ болгоод "машин" гэсэн классыг авъя. Класст "машин" обьектын шинжүүдийг тодорхойлохоос гадна хамгийн энгийн аргыг тодорхойлон өгье. Аргыг takeSpeed() гэж нэрлэе. Бүхий л арга болон шинжүүдийг public (нээлттэй), protected (хамгаалагдсан), private (хаалттай) байдлаар зарлах боломжтой гэдгийг бид "Арга ба шинжүүдэд хандах" хичээлд үзсэн. Арга шинжүүдийг зарлахдаа хандах хязгаарлалтыг заагаагүй бол түүнийг public (нээлттэй) гэж үздэг. Та эхнээсээ арга шинжүүдийг тодорхойлохдоо хандалтын хязгаарлалтыг тавин өгч сурах нь дээр гэдгийг сануулъя. Ингээд код нь

<?php
// классын тодорхойлолт
class Car{
    // шинжүүд
    public $year = 2010;
    public $speed;
    public $model;
    
    // аргыг үүсгэх
    public function takeSpeed(){
        // энд арга ямар нэгэн үйлдэл хийнэ
                return "Машины хурд = ";
    }
}
// объектыг үүсгэх
$car1 = new Car();
// аргад хандах
echo $car1->takeSpeed();
$car2 = new Car();
?>

Аргад хандах нь шинжид хандахын нэгэн ижил гэдэг нь жишээн дээрээс харагдана. жишээ нь $car1->takeSpeed() нь car1 обьектын takeSpeed аргад хандахыг зааж байгаа юм. Хэрвээ дээрх кодыг ажлуулбал манай арга дэлгэц дээр "Машины хурд = " гэсэн үгийг үзүүлэх болно. Эндээс л хамгийн сонирхолтой зүйл эхлэж байгаа юм. Бид ямар машины хурдыг авахыг хүссэн вэ? гэдгийг та анхаарсан байх. Логикоор бол бид классын car1 хувиас хандсан болохоор энэ машины хурдыг авах гэсэн гэж бодогдоно. Гэтэл машины хурдыг авах аргад бидэнд яг ямар обьектын хурдыг авах талаар заагаагүй байдаг. Энэ тохиолдолд бид Car классын speed шинжид хандах шаардлагатай. Гэтэл шинж нэг харин машин (обьект) хоёр байгаад байдаг. Иймээс бид чухам ямар обьектын шинжийг (хурд) сонирхож байгаагаа аргад заан өгөх хэрэгтэй.
Обьект хандалтад программчлалын ийм заагч бол $this түлхүүр үг бөгөөд $this->speed гэж бичин өгнө.
Түлхүүр үгийг ашиглан дээрх кодыг өөрчлөн бичвэл

<?php
// классын тодорхойлолт
class Car{
    // шинжүүд
    public $year = 2010;
    public $speed;
    public $model;
    
    // арга
    public function takeSpeed(){
        // аргад аль хурдыг авахыг заан өгнө
        return "Машины хурд = ".$this->speed;
    }
}
// объектыг үүсгэх
$car1 = new Car();
$car1->speed = 210; // объектын шинжид утга олгох
$car1->model = "bmw"; // объектын шинжид утга олгох
// аргад хандах
echo $car1->takeSpeed()."<br>";

$car2 = new Car();
$car2->speed = 260;// объектын шинжид утга олгох
$car2->model = "lexus"; // объектын шинжид утга олгох
// аргад хандах
echo $car2->takeSpeed();
?>

Жишээнд car1 обьектын model шинжид bmw харин car2 обьектын model шинжид lexus утгуудыг өгөн эдгээр модел бүрийн хурдны шинжид утга олгосон. Программыг ажиллуулбал дэлгэц дээр
Машины хурд = 210
Машины хурд = 260
гэж үзүүлэх болно. Классын аргад $this түлхүүр үгийг ашигласнаар обьект тус бүрийн хурдыг үзүүлж чадлаа. $this түлхүүр үг нь тухайн үед ажиллаж байгаа обьектыг л заах болно. Энэ тухай бид өмнө нь бас үзсэн. Одоо та түлхүүр үгийн учрыг сайн ойлгосон байх.

Арга дотроос шинжид хандахдаа $this түлхүүр үгээр дамжин хандана гэдгийг л тогтоон аваарай.

Бас нэгэн чухал зүйлийн талаар. car класст takeSpeed() аргаас гадна paintSpeed() гэсэн арга байлаа гэж бодъё. Бид paintSpeed() аргаар машины хурдыг үзүүлэх харин takeSpeed() арга нь paintSpeed() аргыг дуудах байдлаар хийцгээе. Энэ нь нэг аргаас нөгөө аргад хандахдаа бас л $this түлхүүр үгийг ашигладаг гэдгийг үзүүлсэн жишээ юм.

<?php
// классын тодорхойлолт
class Car{
    // шинжүүд
    public $year = 2010;
    public $speed;
    public $model;

    // арга
    public function takeSpeed(){
        // takeSpeed() аргаас paintSpeed() аргад хандах
        return $this->paintSpeed();
    }
    
    // арга
    function paintSpeed(){
        // аргад аль хурдыг авахыг заан өгнө. Аргаас шинжид хандах
        return "Машины хурд = ".$this->speed;
    }

}
// объектыг үүсгэх
$car1 = new Car();
$car1->speed = 210; // объектын шинжид утга олгох
$car1->model = "bmw"; // объектын шинжид утга олгох
// аргад хандах
echo $car1->takeSpeed()."<br>";

$car2 = new Car();
$car2->speed = 260;// объектын шинжид утга олгох
$car2->model = "lexus"; // объектын шинжид утга олгох
// аргад хандах
echo $car2->takeSpeed();
?>

Код өмнөхтэй яг адилхан үр дүнг буцаана. Эндээс дүгнэвэл:

Аргаас аргад, аргаас шинжид хандахдаа $this түлхүүр үгээр дамжуулан хандана. Үүнийг ойлгох нь техникийн нарийн асуудал тул зүгээр л тогтоогоод аваарай.  

За одоо дадлагын ажилдаа эргэн ороод хоёрдугаар даалгаварыг гүйцэтгэе.

Хоёрдугаар даалгавар

  1. Users класст getInfo() аргыг тодорхойлон өг
  2. getInfo() арга нь обьектын шинжүүдийг үзүүлнэ
  3. Обьект бүрээс getInfo() аргыг дуудах

$this түлхүүр үгийг хаана хэрхэн ашиглахыг ойлгосон бол даалгаварыг биелүүлэхэд асуудалгүй. Ингээд кодыг үзүүлбэл:

<?php
class Users{
    public $name;
    public $login;
    public $password;
    
    // getInfo() арга
    function getInfo(){
        echo "<p>Name: ".$this->name."<br>";
        echo "Login: ".$this->login."<br>";
        echo "Password: ".$this->password."<br>";
    }
}

$user1 = new Users();
    $user1->name = "Бат";
    $user1->login = "bataa";
    $user1->password = 123;
    // getInfo() аргыг дуудах
    $user1->getInfo();    

$user2 = new Users();
    $user2->name = "Дорж";
    $user2->login = "dorj";
    $user2->password = 321;
    // getInfo() аргыг дуудах
    $user2->getInfo();
    
$user3 = new Users();
    $user3->name = "Солонго";
    $user3->login = "soko";
    $user3->password = 456;
    // getInfo() аргыг дуудах
    $user3->getInfo();    
?>

Аргад $this түлхүүр үгээр дамжуулан шинжид хандаж байгаа тул чухам аль обьектын шинжийг авахаа программ ойлгоод байгаа хэрэг шүү дээ. Жишээ нь $user3->getInfo(); гээд дуудахад тухайн үед ажиллаж байгаа обьект $user3 гэдгийг Php$this түлхүүр үг зааж өгөх болно.
Бид бараг юу ч хийгээгүй байхад программын код нилээд олон мөр болсон байгааг ОХП -ын зарчимтай зөрчилдөж байгаа юм биш биз гэсэн бодол төрж байж магадгүй. Бид дадлагын ажлаа дөнгөж эхлэж байгаа тул санаа зоволтгүй.
Бид обьектыг үүсгэж байхдаа $user1 = new Users(); гэж их хаалтыг бичээд байгааг анхаарна уу. Энд хаалт бичин өгөөд байгаа нь ямар нэгэн зүйлд хэрэгтэй гэдгийг логик тань хэлж байгаа бол та яг зөв ойлгосон байна.
Класст конструктор гэдэг шидэт арга байдаг. Яг энэ хаалт бол чухамдаа түүнийг заагаад байгаа хэрэг. Энэ тухай бид дараагийн хичээлээр үзэх болно.

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

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

Интернет сайтад зочлоход тоолуур, төрөл бүрийн график гэх мэт зүйлүүд их байдаг. Эдгээрийн гол онцлог нь динамик байдлаар ажиллаж байдагт байгаа юм. Энэ хичээлээр бид PHP –гээр динамик зургуудыг хэрхэн үүсгэх талаар авч үзэх болно.
Зураг гэдэг нь цэг бүр нь тодорхой өнгийг агуулж байгаа цэгүүдийн олонлог юм. Өөр хоорондоо шахалтын түвшин, чанар гэх мэт үзүүлэлтээрээ ялгаатай зургийн олон форматууд байдаг. Гэхдээ интернтэд GIF (Graphic Interchange Format), JPEG (Joint Photographic Experts Group), PNG (Portable Network Graphics) гэсэн форматуудыг голлон ашигладаг. Ямар зургийг үзүүлэхээс хамаарч форматыг сонгодог. Олон өнгөний хослолтой фото зургуудад JPEG форматыг ашигладаг бол өнгө багатай жижиг (товч, баннер г.м) зургуудад GIF болон PNG форматыг голлон ашиглах жишээтэй.

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

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

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

Өвлөх (Inheritance) гэдэг нь "эцэг" хэмээн нэрлэгдэх байгаа классаас шинэ классыг үүсгэх боломжийг бүрдүүлдэг обьект хандалтат программчлалын үндсэн механизмуудын нэг юм. Энэхүү механизмыг ашиглан өөр классаас үүсгэсэн классыг дэд класс гэж нэрлэдэг. Ийм холбоосыг "эцэг", "хүүхэд" гэсэн ойлголтоор голдуу тайлбарладаг. "Хүүхэд" класс нь "эцэг" -ээс үүсэн түүний шинж болон аргуудыг өвлөн авна. Дэд класст эцэг классаас ("эцэг" классыг бас супер класс гэж нэрлэдэг) өвлөгдөн ирсэн боломжуудыг ихэнх тохиолдолд шинэ боломжуудаар өргөжүүлэн өгдөг.

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

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

Нөхцөлт оператор

Нөхцөлт оператор нь тодорхой нөхцлөөс хамаарч програмын ажиллагааны цаашдын үргэлжлэх боломжийг (зам) сонгох хэрэгсэл юм. Жишээ нь бид өдөр бүр цахим шуудангаа шалгахын өмнө хэрэглэгчийн ID, нууц үгээ оруулж өгдөг шүү дээ. Хэрэглэгчийн оруулсан мэдээллийг цахим шуудангийн програм шалгаад хэрвээ мэдээлэл үнэн бол шуудангийн хайрцагт нэвтрүүлж харин мэдээлэл буруу бол дахин оруулахыг шаарддаг. Энэ бол нөхцөлт операторыг ашиглаж байгаа тод жишээ юм.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

Хуваах нь нэг тоо нөгөө тоонд хэдэн удаа агуулагдаж буй тодорхойлох арифметикийн үйлдэл.
Хуваалтыг нэг бус удаа…

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

 

Зуучлагч (Mediator) нь олон тооны обьектууд бие биетэйгээ холбоос үүсгэхгүйгээр харилцан ажиллах боломжийг хангах загварчлалын хэв юм. Ингэснээр…

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

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

Гурван оронтой бүх тэгш тооны цифрүүдийн нийлбэрийг ол.

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

 

олон гишүүнтийг үржигдхүүн болгон задал.

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

 

Адил хажуут трапецийн сууриуд a=21 см, b=9 см өндөр h=8 см бол трапецийг багтаасан тойргийн радиусийг ол.

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