PHP Standards Recommendations (PSR) Akshay Khale (Sr. Software Engineer)
– Martin Fowler “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
PSR-1: Basic Coding Standards. • MUST use only <?php and <?= tags. • MUST use only UTF-8 Encoding. • SHOULD either declare symbols or cause side-effects. • Class names MUST be declared in CamelCase or StudlyCaps. • constants MUST be declared in all UPPER_SNAKE_CASE. • Method names MUST be declared in camelCase.
Quiz Time: What is wrong with following code snippets?
PSR-2: Coding Style Guide • 4 Space indenting (No Tabs). • Soft Line limit 120 Characters. • Blank space after namespace declaration before use. • Closing Brace “}” always on a separate line. • Opening Brace “{” Same line (with a space before) for control statements and next line for Classes and functions. • Space before open parentheses “(” for control statements and not for functions. • Visibility mode is must for all properties and methods. abstract and final before visibility and static after the visibility.
Quiz Time: What is wrong with following code snippets?
PSR-3: Logger Interface • Only allowed Log levels: debug, info, notice, warning, error, critical, alert, emergency. • MUST implement PsrLogLoggerInterface. • MUST throw PsrLogInvalidArgumentException exception on invalid log level. • public function log($level, $message, array $context = array()); • One can consider extending PsrLogAbstractLogger class which implements LoggerInterface.
Sample Logger Class: https://github.com/akshaykhale1992/luxio-logger
PSR-4: Autoloader • Namespace: <vendor_namespace>/ <package_namespace>[/<subnamespace>/]/ <class_name>. • Folder structure should also follow the namespace pattern.
PSR-6: Caching Interface • MUST implement PsrCacheCacheItemPoolInterface and PsrCacheCacheItemInterface. • Concepts: Pool, Items, Key, Data, TTL, Hit, Miss. • Should not throw any Exception.
PSR-7: HTTP message interfaces • Request Structure • Response Structure • Interfaces: PsrHttpMessageRequestInterface and PsrHttpMessageResponseInterface.
PSR-11: Container interface • MUST implement PsrContainerContainerInterface. • MUST throw PsrContainerNotFoundExceptionInterface exception if object not found. • Directly thrown exceptions must implement PsrContainerContainerExceptionInterface interface.
Standards that most of the developers follow. • If a file defines a Class then it should not have any other declarations though PSR allows. • Files with functions should have only function definitions. • Files with class / functions definitions should not have a closing PHP Tag (?>) and should have an empty line before EOF. • Helper files must have function_exists check. • Code MUST be correctly formatted based on the PSR rules. (editor plugins can be used for the same). • Arrays properties should be on separate lines. • All declarations MUST have dock-blocks. • Branch names MUST follow bitbucket Branching Model.
Cont. • Use static instead of self for calling static class members. • Use die instead of exit. • Make use of destructors for unsetting objects and/or closing opened files. • There should not be any commented code or commented die / dd statements. • SHOULD avoid else block in case of if statements. • Recommended to make use of exceptions in-case of invalid details which should be handles at calling end. • Try to use User defined constants instead of System constants. A constants class should be created for defining all the constants that are being used in the project. E.g. instead of using “/” for directory paths use DIRECTORY_SEPARATOR or instead of using supplier_id == 7 check use supplier_id == Constants::DELHIVERY_SUPPLIER_ID. • PHP Unit Test cases are compulsory.
Samples:
Thank you!!!

PHP Standards Recommendations - PHP-FIG

  • 1.
  • 2.
    – Martin Fowler “Anyfool can write code that a computer can understand. Good programmers write code that humans can understand.”
  • 3.
    PSR-1: Basic Coding Standards. •MUST use only <?php and <?= tags. • MUST use only UTF-8 Encoding. • SHOULD either declare symbols or cause side-effects. • Class names MUST be declared in CamelCase or StudlyCaps. • constants MUST be declared in all UPPER_SNAKE_CASE. • Method names MUST be declared in camelCase.
  • 4.
    Quiz Time: Whatis wrong with following code snippets?
  • 5.
    PSR-2: Coding StyleGuide • 4 Space indenting (No Tabs). • Soft Line limit 120 Characters. • Blank space after namespace declaration before use. • Closing Brace “}” always on a separate line. • Opening Brace “{” Same line (with a space before) for control statements and next line for Classes and functions. • Space before open parentheses “(” for control statements and not for functions. • Visibility mode is must for all properties and methods. abstract and final before visibility and static after the visibility.
  • 6.
    Quiz Time: Whatis wrong with following code snippets?
  • 7.
    PSR-3: Logger Interface •Only allowed Log levels: debug, info, notice, warning, error, critical, alert, emergency. • MUST implement PsrLogLoggerInterface. • MUST throw PsrLogInvalidArgumentException exception on invalid log level. • public function log($level, $message, array $context = array()); • One can consider extending PsrLogAbstractLogger class which implements LoggerInterface.
  • 8.
  • 9.
    PSR-4: Autoloader • Namespace:<vendor_namespace>/ <package_namespace>[/<subnamespace>/]/ <class_name>. • Folder structure should also follow the namespace pattern.
  • 10.
    PSR-6: Caching Interface •MUST implement PsrCacheCacheItemPoolInterface and PsrCacheCacheItemInterface. • Concepts: Pool, Items, Key, Data, TTL, Hit, Miss. • Should not throw any Exception.
  • 11.
    PSR-7: HTTP message interfaces •Request Structure • Response Structure • Interfaces: PsrHttpMessageRequestInterface and PsrHttpMessageResponseInterface.
  • 12.
    PSR-11: Container interface •MUST implement PsrContainerContainerInterface. • MUST throw PsrContainerNotFoundExceptionInterface exception if object not found. • Directly thrown exceptions must implement PsrContainerContainerExceptionInterface interface.
  • 13.
    Standards that mostof the developers follow. • If a file defines a Class then it should not have any other declarations though PSR allows. • Files with functions should have only function definitions. • Files with class / functions definitions should not have a closing PHP Tag (?>) and should have an empty line before EOF. • Helper files must have function_exists check. • Code MUST be correctly formatted based on the PSR rules. (editor plugins can be used for the same). • Arrays properties should be on separate lines. • All declarations MUST have dock-blocks. • Branch names MUST follow bitbucket Branching Model.
  • 14.
    Cont. • Use staticinstead of self for calling static class members. • Use die instead of exit. • Make use of destructors for unsetting objects and/or closing opened files. • There should not be any commented code or commented die / dd statements. • SHOULD avoid else block in case of if statements. • Recommended to make use of exceptions in-case of invalid details which should be handles at calling end. • Try to use User defined constants instead of System constants. A constants class should be created for defining all the constants that are being used in the project. E.g. instead of using “/” for directory paths use DIRECTORY_SEPARATOR or instead of using supplier_id == 7 check use supplier_id == Constants::DELHIVERY_SUPPLIER_ID. • PHP Unit Test cases are compulsory.
  • 15.
  • 16.