Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Love-Hate Relationship Between Composer and...
Search
Coen Jacobs
September 26, 2015
Programming
0
220
The Love-Hate Relationship Between Composer and WordPress (WordCamp Netherlands 2015)
Coen Jacobs
September 26, 2015
Tweet
Share
More Decks by Coen Jacobs
See All by Coen Jacobs
So You Think You Can Composer?
coenjacobs
0
45
State of WordPress and eCommerce (WordPress meetup Nijmegen september 2015)
coenjacobs
0
340
Other Decks in Programming
See All in Programming
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
230
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
230
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
380
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
220
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
800
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
110
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
690
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
570
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
320
Result型で“失敗”を型にするPHPコードの書き方
kajitack
4
380
5つのアンチパターンから学ぶLT設計
narihara
1
110
C++20 射影変換
faithandbrave
0
530
Featured
See All Featured
Building Adaptive Systems
keathley
43
2.6k
Facilitating Awesome Meetings
lara
54
6.4k
GraphQLとの向き合い方2022年版
quramy
48
14k
The Cult of Friendly URLs
andyhume
79
6.5k
Six Lessons from altMBA
skipperchong
28
3.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Git: the NoSQL Database
bkeepers
PRO
430
65k
BBQ
matthewcrist
89
9.7k
Transcript
The Love-Hate Relationship Between Composer and WordPress @CoenJacobs at #wcnl
2015
Hello My name is Coen Jacobs Developer at Radish Concepts
Jumped out of the bubble Still do WordPress projects
Outside of the WordPress ecosystem, fun stuff happens too!
Composer “Composer is a tool for dependency management in PHP.
It allows you to declare the libraries your project depends on and it will manage (install/ update) them for you.”
What does Composer do? » Load your dependencies » Loads
dependencies of your dependencies » And so on... » Offers a powerful autoloader » Inspired by npm and bundler » Made by Jordi Boggiano
Alright, but how does it work?
Autoloading
Manual loading... require_once 'classes/class-core.php'; require_once 'includes/wpseo-local-functions.php'; require_once 'includes/ajax-functions.php'; require_once 'classes/class-core.php';
require_once 'classes/class-admin.php'; require_once 'classes/class-admin-wrappers.php'; require_once 'classes/class-metaboxes.php'; require_once 'classes/class-frontend.php'; require_once 'classes/class-storelocator.php'; require_once 'classes/class-taxonomy.php';
Classmap: "autoload": { "classmap": [ "includes" ] } PSR-4: "autoload":
{ "psr-4": {"Never5\\ WPNotificationCenter\\": "src/"} }
Just add require 'vendor/autoload.php'; That's it Does this for dependencies
as well
Even PHP 5.2 compatible
All plugins should use Composer autoloading, seriously! (if you have
more than one file)
Nothing but love so far!
Trust me, we'll get to the good stuff soon!
Dependency management
Say, you have a fancy library or want to use
one
Add it to your composer.json "require": { "wpupdatephp/wp-update-php": "~1.0" }
run composer install
Package will be installed vendor/wpupdatephp/ wp-update-php/ Added to autoloader as
well
And one day... (actually, two days ago...)
Dependency hell
You'll have this problem with any dependency manager That includes:
doing it manually
What's wrong?
Plugin A: "require": { "wpupdatephp/wp-update-php": "~1.0" } Plugin B: "require":
{ "wpupdatephp/wp-update-php": "~1.0" } Solution: Install WPupdatePHP version 1.0.0, right?
Sadly, no... Users download zip files, with vendor directory bundled
Bundling is the only way
One plugin bundles 1.1.0, the other 1.0.0 Which one is
used?
The race is on!
Include the file or the autoloader autoloader does class_exists check
first one wins
In the example, 1.0.0 was loaded the plugin bundling 1.1.0,
assumes that version is there Fatal error: Call to undefined method
Now the fun stuff begins!
What can we do to prevent this?
Prefix everything!
Example: Pimple Pimple: namespace Pimple; Danny's prefixed version: namespace ScrollTriggeredBoxes\DI;
It works But where is the developer happiness?
Every update of Pimple... Update all the files Someone make
a SaaS for this...
How would a developer solve this?
Manage the entire site via Composer Including WordPress core Everything
works fine, at least 99% of the time
What if you can't? Want to bundle something with your
plugin What if you can't add your site to Composer?
well...
Add Composer to your site
Creates a master composer.json » loop through wp-content/plugins/ » check
for composer.json file » run wikimedia/composer-merge-plugin » composer install » installed in wp-content/vendor/ At least in theory, this works
In WordPress core? Maybe Requires PHP 5.3+ Fairly resource intensive
The only proper solution
Until that day...
Thank you! @CoenJacobs coenjacobs.me Want to work with me? We're
looking for both frontend & backend developers! Contact me or @radishconcepts
Image credit » Slide 1: https://www.flickr.com/photos/ lizadaly/4373330774/ » Slide 7:
https://www.flickr.com/photos/ diaper/7328032558/ » Slide 13: https://www.flickr.com/ photos/93277085@N08/12715023064/ » Slide 15: https://www.flickr.com/ photos/dandeluca/2720139047/ » Slide 22: https://www.flickr.com/ photos/usnavy/7879793204/
Image credit » Slide 27: https://www.flickr.com/ photos/mdpettitt/4954174041/ » Slide 30:
https://www.flickr.com/ photos/orphanjones/1769903155/ » Slide 36: https://www.flickr.com/ photos/twitteroffice/4524716820/ » Slide 43: https://www.flickr.com/ photos/doug88888/4537134655/