ОХП -ын дадлагын ажил 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(); гэж их хаалтыг бичээд байгааг анхаарна уу. Энд хаалт бичин өгөөд байгаа нь ямар нэгэн зүйлд хэрэгтэй гэдгийг логик тань хэлж байгаа бол та яг зөв ойлгосон байна.
Класст конструктор гэдэг шидэт арга байдаг. Яг энэ хаалт бол чухамдаа түүнийг заагаад байгаа хэрэг. Энэ тухай бид дараагийн хичээлээр үзэх болно.

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

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

Cookie гэж юу болох, түүнийг үүсгэх, унших, устгах талаар Cookie-тэй ажиллах хичээлд үзсэн. Энэ хичээлээр Php -гийн Cookie ойлголтын талаар арай дэлгэрүүлэн авч үзье. Сервер хэрэглэгчээс POST эсхүл GET аргын алингаар нь ч бай өгөгдөл хүлээн авсан байлаа ч тэр хэрэглэгчийн талаар юу ч мэдэхгүй. Өөрөөр хэлбэл сервер өгөгдөл хүлээн аваад боловсруулаад үр дүнг бидэнд буцаана. Бид серверт шинээр эсхүл дахин шаардлагыг илгээхэд тэр бидний талаар юуг ч санахгүй тул таныг шинэ хэрэглэгч эсхүл үгүй гэдгийг мэддэггүй. Энэ нь хэн нэгэн сохор хөгжимчин гудамжинд тоглолт хийгээд зогсож байхад өнгөрч яваа хүн түүний хандивын хайрцагт мөнгө хийгээд дараа нь буцахдаа дахин хийхтэй төстэй зүйл. Хөгжимчин мөнгө хийсэн хүн түрүүнд нь өгсөн хүн үү эсхүл өөр хүн байв уу гэдгийг мэдэхгүй шүү дээ.

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

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

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

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

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

1-р хичээлд сайтын агуулгыг хадгалах баазыг MySql серверт үүсгэн өгсөн болохоор төлөвлөгөөний дагуу articles хүснэгтийг үүсгэх ажлыг эхлэе. Манай өгөгдлийн сан ганцхан хүснэгттэй байна. Цуврал хичээлийн зорилго бол маш энгийн агуулгын удирдах системийг хийх. Том хэмжээтэй олон хүснэгт бүхий систем хийх нь таны цаашдын зорилго болно. Өгөгдлийн санд хандан агуулгыг татан аваад түүнийгээ хэрэглэгчид үзүүлэх, өгөгдлийн сандаа мэдээлэл оруулан засварлах ажиллагаа бол динамик сайтын ажиллагааны үндсэн зарчим. Энэ бүгдийг ойлгоход цуврал хичээлүүд хангалттай мэдлэгийг өгч чадна.

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

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

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

Делегатууд хичээлд ухагдхууны талаар дэлгэрэнгүй үзсэн ч жишээнүүд делегатийн хүчийг бүрэн харуулж чадахааргүй байсан.…

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

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

Адил хажуут трапецын сууриуд 20 ба 12 см. Трапецыг багтаасан тойргийн төв их суурь дээр байрлах бол трапецын диагналыг ол.

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

 

тэгшитгэлийн язгууруудын нийлбэрийг ол.

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

 

Зурагт үзүүлсэн хагас тойрогт бол AB -ийн уртыг ол.

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