Lucas Mendes | Software Architect | @devsdmf
PHP: EXTENDING THE CORE
WHY YOU SHOULD LEARN IT
Slide 2
Slide 2 text
$ whoami
Slide 3
Slide 3 text
PHP AT THE CORE
UNDER THE HOOD…
Slide 4
Slide 4 text
OVERVIEW
Slide 5
Slide 5 text
PHP: EXTENDING THE CORE
OVERVIEW
▸ Written in C Ansi
▸ Interpreted, imperative, procedural, object-oriented
▸ Dynamic typed
▸ Made for the web, used anywhere
▸ Extensible
▸ Powerful
Slide 6
Slide 6 text
ARCHITECTURE
Slide 7
Slide 7 text
PHP: EXTENDING THE CORE
Slide 8
Slide 8 text
EXTENSIONS
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
PHP: EXTENDING THE CORE
EXTENSIONS
▸ Adds functionality
▸ Replaces functionality
▸ Change behavior
▸ Performance optimization
▸ Security improvement
▸ Link against an external library
▸ and many more…
PHP: EXTENDING THE CORE
PHP INTERNAL EXTENSIONS
bcmath
curl
date
gd
ftp
shmop
iconv
dom
hash
mysqli
json intl
pcntl
mbstring
soap xsl
zlib
Everything in ext/ folder
Slide 15
Slide 15 text
EXTERNAL
EXTENSIONS
Slide 16
Slide 16 text
PHP: EXTENDING THE CORE
PECL: PHP EXTENSION COMMUNITY LIBRARY
▸ Too many extensions for various interesting
(and odd things)
▸ Installed with PECL tool
▸ Successor of the Siberia
▸ pecl.php.net
Slide 17
Slide 17 text
PHP: EXTENDING THE CORE
EXTENSIONS - EXTERNAL EXTENSIONS
tk
mongo
imagick
mcrypt
binpack
radius
jsonc
handlebars
inotify
solr
apc
libevent ev
opengl
tidy gender
archive
too many others…
Slide 18
Slide 18 text
PHP: EXTENDING THE CORE
EXTENSIONS OVERVIEW
Slide 19
Slide 19 text
STATIC
VS
SHARED
(EXTENSIONS)
Slide 20
Slide 20 text
PHP EXTENSIONS
VS
ZEND EXTENSIONS
Slide 21
Slide 21 text
EXTENSIONS
LIFETIME
Slide 22
Slide 22 text
EXTENSIONS
LIFETIME
Slide 23
Slide 23 text
PHP REQUEST
LIFECYCLES
Slide 24
Slide 24 text
PHP: EXTENDING THE CORE
PHP REQUEST LIFECYCLE - BASICS
Slide 25
Slide 25 text
PHP: EXTENDING THE CORE
PHP REQUEST LIFECYCLES - PROCESS-BASED MODEL
Slide 26
Slide 26 text
PHP: EXTENDING THE CORE
PHP REQUEST LIFECYCLES - THREAD-BASED MODEL
Slide 27
Slide 27 text
PHP: EXTENDING THE CORE
PHP REQUEST LIFECYCLES - EXECUTION
Slide 28
Slide 28 text
MEMORY MANAGEMENT
Slide 29
Slide 29 text
ZMM
(ZEND MEMORY MANAGER)
Slide 30
Slide 30 text
REQUEST-BOUND
VS
PERMANENT
(MEMORY ALLOCATION)
Slide 31
Slide 31 text
PHP: EXTENDING THE CORE
REQUEST-BOUND MEMORY ALLOCATION
▸ Must only be performed when PHP is treating a request (not before, not after)
▸ Must use ZMM memory allocation API
▸ Most part of the extensions uses just request-bound memory management
▸ Are tracked by ZMM, you’ll be notified about leaking
▸ Respects the user land INI "memory_limit"
Slide 32
Slide 32 text
PHP: EXTENDING THE CORE
PERMANENT MEMORY ALLOCATION
▸ Should not be performed while PHP is treating a request (not forbidden, but a
bad idea)
▸ Uses standard libc memory allocation API (not ZMM)
▸ Should be pretty rare in an extension