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

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

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

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 хувилбар гараад байгаа билээ.

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

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

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

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

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

Програм зохиох үед маш их хэмжээний өгөгдөлтэй ажиллах тохиолдол их гардаг. Ялангуяа өгөгдлийн сантай ажилладаг програмын хувьд асуудлыг дан ганц хувьсагчаар шийдэхэд бэрхшээлтэй. Учир нь асар олон тооны хувьсагчийг програмд ашиглах нь програмын кодыг уншихад хүндрэлтэй болгохоос гадна алдаа гаргах том шалтгаан болно. Их хэмжээний хувьсагчтай ажилладаг кодод алдаа олох нь тун амаргүй ажил. Иймд ихэнх програмчлалын хэлэнд утгуудын олонлог хадгалж чадах тусгай төрлийн хувьсагчийг хэрэглэдэг. Үүнийг массив гэдэг. Бид өмнө нь Array гэсэн өгөдлийн төрөл байдгийг үзсэн. Ийм төрөлтэй хувьсагчууд нь массив юм. PHP нь массивтай ажиллах ажиллагаанд бусад програмчлалын хэлүүдийг бодвол илүү чөлөөтэй байдлыг олгоно. Энэ нь програм зохиогчид өргөн боломж олгодог хэдий ч таниас програм зохиохдоо их анхааралтай ажиллахыг давхар шаардана.

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

Ямар ч хэлийг судлахын өмнө бичлэгийн дүрэмтэй танилцах хэрэгтэй. Програмын хэлийг үзэж эхлэхэд бараг уламжлал болсон жишээнээс эхэлье. Энэ нь мэдээж “Hello, Word!” үгийг броузерын дэлгэцэнд гаргах юм. Текстэн редактораа нээгээд доорх жишээг оруулаад файл (жишээ нь hello.php) болгон хадгална.

<?php
echo"Hello, World!";
?>

Файлаа веб серверийнхээ үндсэн хавтаст шилжүүлэн хуулаад веб броузерынхаа хаягийн мөрөнд http://localhost/hello.php гэж бичээд Enter дарна.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

олон гишүүнтийн язгуурууд x1, x2, x3 (x1<x2<x3) бол
1.
2. x1, x2, x3 арифметик прогрес үүсгэх бол
3. Уул прогрессын ялгавар
4.

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

 

sin90 -ийг олно уу.

Жич: Хатуу самар даа. Сурагчид барна гэхэд хүнд болов уу. ЕБС-ийн хүрээний аргаар л бодолтыг хийж байгаа тул бодолтыг харвал гайгүй ч юм шиг санагдаж магадгүй гоё бодлого.

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

 

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

Жич: Бодох арга орж ирж байна уу. Найз нөхөд, багштайгаа хамжаад үзээрэй. Иймэрхүү бодлогууд сэтгэлгээг хөгжүүлэх, арга техникт суралцахад тустай. 

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