PHP Power Tools
   Michelangelo van Dam
  PHPBenelux Meeting 2010, Leuven
Michelangelo van Dam

• Independent Consultant
• Zend Certified Engineer (ZCE)
 - PHP 4 & PHP 5
 - Zend Framework
• Co-Foun...
Why PHP Power Tools
• early detection of issues
• cleaner & consistent code
• knowledge about the codebase
• better code
Usual Suspects

            PHP_CodeSniffer
Example Code
•- Zend Framework QuickStart app
   http://framework.zend.com/manual/en/learning.quickstart.intro.html
VirtualHost Settings
<VirtualHost *:80>
 DocumentRoot /srv/www/quickstart/public
 ServerName quickstart.local
 ServerAdmin...
Showtime
Syntax Checking
•- PHPLint
   comes with PHP binary
 - validates code for syntax errors
• Website
 - http://www.icosaedro....
Demo PHPLint
Code Documentation
•- PHPDocumentator
    creates automated API documentation
 - based on inline code blocks
• Installatio...
Demo PHPDoc
Output PHPDoc
Coding Standards
•- PHP_CodeSniffer
    sniffs for coding standard violations
 - ensures code is clean and consistent
 - u...
Demo PHP_CodeSniffer
PHPCPD
•- PHP Copy/Paste Detector
     detects code duplication
•- Installation
   pear channel-discover pear.phpunit.de
 ...
Demo PHPCPD
Output
Mess Detection
•- PDepend & PHPMD
     detects code mess
•- Installation
   pear channel-discover pear.pdepend.org
 - pear...
Demo detecting mess
Output codesize
Output unused code
Unit Testing
•- PHPUnit
    tests code on unit level
 - includes database tests
 - integrates well with many PHP framework...
See other presentation




 http://www.slideshare.net/DragonBe/phpunit-testing-to-zendtest
Automated builds
•- Phing
    automated build tool
 - like Apache Ant
 - integrates well with other PHP tools
• Installati...
build.xml
<?xml version="1.0"?>

<project name="zfqs" description="Zend Framework QuickStart" default="build" >
        <t...
project definition
<?xml version="1.0"?>

<project name="zfqs" description="Zend Framework QuickStart" default="build" >
…
...
target version
<target name="version">
    <version releasetype="Bugfix"
             file="build.version" property="versi...
target phplint
<target name="phplint">
   <mkdir dir="./reports/phplint" />
   <phplint file="./application/models"
      ...
target pdepend
<target name="pdepend">
    <mkdir dir="./reports/pdepend" />
    <copy file="./build_pdepend.html"
       ...
target phpmd
<target name="phpmd">
    <mkdir dir="./reports/phpmd" />
    <exec command="/usr/bin/phpmd ./application/mod...
target phpcs
<target name="phpcs">
    <mkdir dir="./reports/phpcs" />
    <exec command="/usr/bin/phpcs -n
            --...
target phpcpd
<target name="phpcpd">
    <mkdir dir="./reports/phpcpd" />
    <exec command="/usr/bin/phpcpd
            -...
target phpdoc
<target name="phpdoc">
    <mkdir dir="./reports/phpdoc" />
    <exec command="phpdoc -d ./application/model...
target build
<target name="build"
        depends="version,phplint,pdepend,phpmd,phpcs,phpcpd,phpdoc">
    <echo msg="Fini...
Demo building all
Demo building target
Our reports section
Summary


   PHP offers lots of tools
more consistent and clean code
     automated process
Thank you


            Slides on slideshare
http://www.slideshare.net/group/phpbenelux

    Don’t forget to thank our spo...
Upcoming SlideShare
Loading in...5
×

Php Power Tools

9,890

Published on

PHP Power Tools to improve QA of development projects.

Published in: Technology
0 Comments
18 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,890
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
119
Comments
0
Likes
18
Embeds 0
No embeds

