SlideShare ist ein Scribd-Unternehmen logo
1 von 79
Downloaden Sie, um offline zu lesen
1 / 79
Der ultimative
Der ultimative
PHP Framework Vergleich
PHP Framework Vergleich
2023 Edition
2023 Edition
2 / 79
Ralf Eggert
Chef der Travello GmbH (2005+)
PHP und Web Entwickler (1999+)
ZF Fossil (2006+)
Alexa Skill Entwickler (2017+)
Alexa Champion (2018+)
3 / 79
Motivation
4 / 79
PHP Frameworks wie Sand am Meer
5 / 79
Frage 1:
Welche PHP Frameworks
setzt ihr aktuell in euren
Projekten ein?
6 / 79
Frage 2:
Welche Erwartung habt ihr
an diesen Vortrag?
7 / 79
And the
And the
winner is…
winner is…
8 / 79
https://bit.ly/3ge4rIj
Damals…
9 / 79
Probleme bei Framework Vergleichen
»Optimierte«
Performance
Vergleiche
Veraltet
Äpfel mit Birnen
vergleichen
Abhaken einer
Feature Matrix
Nicht
objektiv
10 / 79
Optimaler Framework Vergleich
»Fairer«
Performance
Vergleich
Aktuell
Äpfel mit Äpfeln
vergleichen
Umfassend
Objektiv
11 / 79
Disclaimer
Ich mag keine ORM,
Template Engines und
Annotationen.
Aber ich versuche, mich
zusammen zu reißen.
;-)
12 / 79
Vorgehensweise
13 / 79
1 Website, 3 Frameworks
14 / 79
Laminas Mezzio 3
https://laminas.katzenwelt.rocks/
Umgesetzt vom Senior
Entwickler
Mezzio Skeleton
Application per Composer
installiert
15 / 79
Symfony 6
https://symfony.katzenwelt.rocks/
Umgesetzt vom Junior
Entwickler
Projekt mit
Symfony CLI angelegt
16 / 79
Laravel 9
https://laravel.katzenwelt.rocks/
Umgesetzt vom Junior
Entwickler
Installiert über Composer
mit Skeleton
17 / 79
Gemeinsamkeiten
Frontend
mit Bootstrap 4.5
Datenbank
mit MySQL 8
PHP 8.1
Selber
Cloud Server
18 / 79
Unterschiede
Doctrine ORM
Twig Templates
Eigener Model Layer
PHP Templates
Eloquent ORM
Blade Templates
19 / 79
Bewertungskategorien
Popularität
Performance & Gedöns
Benutzerfreundlichkeit
ChatGPT
Code
20 / 79
Popularität
21 / 79
Traue keiner
Statistik, die du
nicht selber
gefälscht hast!
22 / 79
Welches
Framework ist
weltweit am
beliebtesten?
23 / 79
Weltweit
24 / 79
Weltweit
(ohne
Laravel)
25 / 79
Welches
Framework ist in
Deutschland am
beliebtesten?
26 / 79
Nur in DE
27 / 79
Nur in DE
(ohne
Laravel &
Symfony)
28 / 79
Popularität
Weltweit:
1. Laravel
2. Laminas
3. Symfony
Deutschland:
1. Laravel
2. Symfony
3. Laminas / Cakephp
29 / 79
Aufpassen
Die Messung der
Popularität anhand eines
Parameters muss nicht die
Realität widerspiegeln!
30 / 79
31 / 79
Benutzerfreundlichkeit
32 / 79
Pasquale
Was sagt der Junior Entwickler?
Bietet mir
am wenigsten
Unterstützung.
Dokumentation
wirkt etwas
unübersichtlich.
Skeleton Application
ist nicht sehr intuitiv.
Keine PhpStorm
Extension für
PHP Templates.
33 / 79
Was sagt der Senior Entwickler?
Ralf
Sehr flexibel bei
Routing, DI, Templates
und Datenbank
Dokumentation hat
sich etwas gebessert.
Middleware Ansatz
zukunftsfähiger als
MVC Ansatz.
Framework enthält
weniger Magie als
Laminas MVC.
Hohe Lernkurve.
Alles muss man
selber machen.
34 / 79
Routing
FastRoute LaminasRouter
DI
Pimple
LaminasServiceManager
Symfony DI
Container
PHP DI
Templating
Plates
LaminasView
Twig
Datenbank
Doctrine
LaminasDb
Individueller
Model Layer
Eloquent
Flexibilität
35 / 79
Entities
Hydratoren
Input Filter
Formulare
»Alles muss man selber machen«
Repositories
Storages
Nur rudimentäre
Code Generierung
36 / 79
Pasquale
Was sagt der Junior Entwickler?
Laravel macht es
deutlich besser als
Laminas Mezzio.
Die Dokumentation
ist wesentlich besser.
Laracasts! (tw. €)
Projekt wirkt
strukturierter, hat aber
einige Dateien mit
unklarem Nutzen.
Blade kommt
Templating mit PHP
sehr nahe. Es gibt eine
PhpStorm Extension!
37 / 79
Was sagt der Senior Entwickler?
Ralf
Neue Projekte lassen sich
sehr schnell aufsetzen.
Projektstruktur für
mich nicht komplett
nachvollziehbar.
Artisan ist ein sehr
mächtiges Tool, das kaum
Wünsche offen lässt!
Laravel ohne Blade und
Eloquent ist möglich,
aber wohl sinnlos.
Sehr Einsteiger
freundlich.
38 / 79
Pasquale
Was sagt der Junior Entwickler?
Symfony ist für
mich der klare Sieger.
Dokumentation
sehr gut geschrieben.
Symfonycasts! (tw. €)
Projekt gut strukturiert
und bietet notwendige
Beispiel-Dateien.
Twig ist sehr leicht zu
erlernen und erweiterbar.
PhpStorm Extension!
Sehr überzeugend ist die
Symfony CLI sowie die
Symfony Console im Projekt.
39 / 79
Was sagt der Senior Entwickler?
Ralf
Sehr gute Unterstützung
für die Entwickler
Community!
Symfony CLI und
Symfony Console sind sehr
mächtige Tools!
Symfony ohne Twig und
Doctrine ist möglich, aber
wohl sinnlos.
Für PHP Einsteiger
und Profis.
Neue Projekte lassen sich
sehr schnell aufsetzen.
40 / 79
Benutzer-
freundlichkeit
1. Symfony
2. Laravel
3. Laminas
41 / 79
Aufpassen
Das war nur die Meinung
von zwei einzelnen
Entwicklern.
Es gibt bestimmt viele
andere Sichtweisen.
42 / 79
Code
43 / 79
object(FactEntityFactEntity)
private ?int 'id' => int 1
private ?string 'status' => string 'approved'
private ?string 'title' => string 'Seit wann gibt es Katzen und ...'
private ?string 'text' => string 'Die kuschelige Hauskatze hat ...'
Entitäten in Laminas Mezzio
handgeklöppelt von Ralf
44 / 79
object(AppEntityFacts)
private ?int 'id' => int 1
private ?string 'status' => string 'approved'
private ?string 'title' => string 'Seit wann gibt es Katzen und ...'
private ?string 'text' => string 'Die kuschelige Hauskatze hat ...'
Entitäten in Symfony
mit Doctrine
45 / 79
object(AppModelsFact)
protected 'connection' => string 'mysql' (length=5)
protected 'table' => string 'facts' (length=5)
protected 'primaryKey' => string 'id' (length=2)
protected 'keyType' => string 'int' (length=3)
public 'incrementing' => boolean true
protected 'attributes' =>
array (size=4)
'id' => int 1
'status' => string 'approved'
'title' => string 'Seit wann gibt es Katzen und ...'
'text' => string 'Die kuschelige Hauskatze hat ...'
[...]
Active Record Models in Laravel
mit Eloquent (30 Eigenschaften, davon 5 public! WTF!)
46 / 79
<?php
use FactEntityFactEntity;
/** @var FactEntity $fact */
$fact = $this->fact;
$this->headTitle('Katzen Fakt ' . $fact->getId());
?>
<div class="jumbotron">
<h1>Fakt <?= $fact->getId() ?></h1>
<h2><?= $fact->getTitle() ?></h2>
<p>
<?= $fact->getText() ?>
</p>
</div>
<a href="<?= $this->url('fact-list') ?>" class="btn btn-primary">Zurück</a>
PHP Templates mit Laminas Mezzio
47 / 79
{% extends 'base.html.twig' %}
{% block title %}
Katzen Fakt {{ fact.id }} - {{ parent() }}
{% endblock %}
{% block body %}
<div class="jumbotron">
<h1>Fakt {{ fact.id }}</h1>
<h2>{{ fact.title }}</h2>
<p>
{{ fact.text }}
</p>
</div>
<a href="{{ path('app_katzen-fakten')}}" class="btn btn-primary">Zurück</a>
{% endblock %}
Twig Templates mit Symfony
48 / 79
@extends('default')
@section('title','Katzen Fakt '.$fact->id.' -')
@section('content')
<div class="jumbotron">
<h1>Fakt {{ $fact->id }}</h1>
<h2>{{ $fact->title }}</h2>
<p>
{{ $fact->text }}
</p>
</div>
<a href="{{ url('katzen-fakten') }}" class="btn btn-primary">Zurück</a>
@endsection
Blade Templates mit Laravel
49 / 79
public function handle(ServerRequestInterface $request): ResponseInterface
{
$id = (int)$request->getAttribute('id');
$data = [
'fact' => $this->factRepository->getFactById($id),
];
return new HtmlResponse(
$this->template->render('fact::fact-show', $data)
);
}
Handler mit Laminas Mezzio
50 / 79
#[Route('/katzen-fakt/{id}', name: 'app_katzen-fakt', methods: ['GET'])]
public function renderFact(ManagerRegistry $doctrine, string $id = null)
{
$catFact = $doctrine→getRepository(Facts::class)→find($id);
return $this->render('fact/singlefact.html.twig', [
'fact' => $catFact
]);
}
Controller Action mit Symfony
51 / 79
public function renderFact(int $id)
{
$fact = Fact::query()->find($id);
return view('fact.singlefact', ['fact' => $fact]);
}
Controller Action mit Laravel
52 / 79
Code
1. Symfony
1. Laminas
2. Laravel
53 / 79
Aufpassen
Wir haben nur 3 Bausteine
verglichen.
Eine Anwendung besteht
aber aus viel mehr
Bausteinen!
54 / 79
Performance und Gedöns
55 / 79
Traue keinem
Benchmark, den
du nicht selber
gefälscht hast!
56 / 79
Simple Methodik
define('SYMFONY_START', microtime(true));
[…]
echo '<em>Run time: '
. round((microtime(true) - SYMFONY_START)*1000, 2)
. '</em>';
57 / 79
Benchmark I
Aufruf 1 Aufruf 2 Aufruf 3 Aufruf 4 Aufruf 5 Aufruf 6 Aufruf 7 Aufruf 8 Aufruf 9 Aufruf 10
0,00
50,00
100,00
150,00
200,00
250,00
300,00
Laminas
Mezzio
Symfony
Laravel
58 / 79
Benchmark II
Aufruf 1 Aufruf 2 Aufruf 3 Aufruf 4 Aufruf 5 Aufruf 6 Aufruf 7 Aufruf 8 Aufruf 9 Aufruf 10
0,00
2,00
4,00
6,00
8,00
10,00
12,00
14,00
16,00
18,00
20,00
Laminas
Mezzio
Symfony
Laravel
59 / 79
Benchmark III
60 / 79
Zahlen Gedöns
Größe Application 409 KB 358 KB 252 KB
Größe Vendor 26 MB 35 MB 17 MB
Composer Pakete 60 69 40
61 / 79
Performance
1. Laminas Mezzio
2. Laravel
3. Symfony
62 / 79
Aufpassen
Der Vergleich war aus
mindestens 2 Gründen
nicht ganz fair!
Welche?
63 / 79
ChatGPT
64 / 79
Briefing
Du bist Berater für PHP
Frameworks. Du kennst nur die
PHP Frameworks Symfony,
Laravel und Laminas.
Ich werde dir nun einige Fragen
stellen, die du jeweils in
maximal 60 Wörtern oder 400
Zeichen beantworten musst.
65 / 79
Frage 1
Welches Framework würdest du
für eine kleine und einfache
Kampagnen Website
verwenden, die maximal 3
Monate online sein wird?
66 / 79
Frage 1
Welches Framework würdest du
für eine kleine und einfache
Kampagnen Website
verwenden, die maximal 3
Monate online sein wird?
Ich würde Laravel empfehlen.
Es ist benutzerfreundlich, hat
eine kurze Lernkurve und bietet
gute Unterstützung für schnelle
Entwicklung und Bereitstellung.
Die breite Palette von
Hilfsbibliotheken und -tools
macht es ideal für kleine
Projekte mit kurzer
Lebensdauer.
67 / 79
Frage 2
Welches Framework würdest du
für eine komplexere Anwendung
empfehlen mit großem
Funktionsumfang, die
voraussichtlich 2 bis 3 Jahre
online sein wird?
68 / 79
Frage 2
Welches Framework würdest du
für eine komplexere Anwendung
empfehlen mit großem
Funktionsumfang, die
voraussichtlich 2 bis 3 Jahre
online sein wird?
Für eine komplexere
Anwendung mit einem großen
Funktionsumfang würde ich
Symfony empfehlen.
Es ist robust, skalierbar und
verfügt über eine Vielzahl von
Bundles, die die Erweiterung der
Funktionalität erleichtern.
Darüber hinaus hat es eine
starke Community und einen
langfristigen Support.
69 / 79
Frage 3
Welches Framework würdest du
für eine Enterprise Anwendung
empfehlen mit hoch komplexen
Funktionsumfang, das über eine
Lebensdauer von mindestens 10
Jahren ausgerichtet ist?
70 / 79
Frage 3
Welches Framework würdest du
für eine Enterprise Anwendung
empfehlen mit hoch komplexen
Funktionsumfang, das über eine
Lebensdauer von mindestens 10
Jahren ausgerichtet ist?
Für eine langlebige, hochkomplexe
Enterprise-Anwendung würde ich
das Laminas Framework empfehlen.
Es ist das Nachfolgeprojekt von
Zend Framework, das für seine
Stabilität und Skalierbarkeit
bekannt ist.
Laminas ist modular aufgebaut, was
eine hohe Anpassbarkeit
ermöglicht. Zudem hat es
umfangreiche Enterprise-Features
und guten langfristigen Support.
71 / 79
ChatGPT
1. Laravel
1. Symfony
1. Laminas
72 / 79
Aufpassen
Antworten von KIs wie
ChatGPT sind immer mit
Vorsicht zu genießen!
73 / 79
And the winner is...
74 / 79
Verdienter
Sieg
;-)
75 / 79
Kein klarer
Sieger
76 / 79
Empfehlung
Für Einsteiger bis
Fortgeschrittene
Für kleinere bis mittlere
Anwendungen
77 / 79
Empfehlung
Für Einsteiger bis Profis
Für kleine bis komplexe
Anwendungen
78 / 79
Empfehlung
Für Fortgeschrittene bis
Profis
Für mittlere bis sehr
komplexe Anwendungen
79 / 79
Fragen?
ralf@travello.de
www.travello.de

