ស្វែងយល់អំពី Coding Standards នៅក្នុង Symfony3

ពេលដែលរួមចំណែកកូដទៅកាន់ Symfony អ្នកត្រូវស្របតាមស្តង់ដារនៃកូដរបស់វា។ ដើម្បីសង្ខេប នេះគឺជា ច្បាប់មួយ៖ ត្រាប់តាមកូដ Symfony ដែលមានស្រាប់ ។ ភាគច្រើន open-source Bundles និង libraries ដែលប្រើប្រាស់ដោយ Symfony ក៏ត្រូវស្រប់តាមការណែនាំដូចគ្នា ហើយអ្នកក៏ដូចគ្នាដែរ។

ត្រូវចាំថា គុណសម្បត្តិជាចំបងនៃស្តង់ដារគឺ ផ្នែកនីមួយៗនៃកូដមើលទៅនិងមានអារម្មណ៏ថាស៊ាំ តែមិនមែនមកពីរឿងនេះទេ។

Symfony ស្របតាមស្តង់ដារដែលកំណត់ក្នុងឯកសារ PSR-0, PSR-1, PSR-2 និង PSR-4

ចាប់ពីរូបភាពមួយរឺក៏ កូដមួយចំនួន ដែលមានរាប់ពាន់ពាក្យ នេះគឺជាឧទាហរណ៏ខ្លីមួយដែលផ្ទុកនូវលក្ខណៈពិសេសដែលបានរៀបរាប់ដូចខាងក្រោម៖

រចនាសម្ព័ន្ធ

១) បន្ថែម single space បន្ទាប់ពី សញ្ញា comma

២) បន្ថែម single space សងខាង binary operator (== , && , …) ជាមួយនឹង exception នៃ concatenation (.) operator

៣) ដាក់ unary operator (! , — , …) នៅជាប់អថេរដែលរងផលប៉ះពាល់

៤) តែងតែប្រើនូវ ​identical comparison លុះត្រាតែអ្នកត្រូវការ juggling

៥) ប្រើ Yoda conditions ពេលដែលពិនិត្យនូវ អថេរដែលប្រឆាំងនឹង expression ដើម្បីជៀសវាងនូវការងារដែលចៃដន្យខាងក្នុង condition statement (នេះនឹងអនុវត្តន៏ទៅកាន់ == , != , === និង !==)

៦) បន្ថែម comma បន្ទាប់ពី array item នីមួយៗ ក្នុង multi-line array សូម្បីតែបន្ទាប់ចុងក្រោយ

៧) បន្ថែម blank line មុន return statements, លុះត្រាតែ return គឺតែឯងខាងក្នុង statement-group (ដូចជា if statement)

៨) ប្រើ return null; ពេលដែល function explicitly return ជាតម្លៃ null និង ប្រើ return; ពេលដែល function return ជាតម្លៃ void

៩) ប្រើ braces ដើម្បីបង្ហាញថា control structure body មិនគិតពីចំនួននៃ statement ដែលវាផ្ទុក

១០) កំណត់ class មួយសម្រាប់ file មួយ នេះមិនមែនដាក់ជា private helper classes ដែលមិនត្រូវបានដាក់បម្រុងទុកដែលត្រូវបាន instantiated ពីខាងក្រៅនិងមិនមានការព្រួយបារម្ភដោយ PSR-0 និង PSR-4 autoload standards

១១) ប្រកាស class inheritance និង implemented interfaces ទាំងអស់នៅលើបន្ទាត់ដូចគ្នាដូចជា class name

១២) ប្រកាស class properties មុន methods

១៣) ប្រកាស public method ជាមុនសិន បន្ទាប់មក protected មួយទៀត ហើយចុងបញ្ចប់គឺ private។ ករណីលើកលែងទៅនឹងច្បាប់នេះគឺ class constructor និង setup() និង teardown() methods នៃ PHPUnit tests ដែលត្រូវតែជា methods ដំបូងគេដែលនឹងត្រូវបានដំណើរការ

