PHP Software Engineering
Programming Languages
Language Features & Paradigms
Paradigms•Imperative vs. Declarative
•Object Oriented
•Class / Inheritance
•Prototype based
•Procedural
Programming Languages
http://en.wikipedia.org/wiki/Programming_paradigmshttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Declarative_programming
http://en.wikipedia.org/wiki/Object-oriented_programminghttp://en.wikipedia.org/wiki/Class-based_programming
http://en.wikipedia.org/wiki/Prototype-based_programminghttp://en.wikipedia.org/wiki/Procedural_programming
Typing
•Static vs. Dynamic
•Strong vs. Weak
•Duck Typing
Programming Languages
http://en.wikipedia.org/wiki/Type_system
Typing
•Static vs. Dynamic
•Strong vs. Weak
•Duck Typing
Programming Languages
http://en.wikipedia.org/wiki/Type_system
Compiled vs. Scripting•Compiled (machine code)
•c, c++
•Compiled (byte-code)
•Java, C# (.net)
•Scripting
•PHP, Ruby, Python, ECMAScript (Java / Action)
Programming Languages
http://en.wikipedia.org/wiki/Scripting_languagehttp://en.wikipedia.org/wiki/Compiled_language
http://en.wikipedia.org/wiki/Virtual_machinehttp://en.wikipedia.org/wiki/Just-in-time_compilation
PHP•Scripting Language
•Virtual Machine: Zend Engine
•Written in C
•Multi-paradigm
•Imperative (procedural)
•Object-oriented (inheritance)
•Weak dynamic typing
Programming Languages
http://en.wikipedia.org/wiki/Zend_Enginehttp://en.wikipedia.org/wiki/PHP
Design PatternsBuilding Blocks for Software
Overview•Applications
•Model 1
•Model 2
•Programming Patterns
•Architectural Patterns
Design Patterns
http://en.wikipedia.org/wiki/Model_1http://en.wikipedia.org/wiki/Model_2
http://en.wikipedia.org/wiki/Design_pattern_(computer_science)http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
Model 1 vs. Model 2•Coined in the Java world
•Model 1 apps are procedural applications
•Typically built as a series of scripts, original JSP pages
•Model 2 apps are tiered applications and/or applications that have separation of concerns
Design Patterns
http://en.wikipedia.org/wiki/Model_1http://en.wikipedia.org/wiki/Model_2
http://en.wikipedia.org/wiki/Separation_of_concernhttp://en.wikipedia.org/wiki/Separation_of_presentation_and_content
Programming Patterns
•Most notable source: Gang of Four
•Object oriented design patterns
Design Patterns
http://en.wikipedia.org/wiki/Design_Patterns_(book)http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/
http://en.wikipedia.org/wiki/Design_pattern_(computer_science)
Example: FactoryDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Factory_method_patternhttp://en.wikipedia.org/wiki/Creational_pattern
Example: Lazy Loading
Design Patterns / Software Patterns
http://en.wikipedia.org/wiki/Lazy_initialization_pattern
Example: SingletonDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Singleton_pattern
Example: Composite
Design Patterns / Software Patterns
http://en.wikipedia.org/wiki/Composite_pattern
http://devzone.zend.com/node/view/id/7
Example: AdapterDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Adapter_pattern
Example: ObserverDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Observer_pattern
http://www.php.net/~helly/php/ext/spl/
Programming Patterns
•Most notable source: Martin Fowler
•PoEAA: Patterns of Enterprise Application Architecture
Design Patterns
http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)http://martinfowler.com/eaaCatalog/
http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/
Non-PoEAA
•Presentation-abstraction-control
•Service-oriented architecture (distributed)
•Mulit/Three-Tier
•Peer-to-Peer (distributed)
Design Patterns / Architectural Patterns
http://en.wikipedia.org/wiki/Presentation-abstraction-controlhttp://en.wikipedia.org/wiki/Service-oriented_architecture
http://en.wikipedia.org/wiki/Three-tier_(computing)http://en.wikipedia.org/wiki/Peer-to-peer
PoEAA•Logical: Domain Model & Table Module
•Data: Table Row & Row Data Gateway, ActiveRecord, Data Mapper
•Other:
•Repository, Registry, Plugin
•Model-View-Controller, Front Controller, Two-step View
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/http://en.wikipedia.org/wiki/Active_record_pattern
Example: Domain Model
http://en.wikipedia.org/wiki/Domain_Model
http://martinfowler.com/eaaCatalog/domainModel.html
Design Patterns / Architectural Patterns
Example: Table Module
http://martinfowler.com/eaaCatalog/tableModule.html
Design Patterns / Architectural Patterns
Example: Table Gateway
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/tableDataGateway.html
Example: Row Gateway
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/rowDataGateway.html
Example: Active Record
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/activeRecord.html
http://en.wikipedia.org/wiki/Active_record_pattern
Example: Active Record
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/activeRecord.html
http://en.wikipedia.org/wiki/Active_record_pattern
Example: MVCDesign Patterns / Architectural Patterns
http://en.wikipedia.org/wiki/Model-view-controller
http://martinfowler.com/eaaCatalog/modelViewController.html
Example: RegistryDesign Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/registry.html
Software Development
ProcessBest Practices for Building Software
Development Process
http://en.wikipedia.org/wiki/Programming_stylehttp://martinfowler.com/articles/continuousIntegration.html
http://en.wikipedia.org/wiki/Unit_testinghttp://en.wikipedia.org/wiki/Revision_control
Overview
•Unit Testing
•Source Control
•Coding Standards
•Continuous Integration
•Documentation
Development Process
http://en.wikipedia.org/wiki/XUnit
Unit Testing•Why write unit tests?
•prevent regressions
•ensure software meets requirements
•tests help document what the software does
•XUnit pattern
•unit testing framework with equivalents in PHP, Java, Ruby, C#, and more
•XUnit is one of the most popular ways to test code
Development Process
http://subversion.tigris.org/http://git-scm.com/
http://www.github.comhttp://en.wikipedia.org/wiki/Distributed_revision_control
Source Control
•Why use source control?
•Keep track of changes you made
•Light-weight backup
•Great for collaboration, even if there is only one of you now
•Common SCM (Source Code Management) tools
•Subversion (SVN)
•widely used, well-supported by tools
•client-server model, integrates well with Apache
•Git
•distributed model, trendy
•somewhat high learning curve, especially if you’re used to SVN or CVS
Development Process
http://pear.php.net/pepr/pepr-proposal-show.php?id=426http://pear.php.net/manual/en/standards.php
http://framework.zend.com/manual/en/coding-standard.html
Coding Standards•Why have coding standards?
readability for yourself and colleaguesprevents mistakes, syntax errorsPear Coding Standardsdon't write your own standards, its not worth your timePear standards are commonly accepted, and align with other languages as well
Development Process
http://cruisecontrol.sourceforge.net/http://code.google.com/p/xinc/
http://www.atlassian.com/software/bamboo/
Build & Deploy•Create a testable and repeatable deployment process
•Run some functional testsdocument your application
•Code comments
•API Docs
•automate - take the human out of it
•continuous integration
•find the right level of process
PHP EcosystemSoftware & Tools
PHP Ecosystem
http://framework.zend.com/http://codeigniter.com/
http://cakephp.org/http://www.symfony-project.org/
http://en.wikipedia.org/wiki/Web_application_framework
Application Frameworks•Application Framework
•Zend Framework
•toolkit / glue style: use what you want or use it all
•CakePHP & CodeIgnitor
•lightweight MVC frameworks with data models
•SymfonyMVC, more admin and configuration features
PHP Ecosystem
http://www.simpletest.org/http://phpt.info/
http://en.wikipedia.org/wiki/Unit_testinghttp://www.phpunit.de/
Unit Testing Frameworks
•PHPUnit
•Most popular, derived from NUnit patternSimpletest
•phpt
PHP Ecosystem
http://en.wikipedia.org/wiki/Comparison_of_text_editorshttp://en.wikipedia.org/wiki/Integrated_development_environment
http://www.xdebug.org/
IDEs & Editors•Editors
•pattern matched syntax highlighting & code foldingtypically multi-languageespecially good at text & code manipulationIDEsLanguage introspection (code completion)Errors / Warnings / Syntax CheckDebugging capabilities (breakpoints, watches, profiling)
PHP Ecosystem
http://www.zend.com/en/products/studio/http://www.eclipse.org/pdt/http://www.ultraedit.com/http://www.aptana.com
http://www.macromates.com
IDEs & Editors•Eclipse-based IDEsZend Studio (paid) / PDT (open source)
•great PHP editing and debugging
• Aptana
•javascript & css editing & code completion is excellentdebugging with xdebugText Editors
•Ultraedit on WindowsTextmate on Mac
•“E” is Textmate on Windows