sevenstepstobetteroopcode
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