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

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

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

PHP (Personal Home Page Tools) гэдэг нь веб сервер дээр HTML хуудас үүсгэхэд зориулагдсан програмчлалын хэл юм. Энэ хэлийг сурснаар та хуудасны тоолуур, зочны хуудас гэх мэт энгийн програмаас хэрэглэгчийн үйлдлийг хянах чадвартай том хэмжээний веб сайтыг зохиох боломжтой. Хэлний бүх боломжийг тайлбарлан бичихэд олон хуудас материал болох хэдий ч хэл нь хэн ч үзэхэд энгийн ойлгомжтой. Өнөөдөр олон мянган програм зохиогчид PHP ашиглаж, сая сая веб сайтууд энэ хэл дээр ажиллаж байна.

Хэлний түүхээс

PHP нь програмчлалын бусад хэлнүүдээс ялгаатай нь хэлийг ямар нэгэн компани эсвэл мундаг програм зохиогч боловсруулаагүй харин Расмус Лердорф гэх жирийн програм зохиогч 1994 онд зохиосон. Хэл зохиосон зорилго нь Расмус өөрийн веб хуудасаа илүү интерактив байдалтай болгох байлаа. Удалгүй Расмус програмчлалын C хэл дээр өгөгдлийн сантай холбогдох боломжтой эхний хувилбарыг гаргасан. Энэ нь хэрэглэгчдэд энгийн веб програм зохиох бололцоог олгосон.
1997 онд веб формтой ажиллах боломжтой PHP/FI 2 (Personal Home Page / Form Interpreter) хувилбар гарсан. Энэ хувилбарыг боловсруулах ажилд нилээд олон хүмүүс оролцон ажилласан байна. Ер нь хэл нь анхнаасаа нээлттэй кодтой байсан нь хэн хүссэн хүн хэлийг боловсронгуй болгох ажилд оролцох боломжийг нээж өгсөн. Эдгээр хүмүүст Зив Сураски (Zeev Suraski), Энди Гутманс (Andi Gutmans) нар нь зүй ёсоор тооцогдоно. Расмус дээрх хүмүүстэй хамтран ажилласны үр дүнд 1998 онд PHP 3 гэсэн албан ёсны хувилбарыг гаргасан. Үүний дараа хэл зохиогчид PHP –г цаашид улам боловсронгуй болгосноор 2000 онд хэлний 4.0 хувилбар гарсан ба эдүгээ хэлний 5.0 хувилбар гараад байгаа билээ.

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

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

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

Обьект хандалтад программчлалыг суралцахад тойрон гарах аргагүй нэг чухал сэдэв бол онцгой байдлын (exceptions) боловсруулалт юм. Сэдвийг ойлгоход хялбар байх үүднээс шууд онцгой байдал буюу exceptions -ийн тодорхойлолтоос эхлэе. exceptions гэдгийг онцгой байдал гээд орчуулчихлаа. Хир оновчтой болсныг сайн мэдэхгүй. Гэхдээ ойлгох нь чухал даа.

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

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

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

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

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

react програмд олон хуудас үүсгэн удирдахын тулд react -ийн бүрэлдхүүнд ордоггүй ч түүнтэй нягт холбоотой ажилладаг нэмэлт пакетийг…

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

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

функц өгөгдөв.

  1. f(x) функцын x0=5 абсцисстай M цэгт татсан шүргэгч шулууны тэгшитгэл
  2. f(x) функцын график, дээрх шүргэгч шулуун болон координатын тэнхлэгүүдээр хүрээлэгдсэн дүрсийн талбай  
  3. f(x) функцын графикийг M цэгт шүргэх, төв нь OX (абсцисс) тэнхлэг дээр орших тойргийн тэгшитгэл

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

 

илэрхийллийн a=36,7 тэнцүү байх утгыг ол.

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

 

a ба b нь 3x2-x-1=0 тэгшитгэлийн шийдүүдтэй тэнцүү бол илэрхийллийн утгыг ол.

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