Weitere ähnliche Inhalte Ähnlich wie Php Power Tools (20) Mehr von Michelangelo van Dam (20) Kürzlich hochgeladen (20) Php Power Tools2. Michelangelo van Dam
• Independent Consultant
• Zend Certified Engineer (ZCE)
- PHP 4 & PHP 5
- Zend Framework
• Co-Founder of PHPBenelux
• Shepherd of “elephpant” herds
3. Why PHP Power Tools
• early detection of issues
• cleaner & consistent code
• knowledge about the codebase
• better code
5. Example Code
•- Zend Framework QuickStart app
http://framework.zend.com/manual/en/learning.quickstart.intro.html
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>
8. Syntax Checking
•- PHPLint
comes with PHP binary
- validates code for syntax errors
• Website
- http://www.icosaedro.it/phplint/
10. Code Documentation
•- PHPDocumentator
creates automated API documentation
- based on inline code blocks
• Installation
- pear install PhpDocumentor
• Website
- http://www.phpdoc.org
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
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
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
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
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. 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>
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)
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. 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. 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. 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. 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. target build
<target name="build"
depends="version,phplint,pdepend,phpmd,phpcs,phpcpd,phpdoc">
<echo msg="Finishing build process ${version.number}" />
</target>
38. Summary
PHP offers lots of tools
more consistent and clean code
automated process
39. Thank you
Slides on slideshare
http://www.slideshare.net/group/phpbenelux
Don’t forget to thank our sponsor