sevenstepstobetteroopcode

Upload: fohi2009

Post on 03-Feb-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/21/2019 sevenstepstobetteroopcode

    1/62

    Seven StepsSeven Stepsto Better OOP Codeto Better OOP Code

    Stefan PriebschStefan Priebsch

    thePHP.ccthePHP.ccZendCon09ZendCon09

  • 7/21/2019 sevenstepstobetteroopcode

    2/62

    Stefan PriebschStefan PriebschCo-Founder and Principal ConsultantCo-Founder and Principal Consultant

  • 7/21/2019 sevenstepstobetteroopcode

    3/62

    Premium PHP Consulting & Training. Worldwide.

    ArneBlankerts

    SebastianBergmann

    StefanPriebsch

  • 7/21/2019 sevenstepstobetteroopcode

    4/62

    DisclaimerDisclaimer

  • 7/21/2019 sevenstepstobetteroopcode

    5/62

    Hang the rules.Hang the rules.

    he!"re more li#ehe!"re more li#eguidelines an!$a!.%guidelines an!$a!.%

    --&li'abeth S$ann(--&li'abeth S$ann(Pirates of the CaribbeanPirates of the Caribbean

  • 7/21/2019 sevenstepstobetteroopcode

    6/62

    )s **P slo$+)s **P slo$+

  • 7/21/2019 sevenstepstobetteroopcode

    7/62

    he usual disclaimer for benchmar#s applies,he usual disclaimer for benchmar#s applies,

    foofoo /.09 sec/.09 secest11foo /.23 sec

    4test-5foo /.62 sec

    4test 7 ne$ est84test-5foo .0/ sec

  • 7/21/2019 sevenstepstobetteroopcode

    8/62

    2:; slo$er,2:; slo$er,

  • 7/21/2019 sevenstepstobetteroopcode

    9/62

    6 sec6 sec

  • 7/21/2019 sevenstepstobetteroopcode

    10/62

    he usual disclaimer for benchmar#s applies,he usual disclaimer for benchmar#s applies,

    print < 60 sec

    file=get=contents < /0 secm!s>l=connect < 600 sec

    HP ?& @e>uest < /:(000 sec

  • 7/21/2019 sevenstepstobetteroopcode

    11/62

    )A* is $here)A* is $herethe action is.the action is.

  • 7/21/2019 sevenstepstobetteroopcode

    12/62

    **P is**P isfast enough.fast enough.

  • 7/21/2019 sevenstepstobetteroopcode

    13/62

    Do not care aboutDo not care aboutperformanceperformanceBB

    BSome restrictions ma! appl!.BSome restrictions ma! appl!.

    66

  • 7/21/2019 sevenstepstobetteroopcode

    14/62

    hathatdo !oudo !ou

    do for ado for a

    liEing+liEing+

  • 7/21/2019 sevenstepstobetteroopcode

    15/62

    class Something public function door# G load data G

    G perform calculations G

    G render HI output G

    G store calculation result ... JJ

  • 7/21/2019 sevenstepstobetteroopcode

    16/62

    class Something public function doan!hings 4this-5loadData8 4this-5performCalculations8

    4this-5renderHtml8 4this-5store@esult8 J

    protected function loadData

    protected function performCalulations protected function renderHtml protected function store@esultJ

  • 7/21/2019 sevenstepstobetteroopcode

    17/62

  • 7/21/2019 sevenstepstobetteroopcode

    18/62

    Clearl! separateClearl! separatedifferent concernsdifferent concerns22

  • 7/21/2019 sevenstepstobetteroopcode

    19/62

  • 7/21/2019 sevenstepstobetteroopcode

    20/62

    class Some*bKect protected function loadData 4this-5data 7 4this-5db-5>uer!...8

    J

    public function render 4this-5loadData8

    return Html@enderer11createable4this-5data8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    21/62

    Iet othersIet othersdo the $or#.do the $or#.

  • 7/21/2019 sevenstepstobetteroopcode

    22/62

    class Cr!stalLall public function predictIottoMumbers4a( 4b( 4c

    G

    return ne$ IottoMumbers...8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    23/62

    Focus on the NP)Focus on the NP)//

  • 7/21/2019 sevenstepstobetteroopcode

    24/62

    )nterface Es.)nterface Es.

    )mplementation)mplementation

  • 7/21/2019 sevenstepstobetteroopcode

    25/62

    Oeep secretsOeep secrets

  • 7/21/2019 sevenstepstobetteroopcode

    26/62

    class Person

    protected function tal# Stranger11as#ForNCigarette8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    27/62

    class Person

    protected function tal# Stranger11get)nstance-5as#ForNCigarette8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    28/62

    class Person protected function tal#oFriend 4friend 4friend-5as#ForNCigarette8 J

    J

    class Friend public function as#ForNCigarette return ne$ Cigarette8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    29/62

    Do not tal#Do not tal#to strangers.to strangers.

  • 7/21/2019 sevenstepstobetteroopcode

    30/62

    Create loosel!Create loosel!coupled classescoupled classes

  • 7/21/2019 sevenstepstobetteroopcode

    31/62

    a#ea#e

    dependenciesdependencies

    eplicit.eplicit.

  • 7/21/2019 sevenstepstobetteroopcode

    32/62

    class Some*bKect protected function loadData 4this-5data 7 4this-5db-5>uer!...8

    J

    public function render 4this-5loadData8 return Html@enderer11createable4this-5data8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    33/62

    class Some*bKect protected function loadData 4this-5data 7 4this-5db-5>uer!...8

    J

    public function render@enderer 4renderer 4this-5loadData8 return 4this-5renderer-5createable4this-5data8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    34/62

    class Some*bKect protected function loadDataDb?ate$a! 4db 4this-5data 7 4db-5>uer!...8

    J

    public function render@enderer 4renderer 4this-5loadData8 return 4renderer-5createable4this-5data8 JJ

  • 7/21/2019 sevenstepstobetteroopcode

    35/62

    class Some*bKect public function ==constructDb?ate$a! 4db( @enderer 4r

    4this-5db 7 4db8 4this-5renderer 7 4r8 J

    ...

    J

  • 7/21/2019 sevenstepstobetteroopcode

    36/62

    Qse dependenc!Qse dependenc!

    inKectioninKection::

  • 7/21/2019 sevenstepstobetteroopcode

    37/62

    class &ngine public function start8

    public functoin stop8 public function goFaster4amount8 public function goSlo$er4amount8J

  • 7/21/2019 sevenstepstobetteroopcode

    38/62

    class Car etends &ngine ...J

  • 7/21/2019 sevenstepstobetteroopcode

    39/62

    class Steeringheel

    public function turn@ight4degrees8 public function turnIeft4degree8J

  • 7/21/2019 sevenstepstobetteroopcode

    40/62

    class Car etends &ngine etends Steeringheel ...J

  • 7/21/2019 sevenstepstobetteroopcode

    41/62

    ultiple inheritance+ultiple inheritance+

  • 7/21/2019 sevenstepstobetteroopcode

    42/62

    &ngine&ngine

  • 7/21/2019 sevenstepstobetteroopcode

    43/62

    &ngine&ngine

    RRSteering heelSteering heel

  • 7/21/2019 sevenstepstobetteroopcode

    44/62

    &ngine&ngineRR

    Steering heelSteering heelRR

    SeatSeat

  • 7/21/2019 sevenstepstobetteroopcode

    45/62

    CombineCombineobKects.obKects.

  • 7/21/2019 sevenstepstobetteroopcode

    46/62

    CarCar

    &ngine&ngine

    SeatSeat

    SteeringSteeringheelheel

  • 7/21/2019 sevenstepstobetteroopcode

    47/62

    class Car protected 4engine8 protected 4steeringheel8 protected 4frontSeat8

    public function ==construct 4this-5engine 7 ne$ &ngine8 4this-5steeringheel 7 ne$ Steeringheel8 4this-5frontSeat 7 ne$ Seat8

    JJ

  • 7/21/2019 sevenstepstobetteroopcode

    48/62

    class Car public function ==construct&ngine 4engine(

    Steeringheel 4steeringheel( Seat 4seat 4this-5engine 7 4engine8 4this-5steeringheel 7 4steeringheel8 4this-5frontSeat 7 4seat8 J

    J

  • 7/21/2019 sevenstepstobetteroopcode

    49/62

    4engine 7 ne$ &ngine84steeringheel 7 ne$ Steeringheel8

    4seat 7 ne$ Seat8

    4car 7 ne$ Car4engine( 4steeringheel( 4seat8

  • 7/21/2019 sevenstepstobetteroopcode

    50/62

    4engine 7 ne$ SuperStrong&ngine84steeringheel 7 ne$ Fanc!Steeringheel8

    4seat 7 ne$ ichaelSchuhmacher@acingSeat8

    4car 7 ne$ Car4engine( 4steeringheel( 4seat8

  • 7/21/2019 sevenstepstobetteroopcode

    51/62

    FaEour compositionFaEour compositionoEer inheritanceoEer inheritance33

  • 7/21/2019 sevenstepstobetteroopcode

    52/62

    NEoidNEoidinheritance.inheritance.

  • 7/21/2019 sevenstepstobetteroopcode

    53/62

    SuperglobalsSuperglobals

    ConstantsConstants

    SessionSession

    ConfigurationConfigurationDatabaseDatabase

    ebserEiceebserEice

    Class to estClass to est

  • 7/21/2019 sevenstepstobetteroopcode

    54/62

    )f it"s not tested()f it"s not tested(it does not eistit does not eist

    a#e it eas!a#e it eas!

  • 7/21/2019 sevenstepstobetteroopcode

    55/62

    a#e it eas!a#e it eas!

    to unit testto unit test

  • 7/21/2019 sevenstepstobetteroopcode

    56/62

    Fe$erFe$er

    dependencies.dependencies.

  • 7/21/2019 sevenstepstobetteroopcode

    57/62

    estableestable

    77

    aintainableaintainable

  • 7/21/2019 sevenstepstobetteroopcode

    58/62

    estableestable

    77&tensible&tensible

  • 7/21/2019 sevenstepstobetteroopcode

    59/62

  • 7/21/2019 sevenstepstobetteroopcode

    60/62

    han# !ou.han# !ou.

  • 7/21/2019 sevenstepstobetteroopcode

    61/62

    Copyright 2009 thePHP.cc, ermany

    Contact

    http!""thePHP.cc

    http!""###.priebsch.$e

    http!""###.sli$eshare.net"spriebsch

    http!""t#itter.com"spriebsch

    stefan%thePHP.cc, &'C! spriebsch

  • 7/21/2019 sevenstepstobetteroopcode

    62/62