១៤) ប្រកាស arguments ទាំងអស់លើបន្ទាត់ដូចគ្នាជា method/function name, គ្មានបញ្ហាថា arguments មានច្រើនប៉ុណ្ណានោះទេ

១៥) ប្រើ parentheses ពេលដែលធ្វើការ instantiate classes ដោយមិនគិតពីចំនួននៃ arguments​the constructor ដែលមាន

១៦) ករណីលើកលែងនិង error message strings ត្រូវតែដាក់បន្តគ្នាដែលប្រើប្រាស់ sprint

១៧) ហៅទៅកាន់ trigger_error ជាមួយប្រភេទ E_USER_DEPRECATED ត្រូវតែត្រូវបានប្ដូរទៅជា opt-in តាមរយៈ @ operator។ អានបន្ថែមនៅ Deprecations

១៨) កុំប្រើ else , elseif , break បន្ទាប់ពី if និង case conditions ដែល return រឺក៏ បោះនូវអ្វីមួយ

១៩) កុំប្រើ spaces សងខាង [ offset accessor and before ] offset accessor។

 

Naming Conventions

១) ប្រើ camelCase មិនមែន underscores សម្រាប់អថេរ , function និង method names , arguments

២) ប្រើ underscores សម្រាប់ option names និង​ parameter names

៣) ប្រើ namespaces សម្រាប់ classes ទាំងអស់

៤) បន្ថែមដើម abstract classes ជាមួយនឹង Abstract ។ សូមចំណាំ Symfony classes មុនៗមួយចំនួនមិនស្រប់តាមនឹងអនុសញ្ញានេះទេ ហើយមិនមានកែឈ្មោះសម្រាប់មូលហេតុនៃការត្រលប់មកស្របគ្នាទេ។ ទោះជាយ៉ាងណា abstract classes ថ្មីត្រូវតែស្របតាម naming convention នេះ។

៥) បន្ថែមចុង interfaces ជាមួយនឹង Interface

៦) បន្ថែមចុង traits ជាមួយនឹង Trait

៧) បន្ថែមចុង exceptions ជាមួយនឹង Exception

៨) ប្រើ តួអក្ខរក្រមលេខ និង underscores សម្រាប់ឈ្មោះ file

៩) សម្រាប់ type-hinting ក្នុង PHPDocs និង casting, ប្រើ bool (ជំនួសអោយ booleaan រឺក៏ Boolean), int (ជំនួសអោយ​ integer), float (ជំនួសអោយ double រឺក៏ real)

១០) កុំភ្លេចមើលបន្ថែមទៅលើឯកសារនៃការបកស្រាយអនុសញ្ញា

 

Service Naming Conventions

១) service name ផ្ទុកនូវ groups និងបំបែកដោយ dots

២) DI alias នៃ bundle គឺជា group ដំបូង

៣) ប្រើអក្សរដែលផ្ដើមពីតូច (lower case) សម្រាប់ service និង parameter name

៤) ចំពោះ group name គឺប្រើប្រាស់នូវ underscore notation

 

ឯកសារ

១) បន្ថែម PHPDoc blocks សម្រាប់ classes, methods, functions ទាំងអស់

២) Group annotations together មានន័យថា annotations នោះគឺមានប្រភេទដូចគ្នា ហើយ annotatios ដែលមានប្រភេទខុសគ្នាគឺបំបែកដោយ single blank line

៣) លុប @return tag ប្រសិនបើ method មិនបង្ហាញអ្វីទាំងអស់

៤) @package និង @subpackage annotations ដែលមិនត្រូវបានប្រើ

 

កម្មសិទ្ធបញ្ញា

Symfony គឺ released ក្រោម MIT license និង license block ដែលត្រូវបង្ហាញនៅលើ PHP file ទាំងអស់ មុននឹង namespace។