Weitere ähnliche Inhalte

Ähnlich wie Der ultimative PHP Framework Vergleich 2023 Edition

Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenAndré Goliath
 
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Novakenstein
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsAngelo Maron
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu LaminasRalf Eggert
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfNETWAYS
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringOSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringNETWAYS
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsNETWAYS
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungEduard Hildebrandt
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
IPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopIPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopRalf Eggert
 
Gearman - Distributed Job System
Gearman - Distributed Job SystemGearman - Distributed Job System
Gearman - Distributed Job SystemMayflower GmbH
 
Web-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeWeb-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeThomas Fahle
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudAOE
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickAmazee Labs
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Javacamunda services GmbH
 

Ähnlich wie Der ultimative PHP Framework Vergleich 2023 Edition (20)

JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
camunda BPM + Apache Camel
camunda BPM + Apache Camelcamunda BPM + Apache Camel
camunda BPM + Apache Camel
 
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringOSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
IPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopIPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive Workshop
 
Gearman - Distributed Job System
Gearman - Distributed Job SystemGearman - Distributed Job System
Gearman - Distributed Job System
 
Web-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeWeb-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::Mechanize
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und Ausblick
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
 
check_sap_health
check_sap_healthcheck_sap_health
check_sap_health
 

Mehr von Ralf Eggert

ChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteRalf Eggert
 
PHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnRalf Eggert
 
Alexa, what's next?
Alexa, what's next?Alexa, what's next?
Alexa, what's next?Ralf Eggert
 
Alexa, wohin geht die Reise
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die ReiseRalf Eggert
 
8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface MeetupRalf Eggert
 
Alexa Skill Maintenance
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill MaintenanceRalf Eggert
 
Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Ralf Eggert
 
Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Ralf Eggert
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu LaminasRalf Eggert
 
Alexa for Hospitality
Alexa for HospitalityAlexa for Hospitality
Alexa for HospitalityRalf Eggert
 
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Ralf Eggert
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenRalf Eggert
 
Die sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteDie sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteRalf Eggert
 
Künstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitRalf Eggert
 
Multi-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaMulti-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaRalf Eggert
 
Mein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein BackendMein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein BackendRalf Eggert
 
Zend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationRalf Eggert
 
Sieben Tipps für den Voice Commerce mit PHP
Sieben Tipps für den Voice Commerce mit PHPSieben Tipps für den Voice Commerce mit PHP
Sieben Tipps für den Voice Commerce mit PHPRalf Eggert
 
Multi Modal Voice Development with Amazon Alexa
Multi Modal Voice Development with Amazon AlexaMulti Modal Voice Development with Amazon Alexa
Multi Modal Voice Development with Amazon AlexaRalf Eggert
 

