PHP Software Engineering Programming Languages Language Features Paradigms

  • Slides: 39
Download presentation
PHP Software Engineering

PHP Software Engineering

Programming Languages Language Features & Paradigms

Programming Languages Language Features & Paradigms

Programming Languages Paradigms • Imperative vs. Declarative • Object Oriented • Class / Inheritance

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

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

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

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

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 Building Blocks for Software

Design Patterns Overview • Applications • Model 1 • Model 2 • Programming Patterns

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 •

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

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.

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

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: Singleton http: //en. wikipedia. org/wiki/Singleton_pattern

Design Patterns / Software Patterns Example: Composite http: //en. wikipedia. org/wiki/Composite_pattern http: //devzone. zend.

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: 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.

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

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) •

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

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.

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.

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.

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.

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

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

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.

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

Design Patterns / Architectural Patterns Example: Registry http: //martinfowler. com/eaa. Catalog/registry. html

Software Development Process Best Practices for Building Software

Software Development Process Best Practices for Building Software

Development Process Overview • Unit Testing • Source Control • Coding Standards • Continuous

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

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

• 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

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 •

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

PHP Ecosystem Software & Tools

Application • Application Frameworks PHP Ecosystem • Zend Framework • toolkit / glue style:

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.

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

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

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