PHP Software Engineering Programming Languages Language Features Paradigms







































- Slides: 39
PHP Software Engineering
Programming Languages Language Features & Paradigms
Programming Languages Paradigms • Imperative vs. Declarative • Object Oriented • Class / Inheritance • Prototype based • Procedural http: //en. wikipedia. org/wiki/Programming_paradigms http: //en. wikipedia. org/wiki/Imperative_programming http: //en. wikipedia. org/wiki/Declarative_programming http: //en. wikipedia. org/wiki/Object-oriented_programming http: //en. wikipedia. org/wiki/Class-based_programming http: //en. wikipedia. org/wiki/Prototype-based_programming http: //en. wikipedia. org/wiki/Procedural_programming
Programming Languages Typing • Static vs. Dynamic • Strong vs. Weak • Duck Typing http: //en. wikipedia. org/wiki/Type_system
Programming Languages Typing • Static vs. Dynamic • Strong vs. Weak • Duck Typing http: //en. wikipedia. org/wiki/Type_system
Programming Languages Compiled vs. Scripting • Compiled (machine code) • c, c++ • Compiled (byte-code) • Java, C# (. net) • Scripting • PHP, Ruby, Python, ECMAScript (Java / Action) http: //en. wikipedia. org/wiki/Scripting_language http: //en. wikipedia. org/wiki/Compiled_language http: //en. wikipedia. org/wiki/Virtual_machine http: //en. wikipedia. org/wiki/Just-in-time_compilation
Programming Languages PHP • Scripting Language • Virtual Machine: Zend Engine • Written in C • Multi-paradigm • Imperative (procedural) • Object-oriented (inheritance) • Weak dynamic typing http: //en. wikipedia. org/wiki/Zend_Engine http: //en. wikipedia. org/wiki/PHP
Design Patterns Building Blocks for Software
Design Patterns Overview • Applications • Model 1 • Model 2 • Programming Patterns • Architectural Patterns http: //en. wikipedia. org/wiki/Model_1 http: //en. wikipedia. org/wiki/Model_2 http: //en. wikipedia. org/wiki/Design_pattern_(computer_science) http: //en. wikipedia. org/wiki/Architectural_pattern_(computer_science)
Design Patterns 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 http: //en. wikipedia. org/wiki/Model_1 http: //en. wikipedia. org/wiki/Model_2 http: //en. wikipedia. org/wiki/Separation_of_concern http: //en. wikipedia. org/wiki/Separation_of_presentation_and_content
Programming Patterns Design Patterns • Most notable source: Gang of Four • Object oriented 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)
Design Patterns / Software Patterns Example: Factory http: //en. wikipedia. org/wiki/Factory_method_pattern http: //en. wikipedia. org/wiki/Creational_pattern
Example: Lazy Loading Design Patterns / Software Patterns http: //en. wikipedia. org/wiki/Lazy_initialization_pattern
Design Patterns / Software Patterns Example: Singleton http: //en. wikipedia. org/wiki/Singleton_pattern
Design Patterns / Software Patterns Example: Composite http: //en. wikipedia. org/wiki/Composite_pattern http: //devzone. zend. com/node/view/id/7
Design Patterns / Software Patterns Example: Adapter http: //en. wikipedia. org/wiki/Adapter_patter n
Design Patterns / Software Patterns Example: Observer http: //en. wikipedia. org/wiki/Observer_patter n http: //www. php. net/~helly/php/ext/spl/
Programming Patterns Design Patterns • Most notable source: Martin Fowler • Po. EAA: Patterns of Enterprise Application Architecture http: //en. wikipedia. org/wiki/Architectural_pattern_(computer_science) http: //martinfowler. com/eaa. Catalog/ http: //www. amazon. com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/
Design Patterns / Architectural Patterns Non-Po. EAA • Presentation-abstraction-control • Service-oriented architecture (distributed) • Mulit/Three-Tier • Peer-to-Peer (distributed) http: //en. wikipedia. org/wiki/Presentation-abstraction-control http: //en. wikipedia. org/wiki/Service-oriented_architecture http: //en. wikipedia. org/wiki/Three-tier_(computing) http: //en. wikipedia. org/wiki/Peer-to-peer
Design Patterns / Architectural Patterns Po. EAA • Logical: Domain Model & Table Module • Data: Table Row & Row Data Gateway, Active. Record, Data Mapper • Other: • Repository, Registry, Plugin • Model-View-Controller, Front Controller, Two-step View http: //martinfowler. com/eaa. Catalog/ http: //en. wikipedia. org/wiki/Active_record_pattern
Design Patterns / Architectural Patterns Example: Domain Model http: //en. wikipedia. org/wiki/Domain_Mode http: //martinfowler. com/eaa. Catalog/doma del. html
Design Patterns / Architectural Patterns Example: Table Module http: //martinfowler. com/eaa. Catalog/table. Modu le. html
Design Patterns / Architectural Patterns Example: Table Gateway http: //martinfowler. com/eaa. Catalog/table. Data. Gateway. html
Design Patterns / Architectural Patterns Example: Row Gateway http: //martinfowler. com/eaa. Catalog/row. Data. Gateway. ht ml
Design Patterns / Architectural Patterns Example: Active Record http: //martinfowler. com/eaa. Catalog/active. Record. html http: //en. wikipedia. org/wiki/Active_record_pattern
Design Patterns / Architectural Patterns Example: Active Record http: //martinfowler. com/eaa. Catalog/active. Record. html http: //en. wikipedia. org/wiki/Active_record_pattern
Design Patterns / Architectural Patterns Example: MVC http: //en. wikipedia. org/wiki/Model-view-controller http: //martinfowler. com/eaa. Catalog/model. View. Controller. html
Design Patterns / Architectural Patterns Example: Registry http: //martinfowler. com/eaa. Catalog/registry. html
Software Development Process Best Practices for Building Software
Development Process Overview • Unit Testing • Source Control • Coding Standards • Continuous Integration • Documentation http: //en. wikipedia. org/wiki/Programming_style http: //martinfowler. com/articles/continuous. Integration. html http: //en. wikipedia. org/wiki/Unit_testing http: //en. wikipedia. org/wiki/Revision_control
Development Process 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 http: //en. wikipedia. org/wiki/XUnit test code
• Keep track of changes you made Development Process • Light-weight backup Source Control • 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 http: //en. wikipedia. org/wiki/Active_record_pattern http: //git-scm. com/ http: //www. github. com http: //en. wikipedia. org/wiki/Distributed_revision_control
Development Process Coding Standards • Why have coding standards? readability for yourself and colleaguesprevents mistakes, syntax errors. Pear Coding Standardsdon't write your own standards, its not worth your time. Pear standards are commonly accepted, and align with other languages as well http: //pear. php. net/pepr-proposal-show. php? id=426 http: //pear. php. net/manual/en/standards. php http: //framework. zend. com/manual/en/coding-standard. html
Development Process 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 http: //en. wikipedia. org/wiki/Active_record_pattern http: //code. google. com/p/xinc/ http: //www. atlassian. com/software/bamboo/
PHP Ecosystem Software & Tools
Application • Application Frameworks PHP Ecosystem • Zend Framework • toolkit / glue style: use what you want or use it all • Cake. PHP & Code. Ignitor • lightweight MVC frameworks with data models • Symfony. MVC, more admin and http: //martinfowler. com/eaa. Catalog/ http: //codeigniter. com/ hthttp: //en. wikipedia. org/wiki/Active_record_pattern http: //www. symfony-project. org/ http: //en. wikipedia. org/wiki/Active_record_patterndia. org/wiki/Web_application_framework configuration features
Unit Testing Frameworks PHP Ecosystem • PHPUnit • Most popular, derived from NUnit pattern. Simpletest • phpt http: //martinfowler. com/eaa. Catalog/ http: //phpt. info/ http: //en. wikipedia. org/wiki/Unit_testing hhttp: //en. wikipedia. org/wiki/Active_record_pattern
PHP Ecosystem IDEs & Editors • pattern matched syntax highlighting & code foldingtypically multilanguageespecially good at text & code manipulation. IDEs. Language introspection (code completion)Errors / Warnings / Syntax Check. Debugging capabilities (breakpoints, watches, profiling) http: //en. wikipedia. org/wiki/Comparison_of_text_editors http: //en. wikipedia. org/wiki/Integrated_development_environment http: //en. wikipedia. org/wiki/Active_record_pattern
PHP Ecosystem IDEs & Editors • Eclipse-based IDEs. Zend Studio (paid) / PDT (open source) • • great PHP editing and debugging Aptana • javascript & css editing & code completion is excellentdebugging with xdebug. Text Editors • Ultraedit on Windows. Textmate on Mac • “E” is Textmate on Windows http: //www. zend. com/en/products/studio/ http: //www. eclipse. org/pdt/ http: //www. ultraedit. com/ http: //en. wikipedia. org/wiki/Active_record_patternptana. com http: //www. macromates. com