Mehr von Ralf Eggert (20)

ChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heute
 
PHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickeln
 
Alexa, what's next?
Alexa, what's next?Alexa, what's next?
Alexa, what's next?
 
Alexa, wohin geht die Reise
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die Reise
 
8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup
 
Welcome Bixby
Welcome BixbyWelcome Bixby
Welcome Bixby
 
Alexa Skill Maintenance
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill Maintenance
 
Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?
 
Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
 
Alexa for Hospitality
Alexa for HospitalityAlexa for Hospitality
Alexa for Hospitality
 
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
 
Die sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteDie sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice Projekte
 
Künstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und Wirklichkeit
 
Multi-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaMulti-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon Alexa
 
Mein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein BackendMein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein Backend
 
Zend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next Generation
 
Sieben Tipps für den Voice Commerce mit PHP
Sieben Tipps für den Voice Commerce mit PHPSieben Tipps für den Voice Commerce mit PHP
Sieben Tipps für den Voice Commerce mit PHP
 
Multi Modal Voice Development with Amazon Alexa
Multi Modal Voice Development with Amazon AlexaMulti Modal Voice Development with Amazon Alexa
Multi Modal Voice Development with Amazon Alexa
 

Der ultimative PHP Framework Vergleich 2023 Edition

  • 1. 1 / 79 Der ultimative Der ultimative PHP Framework Vergleich PHP Framework Vergleich 2023 Edition 2023 Edition
  • 2. 2 / 79 Ralf Eggert Chef der Travello GmbH (2005+) PHP und Web Entwickler (1999+) ZF Fossil (2006+) Alexa Skill Entwickler (2017+) Alexa Champion (2018+)
  • 4. 4 / 79 PHP Frameworks wie Sand am Meer
  • 5. 5 / 79 Frage 1: Welche PHP Frameworks setzt ihr aktuell in euren Projekten ein?
  • 6. 6 / 79 Frage 2: Welche Erwartung habt ihr an diesen Vortrag?
  • 7. 7 / 79 And the And the winner is… winner is…
  • 9. 9 / 79 Probleme bei Framework Vergleichen »Optimierte« Performance Vergleiche Veraltet Äpfel mit Birnen vergleichen Abhaken einer Feature Matrix Nicht objektiv
  • 10. 10 / 79 Optimaler Framework Vergleich »Fairer« Performance Vergleich Aktuell Äpfel mit Äpfeln vergleichen Umfassend Objektiv
  • 11. 11 / 79 Disclaimer Ich mag keine ORM, Template Engines und Annotationen. Aber ich versuche, mich zusammen zu reißen. ;-)
  • 13. 13 / 79 1 Website, 3 Frameworks
  • 14. 14 / 79 Laminas Mezzio 3 https://laminas.katzenwelt.rocks/ Umgesetzt vom Senior Entwickler Mezzio Skeleton Application per Composer installiert
  • 15. 15 / 79 Symfony 6 https://symfony.katzenwelt.rocks/ Umgesetzt vom Junior Entwickler Projekt mit Symfony CLI angelegt
  • 16. 16 / 79 Laravel 9 https://laravel.katzenwelt.rocks/ Umgesetzt vom Junior Entwickler Installiert über Composer mit Skeleton
  • 17. 17 / 79 Gemeinsamkeiten Frontend mit Bootstrap 4.5 Datenbank mit MySQL 8 PHP 8.1 Selber Cloud Server
  • 18. 18 / 79 Unterschiede Doctrine ORM Twig Templates Eigener Model Layer PHP Templates Eloquent ORM Blade Templates
  • 19. 19 / 79 Bewertungskategorien Popularität Performance & Gedöns Benutzerfreundlichkeit ChatGPT Code
  • 21. 21 / 79 Traue keiner Statistik, die du nicht selber gefälscht hast!
  • 22. 22 / 79 Welches Framework ist weltweit am beliebtesten?
  • 25. 25 / 79 Welches Framework ist in Deutschland am beliebtesten?
  • 26. 26 / 79 Nur in DE
  • 27. 27 / 79 Nur in DE (ohne Laravel & Symfony)
  • 28. 28 / 79 Popularität Weltweit: 1. Laravel 2. Laminas 3. Symfony Deutschland: 1. Laravel 2. Symfony 3. Laminas / Cakephp
  • 29. 29 / 79 Aufpassen Die Messung der Popularität anhand eines Parameters muss nicht die Realität widerspiegeln!
  • 32. 32 / 79 Pasquale Was sagt der Junior Entwickler? Bietet mir am wenigsten Unterstützung. Dokumentation wirkt etwas unübersichtlich. Skeleton Application ist nicht sehr intuitiv. Keine PhpStorm Extension für PHP Templates.
  • 33. 33 / 79 Was sagt der Senior Entwickler? Ralf Sehr flexibel bei Routing, DI, Templates und Datenbank Dokumentation hat sich etwas gebessert. Middleware Ansatz zukunftsfähiger als MVC Ansatz. Framework enthält weniger Magie als Laminas MVC. Hohe Lernkurve. Alles muss man selber machen.
  • 34. 34 / 79 Routing FastRoute LaminasRouter DI Pimple LaminasServiceManager Symfony DI Container PHP DI Templating Plates LaminasView Twig Datenbank Doctrine LaminasDb Individueller Model Layer Eloquent Flexibilität
  • 35. 35 / 79 Entities Hydratoren Input Filter Formulare »Alles muss man selber machen« Repositories Storages Nur rudimentäre Code Generierung
  • 36. 36 / 79 Pasquale Was sagt der Junior Entwickler? Laravel macht es deutlich besser als Laminas Mezzio. Die Dokumentation ist wesentlich besser. Laracasts! (tw. €) Projekt wirkt strukturierter, hat aber einige Dateien mit unklarem Nutzen. Blade kommt Templating mit PHP sehr nahe. Es gibt eine PhpStorm Extension!
  • 37. 37 / 79 Was sagt der Senior Entwickler? Ralf Neue Projekte lassen sich sehr schnell aufsetzen. Projektstruktur für mich nicht komplett nachvollziehbar. Artisan ist ein sehr mächtiges Tool, das kaum Wünsche offen lässt! Laravel ohne Blade und Eloquent ist möglich, aber wohl sinnlos. Sehr Einsteiger freundlich.
  • 38. 38 / 79 Pasquale Was sagt der Junior Entwickler? Symfony ist für mich der klare Sieger. Dokumentation sehr gut geschrieben. Symfonycasts! (tw. €) Projekt gut strukturiert und bietet notwendige Beispiel-Dateien. Twig ist sehr leicht zu erlernen und erweiterbar. PhpStorm Extension! Sehr überzeugend ist die Symfony CLI sowie die Symfony Console im Projekt.
  • 39. 39 / 79 Was sagt der Senior Entwickler? Ralf Sehr gute Unterstützung für die Entwickler Community! Symfony CLI und Symfony Console sind sehr mächtige Tools! Symfony ohne Twig und Doctrine ist möglich, aber wohl sinnlos. Für PHP Einsteiger und Profis. Neue Projekte lassen sich sehr schnell aufsetzen.
  • 40. 40 / 79 Benutzer- freundlichkeit 1. Symfony 2. Laravel 3. Laminas
  • 41. 41 / 79 Aufpassen Das war nur die Meinung von zwei einzelnen Entwicklern. Es gibt bestimmt viele andere Sichtweisen.
  • 43. 43 / 79 object(FactEntityFactEntity) private ?int 'id' => int 1 private ?string 'status' => string 'approved' private ?string 'title' => string 'Seit wann gibt es Katzen und ...' private ?string 'text' => string 'Die kuschelige Hauskatze hat ...' Entitäten in Laminas Mezzio handgeklöppelt von Ralf
  • 44. 44 / 79 object(AppEntityFacts) private ?int 'id' => int 1 private ?string 'status' => string 'approved' private ?string 'title' => string 'Seit wann gibt es Katzen und ...' private ?string 'text' => string 'Die kuschelige Hauskatze hat ...' Entitäten in Symfony mit Doctrine
  • 45. 45 / 79 object(AppModelsFact) protected 'connection' => string 'mysql' (length=5) protected 'table' => string 'facts' (length=5) protected 'primaryKey' => string 'id' (length=2) protected 'keyType' => string 'int' (length=3) public 'incrementing' => boolean true protected 'attributes' => array (size=4) 'id' => int 1 'status' => string 'approved' 'title' => string 'Seit wann gibt es Katzen und ...' 'text' => string 'Die kuschelige Hauskatze hat ...' [...] Active Record Models in Laravel mit Eloquent (30 Eigenschaften, davon 5 public! WTF!)
  • 46. 46 / 79 <?php use FactEntityFactEntity; /** @var FactEntity $fact */ $fact = $this->fact; $this->headTitle('Katzen Fakt ' . $fact->getId()); ?> <div class="jumbotron"> <h1>Fakt <?= $fact->getId() ?></h1> <h2><?= $fact->getTitle() ?></h2> <p> <?= $fact->getText() ?> </p> </div> <a href="<?= $this->url('fact-list') ?>" class="btn btn-primary">Zurück</a> PHP Templates mit Laminas Mezzio
  • 47. 47 / 79 {% extends 'base.html.twig' %} {% block title %} Katzen Fakt {{ fact.id }} - {{ parent() }} {% endblock %} {% block body %} <div class="jumbotron"> <h1>Fakt {{ fact.id }}</h1> <h2>{{ fact.title }}</h2> <p> {{ fact.text }} </p> </div> <a href="{{ path('app_katzen-fakten')}}" class="btn btn-primary">Zurück</a> {% endblock %} Twig Templates mit Symfony
  • 48. 48 / 79 @extends('default') @section('title','Katzen Fakt '.$fact->id.' -') @section('content') <div class="jumbotron"> <h1>Fakt {{ $fact->id }}</h1> <h2>{{ $fact->title }}</h2> <p> {{ $fact->text }} </p> </div> <a href="{{ url('katzen-fakten') }}" class="btn btn-primary">Zurück</a> @endsection Blade Templates mit Laravel
  • 49. 49 / 79 public function handle(ServerRequestInterface $request): ResponseInterface { $id = (int)$request->getAttribute('id'); $data = [ 'fact' => $this->factRepository->getFactById($id), ]; return new HtmlResponse( $this->template->render('fact::fact-show', $data) ); } Handler mit Laminas Mezzio
  • 50. 50 / 79 #[Route('/katzen-fakt/{id}', name: 'app_katzen-fakt', methods: ['GET'])] public function renderFact(ManagerRegistry $doctrine, string $id = null) { $catFact = $doctrine→getRepository(Facts::class)→find($id); return $this->render('fact/singlefact.html.twig', [ 'fact' => $catFact ]); } Controller Action mit Symfony
  • 51. 51 / 79 public function renderFact(int $id) { $fact = Fact::query()->find($id); return view('fact.singlefact', ['fact' => $fact]); } Controller Action mit Laravel
  • 52. 52 / 79 Code 1. Symfony 1. Laminas 2. Laravel
  • 53. 53 / 79 Aufpassen Wir haben nur 3 Bausteine verglichen. Eine Anwendung besteht aber aus viel mehr Bausteinen!
  • 54. 54 / 79 Performance und Gedöns
  • 55. 55 / 79 Traue keinem Benchmark, den du nicht selber gefälscht hast!
  • 56. 56 / 79 Simple Methodik define('SYMFONY_START', microtime(true)); […] echo '<em>Run time: ' . round((microtime(true) - SYMFONY_START)*1000, 2) . '</em>';
  • 57. 57 / 79 Benchmark I Aufruf 1 Aufruf 2 Aufruf 3 Aufruf 4 Aufruf 5 Aufruf 6 Aufruf 7 Aufruf 8 Aufruf 9 Aufruf 10 0,00 50,00 100,00 150,00 200,00 250,00 300,00 Laminas Mezzio Symfony Laravel
  • 58. 58 / 79 Benchmark II Aufruf 1 Aufruf 2 Aufruf 3 Aufruf 4 Aufruf 5 Aufruf 6 Aufruf 7 Aufruf 8 Aufruf 9 Aufruf 10 0,00 2,00 4,00 6,00 8,00 10,00 12,00 14,00 16,00 18,00 20,00 Laminas Mezzio Symfony Laravel
  • 60. 60 / 79 Zahlen Gedöns Größe Application 409 KB 358 KB 252 KB Größe Vendor 26 MB 35 MB 17 MB Composer Pakete 60 69 40
  • 61. 61 / 79 Performance 1. Laminas Mezzio 2. Laravel 3. Symfony
  • 62. 62 / 79 Aufpassen Der Vergleich war aus mindestens 2 Gründen nicht ganz fair! Welche?
  • 64. 64 / 79 Briefing Du bist Berater für PHP Frameworks. Du kennst nur die PHP Frameworks Symfony, Laravel und Laminas. Ich werde dir nun einige Fragen stellen, die du jeweils in maximal 60 Wörtern oder 400 Zeichen beantworten musst.
  • 65. 65 / 79 Frage 1 Welches Framework würdest du für eine kleine und einfache Kampagnen Website verwenden, die maximal 3 Monate online sein wird?
  • 66. 66 / 79 Frage 1 Welches Framework würdest du für eine kleine und einfache Kampagnen Website verwenden, die maximal 3 Monate online sein wird? Ich würde Laravel empfehlen. Es ist benutzerfreundlich, hat eine kurze Lernkurve und bietet gute Unterstützung für schnelle Entwicklung und Bereitstellung. Die breite Palette von Hilfsbibliotheken und -tools macht es ideal für kleine Projekte mit kurzer Lebensdauer.
  • 67. 67 / 79 Frage 2 Welches Framework würdest du für eine komplexere Anwendung empfehlen mit großem Funktionsumfang, die voraussichtlich 2 bis 3 Jahre online sein wird?
  • 68. 68 / 79 Frage 2 Welches Framework würdest du für eine komplexere Anwendung empfehlen mit großem Funktionsumfang, die voraussichtlich 2 bis 3 Jahre online sein wird? Für eine komplexere Anwendung mit einem großen Funktionsumfang würde ich Symfony empfehlen. Es ist robust, skalierbar und verfügt über eine Vielzahl von Bundles, die die Erweiterung der Funktionalität erleichtern. Darüber hinaus hat es eine starke Community und einen langfristigen Support.
  • 69. 69 / 79 Frage 3 Welches Framework würdest du für eine Enterprise Anwendung empfehlen mit hoch komplexen Funktionsumfang, das über eine Lebensdauer von mindestens 10 Jahren ausgerichtet ist?
  • 70. 70 / 79 Frage 3 Welches Framework würdest du für eine Enterprise Anwendung empfehlen mit hoch komplexen Funktionsumfang, das über eine Lebensdauer von mindestens 10 Jahren ausgerichtet ist? Für eine langlebige, hochkomplexe Enterprise-Anwendung würde ich das Laminas Framework empfehlen. Es ist das Nachfolgeprojekt von Zend Framework, das für seine Stabilität und Skalierbarkeit bekannt ist. Laminas ist modular aufgebaut, was eine hohe Anpassbarkeit ermöglicht. Zudem hat es umfangreiche Enterprise-Features und guten langfristigen Support.
  • 71. 71 / 79 ChatGPT 1. Laravel 1. Symfony 1. Laminas
  • 72. 72 / 79 Aufpassen Antworten von KIs wie ChatGPT sind immer mit Vorsicht zu genießen!
  • 73. 73 / 79 And the winner is...
  • 75. 75 / 79 Kein klarer Sieger
  • 76. 76 / 79 Empfehlung Für Einsteiger bis Fortgeschrittene Für kleinere bis mittlere Anwendungen
  • 77. 77 / 79 Empfehlung Für Einsteiger bis Profis Für kleine bis komplexe Anwendungen
  • 78. 78 / 79 Empfehlung Für Fortgeschrittene bis Profis Für mittlere bis sehr komplexe Anwendungen