No notes for slide









































  • Php Power Tools

    1. 1. PHP Power Tools Michelangelo van Dam PHPBenelux Meeting 2010, Leuven
    2. 2. Michelangelo van Dam • Independent Consultant • Zend Certified Engineer (ZCE) - PHP 4 & PHP 5 - Zend Framework • Co-Founder of PHPBenelux • Shepherd of “elephpant” herds
    3. 3. Why PHP Power Tools • early detection of issues • cleaner & consistent code • knowledge about the codebase • better code
    4. 4. Usual Suspects PHP_CodeSniffer
    5. 5. Example Code •- Zend Framework QuickStart app http://framework.zend.com/manual/en/learning.quickstart.intro.html
    6. 6. VirtualHost Settings <VirtualHost *:80> DocumentRoot /srv/www/quickstart/public ServerName quickstart.local ServerAdmin root@localhost <Directory /srv/www/quickstart/public> Options Indexes FollowSymlinks AllowOverride All Order allow,deny Allow from all DirectoryIndex index.php </Directory> Alias /reports /srv/www/quickstart/reports <Directory /srv/www/quickstart/reports> Options Indexes FollowSymlinks AllowOverride All Order allow,deny Allow from all DirectoryIndex index.php index.html </Directory> </VirtualHost>
    7. 7. Showtime
    8. 8. Syntax Checking •- PHPLint comes with PHP binary - validates code for syntax errors • Website - http://www.icosaedro.it/phplint/
    9. 9. Demo PHPLint
    10. 10. Code Documentation •- PHPDocumentator creates automated API documentation - based on inline code blocks • Installation - pear install PhpDocumentor • Website - http://www.phpdoc.org
    11. 11. Demo PHPDoc
    12. 12. Output PHPDoc
    13. 13. Coding Standards •- PHP_CodeSniffer sniffs for coding standard violations - ensures code is clean and consistent - using standard and custom coding standards • Installation - pear install PHP_CodeSniffer • Website - http://pear.php.net/package/PHP_CodeSniffer
    14. 14. Demo PHP_CodeSniffer
    15. 15. PHPCPD •- PHP Copy/Paste Detector detects code duplication •- Installation pear channel-discover pear.phpunit.de - pear channel-discover components.ez.no - pear install --alldeps phpunit/phpcpd • Website - http://github.com/sebastianbergmann/phpcpd
    16. 16. Demo PHPCPD
    17. 17. Output
    18. 18. Mess Detection •- PDepend & PHPMD detects code mess •- Installation pear channel-discover pear.pdepend.org - pear install pdepend/PHP_Depend - pear channel-discover pear.phpmd.org - pear install phpmd/PHP_PMD • Websites - http://www.pdepend.org - http://www.phpmd.org
    19. 19. Demo detecting mess
    20. 20. Output codesize
    21. 21. Output unused code
    22. 22. Unit Testing •- PHPUnit tests code on unit level - includes database tests - integrates well with many PHP frameworks • Installation - pear channel-discover pear.phpunit.de - pear install phpunit/PHPUnit • Website - http://www.phpunit.de
    23. 23. See other presentation http://www.slideshare.net/DragonBe/phpunit-testing-to-zendtest
    24. 24. Automated builds •- Phing automated build tool - like Apache Ant - integrates well with other PHP tools • Installation - pear channel-discover pear.phing.info - pear install phing/phing • Website - http://phing.info
    25. 25. build.xml <?xml version="1.0"?> <project name="zfqs" description="Zend Framework QuickStart" default="build" > <target name="version"> <version releasetype="Bugfix" file="build.version" property="version.number"/> </target> <target name="phplint"> <mkdir dir="./reports/phplint" /> <phplint file="./application/models" haltonfailure="false" tofile="./reports/phplint/errors.txt"/> </target> <target name="pdepend"> <mkdir dir="./reports/pdepend" /> <copy file="./build_pdepend.html" tofile="./reports/pdepend/index.html" overwrite="true" /> <exec command="/usr/bin/pdepend --summary-xml=./reports/pdepend/summary.xml --jdepend-chart=./reports/pdepend/jdepend.svg --overview-pyramid=./reports/pdepend/pyramid.svg ./application/models" dir="./" /> </target> <target name="phpmd"> <mkdir dir="./reports/phpmd" /> <exec command="/usr/bin/phpmd ./application/models html codesize --reportfile ./reports/phpmd/codesize.html" dir="./" /> <exec command="/usr/bin/phpmd ./application/models html unusedcode --reportfile ./reports/phpmd/unusedcode.html" dir="./" /> </target> <target name="phpcs"> <mkdir dir="./reports/phpcs" /> <exec command="/usr/bin/phpcs -n --standard=Zend --report=summary ./application/models > ./reports/phpcs/summary.txt" dir="./" /> <exec command="/usr/bin/phpcs -n --standard=Zend --report=source ./application/models > ./reports/phpcs/source.txt" dir="./" /> <exec command="/usr/bin/phpcs -n --standard=Zend --report=checkstyle ./application/models > ./reports/phpcs/checkstyle.xml" dir="./" /> </target> <target name="phpcpd"> <mkdir dir="./reports/phpcpd" /> <exec command="/usr/bin/phpcpd --log-pmd ./reports/phpcpd/pmd-cpd.xml ./application/models" dir="./" /> </target> <target name="phpdoc"> <mkdir dir="./reports/phpdoc" /> <exec command="phpdoc -d ./application/models -q -t ./reports/phpdoc -o HTML:frames:earthli" dir="./" /> </target> <target name="build" depends="version,phplint,pdepend,phpmd,phpcs,phpcpd,phpdoc"> <echo msg="Finishing build process ${version.number}" /> </target> </project>
    26. 26. project definition <?xml version="1.0"?> <project name="zfqs" description="Zend Framework QuickStart" default="build" > … </project>
    27. 27. target version <target name="version"> <version releasetype="Bugfix" file="build.version" property="version.number"/> </target> In file “build.version” we have the version number as the following sequence: MAJOR.MINOR.BUGFIX (starting at 0.0.0)
    28. 28. target phplint <target name="phplint"> <mkdir dir="./reports/phplint" /> <phplint file="./application/models" haltonfailure="false" tofile="./reports/phplint/errors.txt"/> </target>
    29. 29. target pdepend <target name="pdepend"> <mkdir dir="./reports/pdepend" /> <copy file="./build_pdepend.html" tofile="./reports/pdepend/index.html" overwrite="true" /> <exec command="/usr/bin/pdepend --summary-xml=./reports/pdepend/summary.xml --jdepend-chart=./reports/pdepend/jdepend.svg --overview-pyramid=./reports/pdepend/pyramid.svg ./application/models" dir="./" /> </target>
    30. 30. target phpmd <target name="phpmd"> <mkdir dir="./reports/phpmd" /> <exec command="/usr/bin/phpmd ./application/models html codesize --reportfile ./reports/phpmd/codesize.html" dir="./" /> <exec command="/usr/bin/phpmd ./application/models html unusedcode --reportfile ./reports/phpmd/unusedcode.html" dir="./" /> </target>
    31. 31. target phpcs <target name="phpcs"> <mkdir dir="./reports/phpcs" /> <exec command="/usr/bin/phpcs -n --standard=Zend --report=summary ./application/models > ./reports/phpcs/summary.txt" dir="./" /> <exec command="/usr/bin/phpcs -n --standard=Zend --report=source ./application/models > ./reports/phpcs/source.txt" dir="./" /> <exec command="/usr/bin/phpcs -n --standard=Zend --report=checkstyle ./application/models > ./reports/phpcs/checkstyle.xml" dir="./" /> </target>
    32. 32. target phpcpd <target name="phpcpd"> <mkdir dir="./reports/phpcpd" /> <exec command="/usr/bin/phpcpd --log-pmd ./reports/phpcpd/pmd-cpd.xml ./application/models" dir="./" /> </target>
    33. 33. target phpdoc <target name="phpdoc"> <mkdir dir="./reports/phpdoc" /> <exec command="phpdoc -d ./application/models -q -t ./reports/phpdoc -o HTML:frames:earthli" dir="./" /> </target>
    34. 34. target build <target name="build" depends="version,phplint,pdepend,phpmd,phpcs,phpcpd,phpdoc"> <echo msg="Finishing build process ${version.number}" /> </target>
    35. 35. Demo building all
    36. 36. Demo building target
    37. 37. Our reports section
    38. 38. Summary PHP offers lots of tools more consistent and clean code automated process
    39. 39. Thank you Slides on slideshare http://www.slideshare.net/group/phpbenelux Don’t forget to thank our sponsor
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×