Обьект хандалтад программчлалын дадлагын 4-р хичээлээр PHP -н онцгой тохиолдолын боловсруулалтыг өмнөх дадлагын ажлуудад хийгдсэн жишээн дээр хэрэгжүүлэх болно. Иймээс дадлагын ажлыг эхлэхийн өмнө танд Онцгой тохиолдол хичээлийн материалтай танилцахыг зөвлөх байна. Түүнээс гадна өмнөх дадлагын ажлуудыг 1-р ажил, 2-р ажил, 3-р ажил хичээлүүдээс үзэх боломжтой.
Дээрх материалуудтай танилцсан бол шууд даалгавартаа орцгооё.
- Users классын конструкторын бүх параметрүүдэд анхдагч утгуудаар ("") хоосон утгыг олгох
- Users классын конструкторт шаардлагатай өгөгдлүүдийг шалгах онцгой тохиолдолын боловсруулагчийг оруулах
- Онцгой тохиолдолыг баригчийг тодорхойлон хөтөчид алдааны мэдээллийг үзүүлэх
- Ямар нэгэн параметргүй 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{} бүтэц бол алдаа боловсруулагч биш гэдгийг сануулъя. Энэ бол онцгой тохиолдолыг баригч юм. Кодод алдаа гарах магадлалыг бууруулах зорилгоор ашигладаг бүтэц. Өөрөөр хэлбэл кодын найдвартай ажиллагааг хангах бүтэц гэж үзэж болно. Бүтцийг яг шаардлагатай гэсэн газраа л ашиглахгүй бол кодын уншихад хүндрэл үүсгэх талтай байдгийг сануулъя.
Обьект хандалтад программчлалыг бодит жишээнд ашиглахыг АУСистем хийцгээе цуврал хичээлүүдээс үзээрэй.