Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Can  be  very  big Can  be  spread  across  many  files Can  be  spread  across  multiple  devices

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

DBGP  Server:  9000 IDE  Key:  $_COOKIE,$_GET Breakpoints Remote  IP Remote  Port IDE  Key

Slide 13

Slide 13 text

DBGP  Server:  9000 export  XDEBUG_CONFIG="idekey=X" Breakpoints Remote  IP Remote  Port IDE  Key

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

XDebug Function  Trace

Slide 17

Slide 17 text

LLDB  /  GDB

Slide 18

Slide 18 text

Strace /  dtruss

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

1. Check  log  files 2. Try  to  reproduce  the  bug 3. Go  through  the  code  step-­‐by-­‐step 4. Add  breakpoint  at  important  locations

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

KNOW  THE  DOMAIN

Slide 26

Slide 26 text

SINGLE  RESPONSIBILITY • One  class  has  one  responsibility • Use  controllers  to  transform  the  request  in  a  response • Use  services  to  handle  business  logic • Use  data  managers  to  collect  /  store  data • Use  Events  to  trigger  side  actions • Use  validators  for  validation

Slide 27

Slide 27 text

DEFENSIVE  PROGRAMMING • Enable  strict  types • Specify  all  argument  types • Specify  return  type • Validate  state • Don't  be  afraid  to  throw  exceptions • Always  keep  track  of  the  unhappy  path

Slide 28

Slide 28 text

CODE  CALISTENICS 1. Only  one  indentation  per  method 2. Do  NOT  use  the  "else"  keyword 3. Wrap  all  primitive  types  if  it  has  behavior 4. Only  one  -­‐>  per  line 5. Do  not  abbreviate 6. Keep  your  classes  small 7. Limit  the  number  of  instance  variables 8. Use  first  class  collections

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

PHP  Inspections  EA  extended PHP  Annotations Symfony  Plugin Magicento Drupal  Plugin IDE  CONFIGURATION

Slide 32

Slide 32 text

AUTOMATED  TESTING PHP-­‐CS LINTERS

Slide 33

Slide 33 text

CODE  REVIEWS

Slide 34

Slide 34 text

No content