ខ្សែអក្សរអថេរ (12)
ខ្ញុំមានមុខងារមួយគឺ NotEmpty ដែលត្រឡប់ពិត ប្រសិនបើខ្សែអក្សរមិនទទេ ហើយមិនពិត ប្រសិនបើខ្សែអក្សរទទេ។ ខ្ញុំបានរកឃើញថាវាមិនដំណើរការទេប្រសិនបើខ្ញុំឆ្លងកាត់បន្ទាត់ទទេតាមរយៈវា។
មុខងារ isNotEmpty($ input) ( $strTemp = $input; $strTemp = trim($strTemp); if(strTemp != "") // សាកល្បងវាផងដែរ "if(strlen($strTemp) > 0)" (ត្រឡប់ពិត ;) ត្រឡប់មិនពិត ;
ខ្សែអក្សរត្រូវបានធីកដោយប្រើ isNotEmpty:
If(isNotEmpty($userinput["phoneNumber"])) ( // validate the phone number ) else ( បន្ទរ "លេខទូរស័ព្ទមិនបានបញ្ចូលទេ
";
}
ប្រសិនបើបន្ទាត់នៅទទេ ផ្សេងទៀតមិនត្រូវបានប្រតិបត្តិ ខ្ញុំមិនយល់ថាហេតុអ្វីទេ អ្នកណាម្នាក់អាចបំភ្លឺអំពីបញ្ហានេះ។
ចម្លើយ
ប្រសិនបើអ្នកមានវាលមួយឈ្មោះ serial_number ហើយអ្នកចង់ពិនិត្យមើលកន្លែងទំនេរ
$serial_number = trim($_POST); $q="ជ្រើសរើស * ពីផលិតផលដែល user_id="$_SESSION""; $rs=mysql_query($q); while($row=mysql_fetch_assoc($rs))(ប្រសិនបើ(ទទេ($_POST["irons"])))($irons=$row["product1"];)
វិធីនេះអ្នកអាចធ្វើម្តងទៀតតាមរយៈរង្វិលជុំទាំងអស់នៅក្នុងរង្វិលជុំជាមួយនឹងមុខងារទទេផ្សេងទៀត។
ជាការប្រសើរណាស់, ជំនួសឱ្យការឆ្លើយ (ខ្ញុំជឿថាអ្នកបានដោះស្រាយបញ្ហារបស់អ្នករួចហើយ) ខ្ញុំនឹងផ្តល់ឱ្យអ្នកនូវដំបូន្មានមួយចំនួន។
ខ្ញុំមិនដឹងពីអ្នកដទៃទេ ប៉ុន្តែខ្ញុំផ្ទាល់មានអារម្មណ៍តានតឹងពេលឃើញរឿងមួយដូចជា៖
ប្រសិនបើ(<
នេះតម្រូវឱ្យមានការត្រឡប់មកវិញ "ឆើតឆាយ<
ខ្ញុំគ្រាន់តែសរសេរមុខងារ is_string ផ្ទាល់ខ្លួនរបស់ខ្ញុំ ដើម្បីពិនិត្យមើលប្រភេទ និង strlen ដើម្បីពិនិត្យមើលប្រវែង។
មុខងារទទេStr($str) (ត្រឡប់ is_string($str) && strlen($str) === 0; ) បោះពុម្ពទទេStr("") ? "ទទេ" : "មិនទទេ"; // ទទេ
កែសម្រួល៖ អ្នកក៏អាចប្រើមុខងារ trim ដើម្បីពិនិត្យមើលថាតើខ្សែអក្សរមិនមាន។
Is_string($str) && strlen(trim($str)) === 0;
PHP មានមុខងារដែលភ្ជាប់មកជាមួយហៅថាទទេ() ការធ្វើតេស្តនេះត្រូវបានធ្វើដោយវាយ if(empty($string))(...) php.net link: php empty
អ្នកមានចម្លើយ ប៉ុន្តែក្នុងករណីរបស់អ្នកអ្នកអាចប្រើបាន។
ត្រឡប់ទទេ ($ input);
ត្រឡប់ is_string($ input);
បញ្ហាសាមញ្ញ។ ផ្លាស់ប្តូរ៖
ប្រសិនបើ (strTemp !="")
ប្រសិនបើ ($strTemp !="")
ប្រហែលជាអ្នកក៏អាចប្តូរវាទៅជា៖
ប្រសិនបើ($strTemp !== "")
ចាប់តាំងពី !="" នឹងត្រឡប់ពិត ប្រសិនបើអ្នកឆ្លងកាត់លេខ 0 និងករណីមួយចំនួនផ្សេងទៀត ដោយសារការបំប្លែងប្រភេទស្វ័យប្រវត្តិរបស់ PHP ។
សូមចងចាំផងដែរថា PHP មានមុខងារទទេ () រួចហើយ។
PHP វាយតម្លៃខ្សែអក្សរទទេទៅជាមិនពិត ដូច្នេះអ្នកអាចប្រើបានយ៉ាងសាមញ្ញ៖
ប្រសិនបើ (trim($userinput["phoneNumber"])) ( // បញ្ជាក់លេខទូរស័ព្ទ ) else ( បន្ទរ "លេខទូរស័ព្ទមិនបានបញ្ចូលទេ
";
}
ខ្ញុំតែងតែប្រើ regex ដើម្បីពិនិត្យមើលខ្សែអក្សរទទេ ដែលមានអាយុកាលតាំងពីសម័យ CGI/Perl ក៏ដូចជា Javascript ដូច្នេះហេតុអ្វីមិនមែនជាឧទាហរណ៍ PHP (ទោះបីជាមិនបានសាកល្បងក៏ដោយ)
ត្រឡប់ preg_match("/\S/", $ input);
កន្លែងដែល \S តំណាងឱ្យតួអក្សរណាមួយដោយគ្មានចន្លោះ
គ្រាន់តែប្រើមុខងារ strlen()
ប្រសិនបើ (strlen($s)) ( // មិនទទេ)
ថ្មីៗនេះខ្ញុំបានសួរខ្លួនឯងនូវសំណួរដូចគ្នា។
មានដំណោះស្រាយជាច្រើនដែលអាចមាន ខាងក្រោមនេះជាដំណោះស្រាយត្រឹមត្រូវចំនួន 3៖
- s.indexOf(starter) === 0
- s.substr(0,starter.length) === ចាប់ផ្តើម
- s.lastIndexOf(starter, 0) === 0 (បន្ថែមបន្ទាប់ពីមើលចម្លើយរបស់ Mark Bayer)
ដោយប្រើរង្វិលជុំ៖
មុខងារ startsWith(s,starter) (សម្រាប់ (var i=0,cur_c; i< starter.length; i++) { cur_c = starter[i]; if (s[i] !== starter[i]) { return false; } } return true; }
ខ្ញុំមិនទាន់បានឆ្លងកាត់ដំណោះស្រាយចុងក្រោយដែលពាក់ព័ន្ធនឹងការប្រើរង្វិលជុំទេ។
គួរឱ្យភ្ញាក់ផ្អើល ដំណោះស្រាយនេះគឺអស្ចារ្យជាង 3 ដំបូង។
នេះជាការសាកល្បង jsperf ដែលខ្ញុំបានរត់ដើម្បីឈានដល់ការសន្និដ្ឋាននេះ៖ http://jsperf.com/startswith2/2
ps: ecmascript 6 (សុខដុមរមនា) ណែនាំ startsWith របស់វាផ្ទាល់ជាមួយនឹងវិធីសាស្រ្តសម្រាប់ខ្សែអក្សរ។
គិតថាតើពេលវេលាប៉ុន្មាននឹងត្រូវបានរក្សាទុក ប្រសិនបើពួកគេបានគិតថានឹងរួមបញ្ចូលវិធីសាស្ត្រដែលត្រូវការច្រើននេះនៅក្នុងកំណែដំបូង។
ធ្វើបច្ចុប្បន្នភាព
ចំណាំថាមានការបង្កើនប្រសិទ្ធភាពរង្វិលជុំចំនួន 2 ដែល Steve រួមបញ្ចូល ទីមួយក្នុងចំណោមទាំងពីរបានបង្ហាញពីដំណើរការប្រសើរជាងមុន ដូច្នេះខ្ញុំនឹងបង្ហោះកូដនោះខាងក្រោម៖
អនុគមន៍ startsWith2(str, prefix) ( if (str.length< prefix.length) return false; for (var i = prefix.length - 1; (i >= 0) && (str[i] === បុព្វបទ[i]); --i) បន្ត; ត្រឡប់ i< 0; }
ប្រសិនបើនៅពេលធ្វើការជាមួយខ្សែអក្សរ អ្នកត្រូវពិនិត្យមើលថាតើខ្សែអក្សរទទេឬអត់ អ្នកសរសេរកម្មវិធីចាប់ផ្តើមប្រើជាធម្មតា strlen(). មុខងារនេះគឺលឿនណាស់ព្រោះវាមិនអនុវត្តការគណនាណាមួយទេ ប៉ុន្តែគ្រាន់តែត្រឡប់តម្លៃដែលស្គាល់រួចមកហើយនៃប្រវែងខ្សែអក្សរដែលមាននៅក្នុង zval (PHP ប្រើរចនាសម្ព័ន្ធ C ដើម្បីរក្សាទុកអថេរ)។ ប៉ុន្តែនៅតែដោយសារតែ strlen()- នេះគឺជាមុខងារ វាយឺតបន្តិច ព្រោះវាទាមទារសកម្មភាពជាច្រើននៅពេលហៅ ដូចជាការបំប្លែងទៅជាអក្សរតូច និងស្វែងរកតារាង hash ។ ក្នុងករណីខ្លះ អ្នកអាចបង្កើនល្បឿនប្រតិបត្តិនៃកូដរបស់អ្នកដោយប្រើ ទទេ ()..., ប៉ុន្តែផងដែរ។ ទទេ ()អ្នកនៅតែអាចបង្កើនប្រសិទ្ធភាពវាបន្តិច។
សូមលើកឧទាហរណ៍មួយ។ឧទាហរណ៍ ពិនិត្យផ្លូវរូបភាពមុខងារពិនិត្យមើលថាតើផ្លូវទទេឬអត់ បន្ទាប់មកជំនួសវាដោយផ្លូវផ្សេងទៀត ឧទាហរណ៍ “images/noimage.jpg”។
ដូច្នេះហើយ កិច្ចការទាំងមូលនឹងចាប់ផ្តើមដើម្បីពិនិត្យមើលថាតើអថេរនៃប្រភេទខ្សែអក្សរគឺទទេ។ តោះសាកល្បងវិធី ៤ យ៉ាង៖
- ប្រសិនបើ(strlen($img_path)>0)
- ប្រសិនបើ($img_path(0))
- ប្រសិនបើ (ទទេ($img_path))
- និងវិធីមួយទៀតសម្រាប់ចុងក្រោយ។
ដូច្នេះហើយយើងនឹងសរសេរតាមវិធីដំបូង៖
មុខងារ check_image_path($img_path ) (ប្រសិនបើ (strlen ($img_path) >0 ) ( $img_path = "images/noimage.jpg" ; ) ត្រឡប់ $img_path ; )ចូរអនុវត្តការធ្វើតេស្ត ពេលវេលាសាកល្បងជាមធ្យមបានយក 1.43795800209 វិ។
គិតអំពីវាបន្តិច... អ្នកអាចចូលប្រើតួអក្សរទីមួយនៃបន្ទាត់ក្នុងពេលតែមួយ ជាជាងបន្ទាត់ទាំងមូល។ ប្រសិនបើតួអក្សរទីមួយនៅទីនោះ នោះខ្សែអក្សរមិនទទេទេ។ តួអក្សរទីមួយនៅក្នុងបន្ទាត់គឺលេខ "0" ។
មុខងារ check_image_path($img_path) (ប្រសិនបើ ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) ត្រឡប់ $img_path ;)ពេលវេលាសាកល្បងជាមធ្យមបានយក 1.19431300163 វិនាទី ១៧% នៃពេលវេលាលេង
តោះព្យាយាមសរសេរដោយប្រើទទេ () ឥឡូវនេះ៖
មុខងារ check_image_path($img_path) (ប្រសិនបើ (ទទេ ($img_path))) ( $img_path = "images/noimage.jpg" ;) ត្រឡប់ $img_path ;)ពេលវេលាសាកល្បងជាមធ្យមបានយក 1.1341319084 វិ។ 5% នៃពេលវេលាលេងឡើងវិញពីឧទាហរណ៍មុន។
ឥឡូវនេះ សូមក្រឡេកមើលឧទាហរណ៍ចុងក្រោយ និងចុងក្រោយខាងលើយើង។ តោះមើលពីរបៀបដែលវាអាចបញ្ចូលគ្នា។ គិត... តើអ្នកអាចបង្កើនប្រសិទ្ធភាពដោយរបៀបណាទៀត?
មុខងារ check_image_path($img_path) (ប្រសិនបើ (ទទេ ($img_path ( 0 ) ) ) ( $img_path = "images/noimage.jpg" ; ) ត្រឡប់ $img_path ; )ពេលវេលាសាកល្បងជាមធ្យមបានយក 1.07465314865 វិនាទី ហើយម្តងទៀត យើងបានឈ្នះ 5% នៃពេលវេលា...
តើវាដំណើរការដោយរបៀបណា ហើយហេតុអ្វីបានជាវាលឿនជាង? ហើយនៅទីនេះ $img_path(0)ត្រឡប់តួអក្សរដំបូង... និងបន្ទាប់មកមុខងារ ទទេ ()ពិនិត្យរកខ្សែអក្សរទទេ... ភាពខុសគ្នាពីឧទាហរណ៍មុនគឺមានតែតួអក្សរមួយប៉ុណ្ណោះដែលត្រូវបានបញ្ជូនទៅមុខងារ មិនមែនខ្សែអក្សរទាំងមូលទេ។ ដូច្នេះ ចាប់ពីឧទាហរណ៍ដំបូងដល់លើកចុងក្រោយយើងឈ្នះ 25% ពេលវេលា។
នៅក្នុង PHP តម្លៃ FALSE និង NULL និងតម្លៃដែលជាប់ទាក់ទងរបស់ពួកគេគឺខុសពីរបៀបដែលវាជាធម្មតានៅក្នុងភាសាផ្សេងទៀត ហើយមានលក្ខណៈពិសេសមិនច្បាស់ផ្ទាល់ខ្លួន។
អត្ថបទពិភាក្សាអំពីលក្ខណៈពិសេសទាំងនេះ។
សម្រាប់អ្នកចាប់ផ្តើមដំបូង វាអាចមានប្រយោជន៍សម្រាប់ការមើលរូបភាពពេញលេញ សម្រាប់អ្នកអានដែលមានបទពិសោធន៍ វាអាចមានប្រយោជន៍ក្នុងការធ្វើឱ្យការចងចាំរបស់ពួកគេឡើងវិញ ប្រសិនបើភាពស្រពិចស្រពិលខ្លះបានធ្វើឱ្យគំនិតរបស់ពួកគេ។
FALSE ក្នុង If statements
យោងតាមឯកសារ PHP តម្លៃខាងក្រោមគឺ FALSE បន្ទាប់ពីបោះទៅប៊ូលីន៖- តម្លៃប៊ូលីនខ្លួនវាគឺជា FALSE
- ខ្សែអក្សរទទេ ("") និងខ្សែអក្សរ "0" ។
- អារេទទេ (អារេ) - អារេ () ។
- វត្ថុដែលមានអថេរសមាជិកសូន្យ (PHP 4 តែប៉ុណ្ណោះ មិនត្រូវបានគ្របដណ្តប់នៅក្នុងអត្ថបទនេះទេ)
- តម្លៃ NULL ពិសេស (រួមទាំងអថេរដែលមិនបានកំណត់)
- វត្ថុ SimpleXML (មិនត្រូវបានគ្របដណ្តប់នៅក្នុងអត្ថបទនេះ)
ប្រសិនបើ (…) បន្ទរ “1”; ផ្សេងទៀតបន្ទរ “0”;
បន្ទាប់មកខ្សែអក្សរ "0" នឹងត្រូវបានបោះពុម្ព។
ប្រសិនបើតម្លៃនៃអថេរមិនត្រូវបានកំណត់ (មិនកំណត់) នោះការព្រមានក៏អាចត្រូវបានចេញផងដែរ។ អនុញ្ញាតឱ្យយើងរំលឹកអ្នកថាការព្រមាននៅក្នុងលក្ខខណ្ឌអាចត្រូវបានយកចេញដោយការសរសេរ @ មុនពេលអថេរ។
ឧទាហរណ៍:
ប្រសិនបើ (@$undefVar) (…)
ប៉ុន្តែអ្នកគួរតែប្រើ @ តែក្នុងករណីធ្ងន់ធ្ងរនៅពេលដែលអ្នកបានគិតដោយប្រុងប្រយ័ត្ន ហើយមិនមានជម្រើសសមរម្យផ្សេងទៀតទេ។ មើលមុខងារ isset()។
មុខងារ is_null() និងភាសាបង្កើត isset() និងទទេ()
is_null() ត្រឡប់ TRUE សម្រាប់តែអថេរដែលមិនត្រូវបានផ្តល់តម្លៃណាមួយ ឬដែលត្រូវបានកំណត់តម្លៃ NULL ។isset() ត្រឡប់តម្លៃប៊ូលីនមួយទល់នឹងមួយ ប្រៀបធៀបទៅនឹង is_null() ។
ប្រសិនបើអថេរមិនត្រូវបានផ្តល់តម្លៃទេ នោះ is_null() ក៏ចេញការព្រមាន "អថេរដែលមិនបានកំណត់" មិនដូច isset() ដែលមិនចេញការព្រមានណាមួយឡើយ។
សូមចាំថា ដើម្បីលុបតម្លៃនៃអថេរ អ្នកអាចប្រើមុខងារ unset()។ អ្នកក៏អាចកំណត់តម្លៃ NULL សម្រាប់គោលបំណងនេះ ដើម្បីជៀសវាងការព្រមានពីអ្នកចងក្រង នៅពេលព្យាយាមអានតម្លៃនៃអថេរមួយ។
សូមចំណាំថា មិនដូចអថេរ ដើម្បីធ្វើការជាមួយ constants អ្នកត្រូវតែប្រើ defined() construct ។
តំណាងខ្សែអក្សរ
សូមក្រឡេកមើលខ្សែអក្សរតំណាងនៃថេរមិនពិត។
ឧទាហរណ៍ concatenation បំប្លែងតម្លៃទៅជាខ្សែដូចខាងក្រោម ដែលបង្ហាញក្នុងតារាងខាងក្រោម៖
ប្រធានបទនៃការបំប្លែងទៅជាខ្សែអក្សរត្រូវបានពិពណ៌នាយ៉ាងលម្អិតនៅលើគេហទំព័រផ្លូវការក្នុងកថាខណ្ឌការបំប្លែងទៅជាខ្សែអក្សរ។
ប្រតិបត្តិករប្រៀបធៀប
ចូរបន្តទៅប្រតិបត្តិករប្រៀបធៀប។តម្លៃមិនពិតទាំងអស់ត្រឡប់ពិតដូចដែលបានរំពឹងទុក បើប្រៀបធៀបនឹង FALSE ដោយប្រើប្រតិបត្តិករ " ==" ។
ប៉ុន្តែអ្នកមិនគួរពឹងផ្អែកលើការបញ្ជូនបន្តនៅទីនេះទេនៅពេលដែលប្រៀបធៀបថេរខ្សែអក្សរមិនពិតជាមួយគ្នា។
នេះជាតារាងពេញលេញសម្រាប់ការប្រៀបធៀបតម្លៃមិនពិត (បូកនឹងបង្ហាញធាតុតារាងដែលបើប្រៀបធៀបដោយប្រើប្រតិបត្តិករ " != " ត្រឡប់តម្លៃពិត៖
$undef – អថេរដែលមិនត្រូវបានកំណត់តម្លៃ
ការសន្និដ្ឋានដ៏រីករាយមួយចំនួនអាចត្រូវបានទាញចេញពីតារាង៖
1. ប្រសិនបើយើងដឹងថាយើងប្រើតែខ្សែអក្សរ នោះយើងអាចប្រៀបធៀបពួកវាដោយសុវត្ថិភាព ហើយកុំបារម្ភថា "" (ខ្សែអក្សរទទេ) នឹងស្មើនឹង "0" ។
2. អារេមិនដែលស្មើនឹងខ្សែអក្សរ ចំនួនគត់ ឬចំនួនពិតទេ។
ដោយសារប្រភេទនៃថេរមិនពិតខុសគ្នា ប្រតិបត្តិករមួយគូ === និង !== អាចត្រូវបានប្រើដើម្បីសម្គាល់ពួកវា។
ប្រតិបត្តិករ === ត្រឡប់ false សម្រាប់គូទាំងអស់នៃតម្លៃមិនពិត។
ត្រឡប់តម្លៃពិតសម្រាប់តែអាគុយម៉ង់ដែលមួយត្រូវបានកំណត់តម្លៃ NULL ហើយទីពីរមិនត្រូវបានកំណត់តម្លៃណាមួយទេ។
ភាពខុសគ្នារវាងអថេរដែលមានតម្លៃ NULL និងអថេរដែលមិនបានកំណត់
ប្រតិបត្តិករ === អនុញ្ញាតឱ្យអ្នកបែងចែករវាងតម្លៃមិនពិតទាំងអស់ លើកលែងតែអថេរដែលមានតម្លៃ NULL ពីអថេរដែលមិនត្រូវបានផ្តល់តម្លៃ។
អថេរបែបនេះអាចត្រូវបានសម្គាល់ដោយប្រើមុខងារ get_defined_vars() ។
ប្រសិនបើអ្នកត្រូវកំណត់ថាតើតម្លៃមួយត្រូវបានផ្តល់ទៅឱ្យអថេរ $var ឬអត់នោះ អត្ថបទកូដខាងក្រោមអាចត្រូវបានប្រើដើម្បីធ្វើការនេះ៖
ប្រសិនបើ (array_key_exists("var", get_defined_vars())) ( echo "var is defined"; // $var ត្រូវបានកំណត់ NULL ) else ( echo "var is not defined"; // $var is not defined or unset($ var) ត្រូវបានគេហៅថា)
ការសន្និដ្ឋាន
អ្នកគួរចងចាំជានិច្ចថានៅក្នុង PHP តម្លៃមិនពិតពីរអាចមិនស្មើគ្នា ហើយអថេរដែលហាក់ដូចជាខុសគ្នានៅ glance ដំបូងអាចប្រែទៅជាដូចគ្នានៅពេលប្រៀបធៀប។ ដើម្បីជៀសវាងការភ្ញាក់ផ្អើលបែបនេះ អ្នកអាចប្រើប្រតិបត្តិករ === និង !== ។នៅពេលធ្វើការជាមួយអារេ ដើម្បីជៀសវាងការភ្ញាក់ផ្អើល អ្នកអាចសរសេរមុខងារមួយដើម្បីបំប្លែងតម្លៃទៅជាលិបិក្រមផ្សេងគ្នាដែលត្រូវបានធានា។ បន្ទាប់ពីនោះ ធាតុនៃអារេអាចចូលប្រើបានដោយប្រើវា។ វាអាចធ្វើឱ្យកម្មវិធីថយចុះ ប៉ុន្តែនឹងជួយជៀសវាងការភ្ញាក់ផ្អើល។
ការធ្វើតេស្តត្រូវបានអនុវត្តនៅលើ PHP 5.3.1 ។
តំណភ្ជាប់បន្ថែម
1. តារាងប្រៀបធៀបប្រភេទ PHP ។2. MySQl Null និង Empty Strings នៅក្នុងបរិបទនៃ PHP ។
ស្លាក: បន្ថែមស្លាក
កម្មវិធីទំនើបត្រូវបានគ្រប់គ្រងដោយជោគជ័យនូវអថេរដែលមិនបានវាយបញ្ចូលអស់រយៈពេលជាយូរ។ ប្រភេទនៃអថេរមិនអាចបញ្ជាក់ជាមុនបានទេ ហើយអាចត្រូវបានផ្លាស់ប្តូរអំឡុងពេលប្រតិបត្តិកម្មវិធី។
គំនិតនេះបានក្លាយជាចំណុចកណ្តាលនៃគំរូកម្មវិធីទូទៅ។ នៅដើមដំបូងនៃយុគសម័យសរសេរកម្មវិធី ភាសាដែលមានទំនុកចិត្តហ្មត់ចត់ដូចគ្នាតម្រូវឱ្យអ្នកសរសេរកម្មវិធីកំណត់អថេរជាមុន ហើយធានាយ៉ាងតឹងរ៉ឹងថាគ្មានអ្វីខុសច្បាប់ត្រូវបានចាត់តាំងឱ្យពួកគេ។ ទាំងកម្មវិធី ឬភាសាសរសេរកម្មវិធីមិនមានគំនិតណាមួយមុនពេលដែលអថេរផ្លាស់ប្តូរប្រភេទរបស់វា។
អំពីភាពទទេ និងមិនមាន
មុខងារ PHP empty() គឺជាមុខងារបញ្ច្រាសនៃមុខងារ isset() ហើយមានមុខងារពិសេសមួយចំនួនក្នុងការប្រើប្រាស់។ ប្រសិនបើមិនមានអថេរទេ អនុគមន៍ទីមួយឆ្លើយតបជាវិជ្ជមាន ហើយលទ្ធផលរបស់វាគឺពិត ហើយទីពីរឆ្លើយតបអវិជ្ជមាន ពោលគឺតម្លៃរបស់វានឹងមិនពិត។
តាមនិយមន័យ isset() ត្រូវបានរចនាឡើងដើម្បីពិនិត្យមើលអត្ថិភាពនៃអថេរ។ វាមិនមានបញ្ហាអ្វី និងរបៀបដែលអថេរត្រូវបានចាត់ចែងនោះទេ រឿងសំខាន់គឺថាវាមាន ហើយមិនត្រូវបានបំផ្លាញដោយមុខងារ unset() ទេ។ លទ្ធផលនៃអនុគមន៍ isset() នឹងមានលក្ខណៈវិជ្ជមាន-ពិត។ វាជាការសំខាន់ក្នុងការចងចាំថាប្រសិនបើ $iVar = 0; បន្ទាប់មក isset($iVar) នឹងក្លាយជាការពិត ប៉ុន្តែទទេ($iVar) ក៏នឹងជាការពិតផងដែរ។
ក្នុងករណីទី 1 លទ្ធផលមានន័យថាអថេរមាន នៅក្នុងករណីទីពីរ អថេរគឺទទេ ពោលគឺតម្លៃ "0" ក្នុងទម្រង់ណាមួយ ថាតើវាជាខ្សែអក្សរ ("0") ឬលេខ (ប្រភាគ - 0.0 ឬចំនួនគត់ - 0) គឺដូចគ្នា៖ ទទេ ($iVar) នឹងពិត។
អំពីសុវត្ថិភាព និងការគ្រប់គ្រង
ការអនុវត្តបង្ហាញថាភាសាដែលមិនបានវាយបញ្ចូលផ្តល់សេរីភាពកាន់តែច្រើនដល់អ្នកសរសេរកម្មវិធី ប៉ុន្តែសន្មតថាអាកប្បកិរិយារបស់គាត់ក្នុងការធ្វើការលើក្បួនដោះស្រាយគឺទទួលខុសត្រូវជាង។
PHP ផ្តល់នូវវាក្យសម្ព័ន្ធទំនើបដែលគាំទ្រអត្ថន័យដែលបានបង្កើតឡើង មានកំហុសតិចតួច ប៉ុន្តែទាមទារការយកចិត្តទុកដាក់យ៉ាងប្រុងប្រយ័ត្ន។ ឧទាហរណ៍ ការហៅមុខងារណាមួយតម្រូវឱ្យមានចំនួនប៉ារ៉ាម៉ែត្រជាក់លាក់។
នៅពេលហៅមុខងារមួយ វាមិនចាំបាច់ក្នុងការឆ្លងកាត់ប៉ារ៉ាម៉ែត្រទាំងអស់ទេ អ្នកអាចឆ្លងកាត់បានតែផ្នែកសំខាន់នៃពួកវាប៉ុណ្ណោះ។ មុខងារ "ត្រូវតែ" ពិនិត្យវត្តមាន និងអត្ថិភាពនៃប៉ារ៉ាម៉ែត្រទាំងអស់។ របស់ដែលបាត់ ឬមានតម្លៃមិនត្រឹមត្រូវ ត្រូវតែត្រូវបានស្ដារឡើងវិញនូវទម្រង់ធម្មតា និងកំណត់តម្លៃដែលត្រូវការ។
នៅក្នុងបរិបទនេះ មុខងារ PHP empty() គឺចាំបាច់។ កន្សោម៖
$a = "1; 2" + 20
នឹងកំណត់តម្លៃ 21 ទៅអថេរ $a ដោយហេតុថាផ្នែកទីមួយនៃកន្សោមនឹងត្រូវបានតំណាងជា 1 ហើយទីពីរនឹងមាន 20។
លទ្ធផលនឹងជាលេខប្រភេទ ហើយមុខងារ PHP ទទេ ($a) នឹងមានលទ្ធផល - មិនពិត នោះគឺ អថេរ $a មិនទទេទេ។
ក្នុងបរិបទនេះ មានមុខងារមួយ៖
FuncTest($a=0,$b=20)
ពេលហៅទូរសព្ទ៖
$res = funcTest($aVal, $bVal)
នឹងមានអ្វីដែលចង់បាន នោះគឺជាលទ្ធផលនៃមុខងារ។ ហើយនៅពេលគេហៅ៖
- $res = funcTest($aVal. $bVal)
តួមុខងារមានប៉ារ៉ាម៉ែត្រតែមួយគត់ដែលមានតម្លៃ "$aVal . $bVal" ហើយភាគច្រើនទំនងជាប៉ារ៉ាម៉ែត្រនេះនឹងត្រូវបានបកស្រាយជាខ្សែអក្សរ។
PHP ទទេ() សម្រាប់វត្ថុ និងអារេ
វាក្យសម្ព័ន្ធភាសាមានចំនួនគ្រប់គ្រាន់នៃការសាងសង់ និងមុខងារសម្រាប់ធ្វើការជាមួយវត្ថុ និងអារេ ប៉ុន្តែតាមទស្សនៈនៃការពិនិត្យរកអត្ថិភាពរបស់វា និងសម្រាប់វត្តមានតម្លៃ វាមិនមានភាពខុសគ្នាពិសេសពីអថេរទេ។
PHP ទទេ (អារេ) - ស្មើនឹងការហៅទទេ (អថេរសាមញ្ញ) ។ ទោះយ៉ាងណាក៏ដោយមានការពិចារណាយ៉ាងសំខាន់ទាក់ទងនឹងវត្ថុ។ សម្រាប់ការពិនិត្យវត្ថុសម្រាប់អត្ថិភាព (isset) សំណួរពិបាកយល់ណាស់។ ចំពោះមុខងារ PHP empty() ការណែនាំនៃការប្រើប្រាស់របស់វានៅតែមានចម្ងល់។
យោងតាមតក្កវិជ្ជានៃកម្មវិធីតម្រង់ទិសវត្ថុ វត្ថុមួយមានខ្លឹមសាររបស់វា និងសំណុំនៃវិធីសាស្ត្រផ្ទាល់ខ្លួនរបស់វា។ មានតែវត្ថុខ្លួនវាទេដែលអាចប្រាប់ថាតើវាទទេឬមិនទទេ ប៉ុន្តែមិនមែនជាមុខងារភាគីទីបីទេ បើទោះបីជាវាជាផ្នែកមួយនៃវាក្យសម្ព័ន្ធនៃភាសាក៏ដោយ។
វត្ថុមួយ និងមុខងាររបស់វាទទេ ()
នៅលើមូលដ្ឋានដ៏សាមញ្ញ ប៉ុន្តែស្របច្បាប់នេះ រាល់វត្ថុទាំងអស់គួរតែត្រូវបានពិចារណានៅក្នុងបរិបទនៃការយល់ដឹងអំពី "ភាពទទេ" របស់វា។ ឧទាហរណ៍ការអនុវត្តវត្ថុ "តារាងបុគ្គលិក" មានកំណត់ត្រា "និយោជិត" ។ ប៉ុន្តែប្រសិនបើមិនមានបុគ្គលិកតែមួយទេនោះនៅក្នុង "បញ្ជីបុគ្គលិក" តែងតែមានជម្រើសសម្រាប់មុខតំណែងរបស់បុគ្គលិកសក្តានុពល។
តើខ្ញុំគួរប្រើមុខងារវត្ថុទទេ PHP នៅកម្រិតណា? នៅកម្រិត "បុគ្គលិក" អ្វីគ្រប់យ៉ាងមាន ទោះបីជាមិនមានបុគ្គលិកតែមួយក៏ដោយ។ នៅកម្រិត "និយោជិត" វត្ថុមានរួចហើយ ទោះបីជាវាមិនត្រូវបានបំពេញទាំងស្រុងក៏ដោយ។ វត្ថុដែលមិនបានបំពេញទាំងស្រុងអាចត្រូវបានចាត់ថ្នាក់ជាវត្ថុទទេ។ មិនមានអត្ថប្រយោជន៍ពីវាដល់តុបុគ្គលិកទេ។
អាស្រ័យលើរចនាប័ទ្មការសរសេរកម្មវិធីរបស់អ្នក មុខងារ PHP ទទេ() និង isset() មានសារៈសំខាន់ខ្លាំងណាស់សម្រាប់ការកសាងក្បួនដោះស្រាយដែលមានសុវត្ថិភាព និងអាចទុកចិត្តបាន ប៉ុន្តែសម្រាប់វត្ថុ វានៅតែប្រសើរជាងដែលមានវ៉ារ្យ៉ង់ទទេ () ដែលកំណត់ដោយមាតិការបស់វា។
នៅក្នុង PHP តម្លៃ FALSE និង NULL និងតម្លៃដែលជាប់ទាក់ទងរបស់ពួកគេគឺខុសពីរបៀបដែលវាជាធម្មតានៅក្នុងភាសាផ្សេងទៀត ហើយមានលក្ខណៈពិសេសមិនច្បាស់ផ្ទាល់ខ្លួន។
អត្ថបទពិភាក្សាអំពីលក្ខណៈពិសេសទាំងនេះ។
សម្រាប់អ្នកចាប់ផ្តើមដំបូង វាអាចមានប្រយោជន៍សម្រាប់ការមើលរូបភាពពេញលេញ សម្រាប់អ្នកអានដែលមានបទពិសោធន៍ វាអាចមានប្រយោជន៍ក្នុងការធ្វើឱ្យការចងចាំរបស់ពួកគេឡើងវិញ ប្រសិនបើភាពស្រពិចស្រពិលខ្លះបានធ្វើឱ្យគំនិតរបស់ពួកគេ។
FALSE ក្នុង If statements
យោងតាមឯកសារ PHP តម្លៃខាងក្រោមគឺ FALSE បន្ទាប់ពីបោះទៅប៊ូលីន៖- តម្លៃប៊ូលីនខ្លួនវាគឺជា FALSE
- ខ្សែអក្សរទទេ ("") និងខ្សែអក្សរ "0" ។
- អារេទទេ (អារេ) - អារេ () ។
- វត្ថុដែលមានអថេរសមាជិកសូន្យ (PHP 4 តែប៉ុណ្ណោះ មិនត្រូវបានគ្របដណ្តប់នៅក្នុងអត្ថបទនេះទេ)
- តម្លៃ NULL ពិសេស (រួមទាំងអថេរដែលមិនបានកំណត់)
- វត្ថុ SimpleXML (មិនត្រូវបានគ្របដណ្តប់នៅក្នុងអត្ថបទនេះ)
ប្រសិនបើ (…) បន្ទរ “1”; ផ្សេងទៀតបន្ទរ “0”;
បន្ទាប់មកខ្សែអក្សរ "0" នឹងត្រូវបានបោះពុម្ព។
ប្រសិនបើតម្លៃនៃអថេរមិនត្រូវបានកំណត់ (មិនកំណត់) នោះការព្រមានក៏អាចត្រូវបានចេញផងដែរ។ អនុញ្ញាតឱ្យយើងរំលឹកអ្នកថាការព្រមាននៅក្នុងលក្ខខណ្ឌអាចត្រូវបានយកចេញដោយការសរសេរ @ មុនពេលអថេរ។
ឧទាហរណ៍:
ប្រសិនបើ (@$undefVar) (…)
ប៉ុន្តែអ្នកគួរតែប្រើ @ តែក្នុងករណីធ្ងន់ធ្ងរនៅពេលដែលអ្នកបានគិតដោយប្រុងប្រយ័ត្ន ហើយមិនមានជម្រើសសមរម្យផ្សេងទៀតទេ។ មើលមុខងារ isset()។
មុខងារ is_null() និងភាសាបង្កើត isset() និងទទេ()
is_null() ត្រឡប់ TRUE សម្រាប់តែអថេរដែលមិនត្រូវបានផ្តល់តម្លៃណាមួយ ឬដែលត្រូវបានកំណត់តម្លៃ NULL ។isset() ត្រឡប់តម្លៃប៊ូលីនមួយទល់នឹងមួយ ប្រៀបធៀបទៅនឹង is_null() ។
ប្រសិនបើអថេរមិនត្រូវបានផ្តល់តម្លៃទេ នោះ is_null() ក៏ចេញការព្រមាន "អថេរដែលមិនបានកំណត់" មិនដូច isset() ដែលមិនចេញការព្រមានណាមួយឡើយ។
សូមចាំថា ដើម្បីលុបតម្លៃនៃអថេរ អ្នកអាចប្រើមុខងារ unset()។ អ្នកក៏អាចកំណត់តម្លៃ NULL សម្រាប់គោលបំណងនេះ ដើម្បីជៀសវាងការព្រមានពីអ្នកចងក្រង នៅពេលព្យាយាមអានតម្លៃនៃអថេរមួយ។
សូមចំណាំថា មិនដូចអថេរ ដើម្បីធ្វើការជាមួយ constants អ្នកត្រូវតែប្រើ defined() construct ។
តំណាងខ្សែអក្សរ
សូមក្រឡេកមើលខ្សែអក្សរតំណាងនៃថេរមិនពិត។
ឧទាហរណ៍ concatenation បំប្លែងតម្លៃទៅជាខ្សែដូចខាងក្រោម ដែលបង្ហាញក្នុងតារាងខាងក្រោម៖
ប្រធានបទនៃការបំប្លែងទៅជាខ្សែអក្សរត្រូវបានពិពណ៌នាយ៉ាងលម្អិតនៅលើគេហទំព័រផ្លូវការក្នុងកថាខណ្ឌការបំប្លែងទៅជាខ្សែអក្សរ។
ប្រតិបត្តិករប្រៀបធៀប
ចូរបន្តទៅប្រតិបត្តិករប្រៀបធៀប។តម្លៃមិនពិតទាំងអស់ត្រឡប់ពិតដូចដែលបានរំពឹងទុក បើប្រៀបធៀបនឹង FALSE ដោយប្រើប្រតិបត្តិករ " ==" ។
ប៉ុន្តែអ្នកមិនគួរពឹងផ្អែកលើការបញ្ជូនបន្តនៅទីនេះទេនៅពេលដែលប្រៀបធៀបថេរខ្សែអក្សរមិនពិតជាមួយគ្នា។
នេះជាតារាងពេញលេញសម្រាប់ការប្រៀបធៀបតម្លៃមិនពិត (បូកនឹងបង្ហាញធាតុតារាងដែលបើប្រៀបធៀបដោយប្រើប្រតិបត្តិករ " != " ត្រឡប់តម្លៃពិត៖
$undef – អថេរដែលមិនត្រូវបានកំណត់តម្លៃ
ការសន្និដ្ឋានដ៏រីករាយមួយចំនួនអាចត្រូវបានទាញចេញពីតារាង៖
1. ប្រសិនបើយើងដឹងថាយើងប្រើតែខ្សែអក្សរ នោះយើងអាចប្រៀបធៀបពួកវាដោយសុវត្ថិភាព ហើយកុំបារម្ភថា "" (ខ្សែអក្សរទទេ) នឹងស្មើនឹង "0" ។
2. អារេមិនដែលស្មើនឹងខ្សែអក្សរ ចំនួនគត់ ឬចំនួនពិតទេ។
ដោយសារប្រភេទនៃថេរមិនពិតខុសគ្នា ប្រតិបត្តិករមួយគូ === និង !== អាចត្រូវបានប្រើដើម្បីសម្គាល់ពួកវា។
ប្រតិបត្តិករ === ត្រឡប់ false សម្រាប់គូទាំងអស់នៃតម្លៃមិនពិត។
ត្រឡប់តម្លៃពិតសម្រាប់តែអាគុយម៉ង់ដែលមួយត្រូវបានកំណត់តម្លៃ NULL ហើយទីពីរមិនត្រូវបានកំណត់តម្លៃណាមួយទេ។
ភាពខុសគ្នារវាងអថេរដែលមានតម្លៃ NULL និងអថេរដែលមិនបានកំណត់
ប្រតិបត្តិករ === អនុញ្ញាតឱ្យអ្នកបែងចែករវាងតម្លៃមិនពិតទាំងអស់ លើកលែងតែអថេរដែលមានតម្លៃ NULL ពីអថេរដែលមិនត្រូវបានផ្តល់តម្លៃ។
អថេរបែបនេះអាចត្រូវបានសម្គាល់ដោយប្រើមុខងារ get_defined_vars() ។
ប្រសិនបើអ្នកត្រូវកំណត់ថាតើតម្លៃមួយត្រូវបានផ្តល់ទៅឱ្យអថេរ $var ឬអត់នោះ អត្ថបទកូដខាងក្រោមអាចត្រូវបានប្រើដើម្បីធ្វើការនេះ៖
ប្រសិនបើ (array_key_exists("var", get_defined_vars())) ( echo "var is defined"; // $var ត្រូវបានកំណត់ NULL ) else ( echo "var is not defined"; // $var is not defined or unset($ var) ត្រូវបានគេហៅថា)
ការសន្និដ្ឋាន
អ្នកគួរចងចាំជានិច្ចថានៅក្នុង PHP តម្លៃមិនពិតពីរអាចមិនស្មើគ្នា ហើយអថេរដែលហាក់ដូចជាខុសគ្នានៅ glance ដំបូងអាចប្រែទៅជាដូចគ្នានៅពេលប្រៀបធៀប។ ដើម្បីជៀសវាងការភ្ញាក់ផ្អើលបែបនេះ អ្នកអាចប្រើប្រតិបត្តិករ === និង !== ។នៅពេលធ្វើការជាមួយអារេ ដើម្បីជៀសវាងការភ្ញាក់ផ្អើល អ្នកអាចសរសេរមុខងារមួយដើម្បីបំប្លែងតម្លៃទៅជាលិបិក្រមផ្សេងគ្នាដែលត្រូវបានធានា។ បន្ទាប់ពីនោះ ធាតុនៃអារេអាចចូលប្រើបានដោយប្រើវា។ វាអាចធ្វើឱ្យកម្មវិធីថយចុះ ប៉ុន្តែនឹងជួយជៀសវាងការភ្ញាក់ផ្អើល។