PHP програмчлалын талаар зарим нэг зөвлөгөө өөрийн туршлага дээр үндэслэн өмнө бичиж байсан дээрээ нэмье! Хэрэв та гурваас дээш жилийн туршлагатай бол минийхээс илүү тул цааш унших хэрэггүй байхаа.

1. Харьцуулах үйлдэл.
PHP маш өргөн боломж олгодог сайхан хэл. Гэхдээ зарим тохиолдолд энэ нь найдвартай байдал алдаанд өртөмхий байдалд муугаар нөлөөлөх нь бий. Та PHP хэл дээр харьцуулах үйлдэл хийхдээ аль болох === оператор хэрэглэж байх хэрэгтэй. Бид ихэнх тохиолдолд нэгэн төрлийн хувьсагч шалгадаг. Жишээлбэл if ($action==”list”) гэхэд $action String төрөлтэй байна. Хэрэв та == оператор ашиглавал янз бүрийн төрөлтэй харьцуулахболомжтой ба ямар нэг тэмдэгт мөр төрлийн утгатай хувьсагч ийг бүхэл тоотой харьцуулах үед 0 утга руу шилжүүлдэг тул тэр үед алдаа гардаг тохиолдол бий. Гэхдээ гол ач холбогдол нь === оператор == оператораас хамаагүй хурдан. Төрөл шалгахгүй, төрөл шилжүүлэхгүй гээд бодохоор мэдээж хэрэг.
Мөн харьцуулах үйлдэл хийх үедээ эхлээд утга дараа нь хувьсагчаа бичиж байвал зүгээр. Жишээлбэл: if ($action==”list”) оронд if (“list”==$action) гэх мэт. Учир нь бид яарсан үедээ == оронд = бичих тохиолдол гардаг ба PHP нь нөхцөл шалгахбүтцэдээ утга олгох үйлдл ийг дэмждэг харьцуулах гэж байсан хувьсагчид утга олгоод явчихдаг. жишээлбэл: if ($action=”list”) үед $action хувьсагчийн утга list болж дарагдах ба нөхцөл ямар ч үед үнэн болно. Тийм учраас тест хийх үе шатанд ийм алдаа илрүүлэхэд ядаргаатай байдаг. Хэрэв if (“list”=$action) гэж харьцуулбал PHP интерпретер алдаа заана, амар.

2. Хувьсагч функц дуудаж програмын үр ашгийг дээшлүүлэх
Сүүлийн үед миний бичсэн зарим класс 1000 аас дээш мөр бүхий хэтэрхий том болоод ирэв. Энэ нь мэдээж хурданд муугаар нөлөөлж байгаа. Учир нь дуудалт бүрт санах ойд тэр том файлыг ачаалах нь утгагүй хэрэг. Тиймээс ийм классыг задалж багасгах хэрэг гарав. Өгөгдлийн баазтай харьцуулбал normalisation хийх л юм уу даа. Жишээлбэл нэг класст banner нэмдэг, хасдаг болон баннерийн эзэмшигчийг нэмдэг, хасдаг үйлдлүүд цуг байлаа гэж бодъё. Энэ үед бид banner болон bannerOwner-ийг тус тусад салган класс болгоод 2 саланга файлд хадгална. Ингээд үйлдлүүдээ салгах хэрэгтэй болно.
Жишээлбэл баннер нэмэх үед баннер классаас баннер нэмэх функц дуудна. Баннер эзэмшигчийн хаяг засварлах үед баннерЭзэмшигч классаас хаяг засварлах функц дуудна. Өмнө нь нэг том файлд байх үед ямар ч үйлдэл хийсэн тэр том файлаа ачаалаад л хийнэ гэсэн үг.
Үүнийг дараах байдлаар зохицуулж болно.

$bannerFuncs = array (
      'add'=> 'addbanner',
      ...
    );
$bannerOwnerFuncs = array (
       'editAddr'=>'editAddress',
       ...
    );
   if (in_array($action,array_keys($bannerFuncs)) ) {
      require_once 'Banner.php';
      $banner = new Banner($db);
      if (isset($bannerFuncs[$action])) {
        $banner->$bannerFuncs[$action]();
      } else {
        $banner ->defaultFunction();
      }
    } elseif (in_array($action,array_keys($bannerOwnerFuncs))) {
      require_once 'BannerOwner.php';
      $bannerOwner = new bannerOwner ($db);
      if (isset($bannerOwnerFuncs[$action])) {
        $bannerOwner->$bannerOwnerFuncs[$action]($op);
      } else {
        $bannerOwner->defaultFunction();
      }
    } else {
      require_once 'Banner.php';
      $banner = new Banner($db);
      $banner ->defaultFunction();
    }

Иймэрхүү байдлаар салгахад таны програм илүү хурдан ажиллах болно. Үүнээс гадна яагаад би үйлдэл сонгох үед switch case эсвэл elseif statement ашиглаагүй вэ гэвэл мөн л хурдтай холбоотой. Массиваар авбал аль алинаас нь илүү хурдан.
Мөн нэг классын зарим функц олон параметртэй зарим нь параметргүй байж болно. Үүнийг хялбархан шийдэх боломжтой тул та өөрөө хийнэ бизээ.
Би энд зөвхөн хэрхэн үр ашигтай оптимал програмчлахыг авч үзсэнээс яаж хурдлуулах тухай бичсэнгүй. Жишээлбэл Zend, eaccelerator зэрэг багажууд ашиглаад програмын эхээ байт кодонд хөрвүүлэн хурдасгах техникийн аргууд байдаг. Гэхдээ оптимал програмчилж чадаагүй програмыг хэчнээн техникийн хүчээр үзээд үзээд оптимал програмчиллаас төдийлөн дээрдэхгүй.
Эцэст нь нэг стандарт шахуу болсон зүйл сануулахад: Та ямар ч програмчлалын хэл ашиглаж байсан Классын нэрийн эхний үсгийг томоор функцийн нэр болон хувьсагч, объектын нэрийн эхний үсгийг жижгээр бичиж заншвал код хамаагүй цэвэрхэн ойлгомжтой харагддагийг мэдэх бизээ.


2 Comments

sunshine · 2008/11/15 at 12:50

dajgui yumaa my medlegt ih nemer bolloo thank you mongolchuudaa

Jigmee · 2008/11/24 at 17:22

сайн байн уу таны блог их таалагдлаа мэдээнүүдийг чинь их ч уншлаа гоё гоё юм их байна. би нэт програмчлал сурмаар байна. Гэсэн ч энэ тал дээр монгол хэл дээр уншиж судлах юм юу ч байхгүйм. таниар заалгаж болох уу таны гарын шавь болие зөвшөөрч байвал над руу майл бичээрэй

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *