Wie jedes Jahr im Februar, werden die neuen Angebote vom Stadtjugendausschuss zum Kauf angeboten. Ein bisschen anders als jedes Jahr war, dass nur der Top-Seller (Karlopolis) buchbar war, die anderen neuen Freizeiten werden eine Woche später erst angeboten.
Letztes Jahr haben ca. 5.000 Besucher quasi zeitgleich (die Angebote wurden um 18h freigeschaltet) versucht sich die Wunsch-Freizeiten zu reservieren – was die Server eine Zeit lang überforderte. Nach einer dreiviertel Stunde und geboosteter Performance konnten alle Bestellungen abgearbeitet werden.
Aus den Fehlern wurde aber gelernt. So wurden dieses Jahr folgende Maßnahmen umgesetzt:
Produktseiten cachbar gemacht; die Information ob noch freie Plätz vorhanden oder nicht, wird per Ajax asynchron nachgeladen
Warteschleife in den Bestellprozess eingebaut: eingehende Bestellungen werden nicht sofort von WooCommerce versucht abgearbeitet zu werden, sie werden nach dem Klick auf „Jetzt bestellen“ in eine Warteschleife geführt und in „30er Pakete“ zum Abarbeiten geschickt. Erst dann werden die Bestellungen in Reservierungen umgewandelt und die Kunden erhalten eine Bestätigungsmail. Diese Funktion ermöglicht die Last deutlich zu drosseln, wenn um Punkt 18h knapp 2.000 Personen gleichzeitig versuchen die Karlopolis-Freizeiten zu buchen.
Natürlich wurden für den Verkaufstag auch die Performance der Systeme hochgefahren, etwa um das Zehnfache im Vergleich zu einem normalen Geschäftstag.
Das Ferienportal ferien-karslruhe.de bietet hauptsächlich Freizeiten in und um Karlsruhe sowie Sprach-, Spaß- und Entdeckungsreisen ins europäische Ausland. Das Angebot richtet sich an Kinder im Alter von 6 bis 16 Jahren und hat einen großen Fokus auf Inklusion - die Teamer sind geschulte Betreuer, die entsprechend individuell auf Bedürfnisse der Kinder eingehen können. Außerdem können Familien mit geringem Einkommen mit der Unterstützung durch verschiedene Förderprogramme rechnen, sodass die Kinder nicht auf wohltuenden Urlaub verzichten müssen.
Vom einfachen Reservierungssystem zum vollwertigen Buchungssystem
Schnell wurde erkannt, dass WooCommerce den benötigten Workflow nicht abbilden kann: denn anders als bei handfesten Produkten, die im Internet verkauft werden, und bei denen jede Bestellung sofort bezahlt wird und die verfügbare Menge im Lager heruntergezählt wird, werden bei ferien-karlsruhe.de Reservierungen kostenlos entgegengenommen und in einem zweiten Schritt eine Anzahlung zur verbindlichen Bestätigung der Reservierung gefordert. Erst kurz vor Antritt der Reise wird der Restbetrag beglichen und eine Teilnehmerkarte gedruckt.
Features, Features, Features
Eine Menge Features wurde speziell für das Ferienportal entwickelt. Hier solche aus der Kundensicht:
Warenkorb Zeitlimitierung: damit Überbuchungen vermieden werden, wird die Verfügbarkeit eines Angebots beim Klick in den Warenkorb heruntergezählt. Jedoch muss der Warenkorb innerhalb einer bestimmten Zeit eingelöst werden, sonst wird das Angebot zurückgesetzt.
Warteliste: wenn ein Angebot ausgebucht ist, kann ein Interessent sein Kind in die Warteliste eintragen. So kann das Kind eventuell dennoch teilnehmen, wenn eine andere Reservierung storniert wird.
Erweiterte Angaben im Checkout: anders als in den meisten Onlineshops gibt es einen Besteller und das Kind, für das das Angebot reserviert wird. Es können mehrere Angebote und mehrere Kinder in beliebiger Kombination reserviert werden. Zu jedem Kind werden Informationen wie Name, Geburtsdatum und etwaige Besonderheiten (z. B. ADS/ADHS, Behinderung, ...) angegeben.
Die Startseite des Ferienportals bietet ein Filter um schnell die wichtigen Parameter zu setzen und die Anzeige der Angebote einzugrenzen. Die Auswahlmöglichkeiten werden automatisch aus den Angeboten übernommen, sodass keine "Leichen" entstehen.
Mit einem Klick auf "In den Warenkorb" startet ein Zähler rückwärts. Bei 0 wird der Warenkorbinhalt gelöscht. Die Zeit kann im WordPress Backend festgelegt werden.
Im Bestellprozess (Kasse) muss zu jedem bestellten Angebot ein Kind zugeordnet werden. Die detaillierten Informationen sind notwendig um die Kinder richtig einzuteilen (beispielsweise wird bei Ferien mit Koffern, ein Mädchen in ein Mädchenzimmer platziert). Auch sind Angaben zu Behinderung wichtig um zu wissen ob die Teamer über entsprechende Qualifikationen verfügen.
Aus der Betreibersicht:
Angebotsstatus: ein neu erstelltes Angebot durchläuft verschiedene Stati: Entwurf, Freigegeben, Buchbar, Ausgebucht, Abgeschlossen um die wichtigsten zu nennen.
Kunden- und Reservierungsstatus: Besteller werden zu Bezugspersonen (es müssen nicht immer die Eltern sein), Kinder werden zu Teilnehmer, und Reservierungen zu Buchungen.
Zuschüsse: es lassen sich verschiedene Zuschüsse zu Angeboten eintragen.
Druckfunktion für Teilnehmerkarten: ist die Reise bezahlt, kann zu gegebenen Zeitpunkt die Teilnehmerkarte gedruckt werden. Hierzu wird der Druckauftrag mit dem netzinternen IIS Server übermittelt an dem die Drucker angebunden sind. Die Software (.NET) wurde hierfür von SaaS Web programmiert.
Kundenkommunikation: anders als im Standard, können die Mailtemplates bei jedem manuellen Aufruf angepasst werden. Auch beinhalten sie individuell erstellte PDF-Anhänge. Die gesamte Kundenkommunikation wird darüber hinaus archiviert.
Buchungsexport für Buchhaltungssoftware: der STJA arbeitet mit einer kommerziellen Buchhaltungssoftware zu der alle Geld Ein- und Ausgänge übermittelt werden müssen.
Kassen: in der Geschäftsstelle befinden sich Geldkassen, deren Inhalt buchhalterisch festgehalten werden muss.
Hier werden die bestehende Angebote gelistet und die wichtigsten Daten angezeigt. Außerdem können über die Buttons die Angebote bearbeitet werden (links), die damit verbundenen Teilnehmer, Reservierungen und Wartelisten (mitte) oder weitere Funktionen wie das Angebot kopieren oder den Verkauf abschließen (rechts).
Über den Pfeil links lassen sich mehr Details zu einem Angebot anzeigen. Sollte die gesuchte Information nicht angezeigt werden, muss in den Bearbeitungsmodus gewechselt werden. Dort können alle Parameter des Angebots eingesehen (und geändert) werden.
Ein Angebot unterteilt sich in 6 Bereiche: die zwei ersten behandeln die Angaben zu Name, Ort, Typ und Beschreibung der Freizeit. Über den Reiter "Termine" wird der Zeitraum der Freizeit eingerichtet aber auch von wann bis wann das Angebot überhaupt buchbar ist. "Preise" bestimmt einerseits den Verkaufspreis, der auf der Website angezeigt wird. Darüber hinaus werden mögliche Aufschläge oder Zuschüsse eingerichtet. Über "Teilnehmer" wird die sowohl die minimale als auch die maximale Anzahl Teilnehmer bestimmt. Außerdem können Plätze in Gruppen eingeteilt werden, z. B. Jungs und Mädchen Unterkünfte.
WordPress und WooCommerce kompatibel
Besonders wichtig war bei der Entwicklung (immerhin ca. 400 Stunden Arbeit), dass das Ergebnis die Update-Fähigkeit von WordPress nicht beeinträchigt, was auch gelungen ist. Die im neuen Modul erstellten Angebote generieren (und überschreibt bereits existierende) WooCommerce Produkte, die auch über das entsprechende Menü gelistet und durchforstet werden können.
WordPress Core Updates verlaufen in aller Regel ohne Probleme. Bei Plugin- oder Theme-Updates sieht die Sache schon ganz anders aus. Die Ursachen können sehr unterschiedlich sein: Bugs in dem Plugin selbst, Kompatibilität zu anderen Plugins... Die möglichen Auswirkungen der Fehler sind auch höchst unterschiedlich, in manchen Fällen ist es die komplette Homepage, die nicht mehr angezeigt wird oder PHP-Fehlermeldungen, die mitten auf der Seite zu sehen sind. Oftmals sind es eher kleine Veränderungen, dennoch unerwünschte.
Screenshots nach einem Update vergleichen
Mit dem Vergleich "davor und danach" von automatischen Bildschirmfotos der Website, können auch kleine Fehler entdeckt werden. Das System sucht nämlich automatisiert nach Veränderungen und gibt die Anzahl gefundener Unterschiede (in %) an.
So lassen sich Fehler auch viel später erkennen (Steve behält die Historie der Updates und die entsprechenden Screenshots) und ermöglicht, wenn notwendig, das Einspielen des richtigen Backups - standardmäßig wird bei jedem Update-Vorgang, das kann ein einzelnes oder mehrere Updates direkt hintereinanderer, ein Backup erstellt.
Die Zukunft: Auto Backup Restore, Auto Plugin Tagging uvm
Als nächstes ist geplant, die SLA-Funktionalität für unsere WordPress-Kunden auszubauen:
Kunden können nach Updates eine Mail mit einem Link zu dem Screenshot-Vergleich erhalten, um selbst zu prüfen, dass alles in Ordnung ist
Kunden können angeben, dass die Prüfung in Ordnung war, oder Fehler beinhaltet; daraufhin werden Meldungen an Steve übergeben, um die Updates ggf. rückgängig zu machen und ggf. die Plugins (in der vorhandenen Version) als "broken" zu taggen.
Wenn das automatisierte Staging integriert sein wird, kann dieser Prozess auch darauf abgebildet werden: erst nach Freigabe vom Kunden wird das Update auf die Live-Instanz durchgeführt
Nach mehreren Monaten Entwicklungszeit ist Steve nun in Produktion gegangen. Steve steht für Perfektion: eine Hommage an Steve Jobs und ein Lob an den Core-Entwickler und SaaS Web Geschäftsführer Daniel Jagszent. Steve steht aber auch für Gleichberechtigung zwischen Frau und Mann: nachdem „intelligente Bots“ nach Frauen benannt wurden (Siri, Alexa, Cortana), haben wir uns entschieden unser Tool nach einem Mann zu benennen!
Mit Steve ersetzen wir InfiniteWP
InfiniteWP (IWP) ist eine populäre PHP/MySQL Webanwendung um (zahlreiche) WordPress Websites zu verwalten – in der Basisversion kostenfrei, jedoch kann man für einen professionellen Einsatz nicht auf die kostenpflichtigen Add-Ons verzichten. IWP bietet durch seine Erweiterungen zahlreiche Funktionen, es kommen immer wieder neue dazu.
Trotz der umfangreichen Funktionalität waren wir mit der Anwendung nie ganz zufrieden:
Zum Einen waren Features, die für die Verwaltung von Business Sites wichtig sind (z. B. SLA für Update-Management oder Auto-Backups bei Updates) nicht verfügbar,
zum Anderen waren wir auch mit der Qualität der Software nicht zufrieden (viele Bugs, nicht fertig gedachte Features).
Professionelles WordPress Management mit Steve
Mit der neuen (Ruby on Rails) Anwendung ist das Management der WordPress Sites auf unsere Bedürfnisse zugeschnitten. Ein Auszug der Features:
Auto Discover der WordPress-Instanzen auf den Servern
Automatische „SaaS Web“ MU-Plugin Installation für Kommunikation mit Steve
Automatische Backups bei Updates (ein/ausschaltbar)
Daily bzw. nightly Backups aller WordPress Instanzen; File-Backups sind inkrementell.
One Click Backup Restore
Individuelle SLA Integration: u. a. Updates für VIP Sites nur außerhalb Geschäftszeiten möglich – außer Sicherheitsupdates
Audit Funktion: Logging aller WordPress Aktionen
Unterstützung von WordPress Multisite
Ein Fokus auf die Usability
Steve ist nicht nur ein fleißiger Musterschüler. Steve ist auch eine ergonomische Software, um die tägliche Arbeit mit WordPress komfortabel und effizient zu verrichten.
Dazu gehört zum Beispiel:
Einfache Menüführung ohne komplizierte Verschachtelungen
Suchfeld für Websites mit Autocompletion
Actions-Quicklinks bei Website-Listeneintrag
Kommunikation zwischen Browser und Server mittels WebSocket für direkte Rückmeldung ohne Neuladen der Website
Ein Tool auch für die Zukunft
Schon in Planung, leider noch nicht verfügbar, ist das automatische Aufnehmen von ausgewählten Seiten (als Bild) vor und nach einem Update. So lassen sich manuell (ungewollte) Änderungen schneller erkennen und ggf. auch zeitlich einordnen, falls nicht sofort erkannt. Entsprechend kann das richtige Backup schneller wieder eingespielt werden.
Auch automatisches Staging steht an – aktuell ein manuelles Verfahren – und viele andere Features…
Dieses kurze Video-Tutorial zeigt wie man in wenigen Schritten, eine neue WordPress-Website installieren kann. Voraussetzung für die erfolgreiche Ausführung sind: ein SSH-Zugang, WP CLI und eine bereits eingerichtete Datenbank. Die Domain sollte auf dem Webserver auch bereits angelegt worden sein.
Endlich ist der französischsprachige Weinblog von François Potevin nach einigen Wochen harter Arbeit im neuen Look bzw. mit neuem „Unterbau“ live gegangen. Zu den Neuerungen zählen:
HTML5
Responsive Layout
Bildoptimierungen (Kompression)
Einheitliche Struktur der Artikel und Excerpts
Kontextuelle Angebote in der Sidebar (aktuell nur für Desktop- und Tablettansicht)
Nach langer Entwicklungs- und Finetuningszeit ist die neue Lindenbaum-Homepage heute live gegangen. Das Design stammt vom Hochquadrat-Mitglied Miss Koepke und die Entwicklung ist natürlich von uns. Nicht nur das Theme der WordPress Website war zu entwickeln, sondern auch intelligente Backend Einstellmöglichkeiten, damit das Lindenbaum-Team auch künftig selbständig Änderungen durchführen kann.
Kurz bevor die neuen Angebote in der Geschäftsstelle buchbar sein sollen, geht die Website mit einem überarbeiteten Design (Miss Koepke) und neuen Funktionen live. Neuerungen sind u. a. :
eine kompaktere Startseite mit einem neuen Logo
ein Suchfilter auf der Startseite
eine übersichtlichere Ansicht der Angebotseinzelseiten
die Möglichkeit mehrere Angebote gleichzeitig zu buchen und dabei verschiedenen Kindern direkt zuzuweisen
Das Webdesign wurde von Zarske Design erstellt und die Texte wurden von Words in Motion redigiert. SaaS Web hat aus den gelieferten Vorlagen ein individuelles WordPress Theme entwickelt (auf Basis des Starter Themes Bones).
SaaS Web hat für das TEDx Event die Teilnehmer-Registrierung in die bestehende WordPress Event-Seite integriert. Das Projekt bestand darin ein Anmeldeformular anzuzeigen und die Möglichkeit zu geben, Anfragen zu sortieren sowie ausgewählten Teilnehmern per Rückmeldung zur Zahlung aufzufordern. Zudem wurde ein ermäßigter Zugang für Studenten angeboten.
Es ist eigentlich noch nicht vorbei, heute ist Contributor Day. Dieser Tag wird den Personen gewidmet, die der (Weiter-)Entwicklung von WordPress beitragen – in allen möglichen Bereichen, es muss nicht unbedingt technischer Natur sein.
SaaS Web war nicht nur Sponsor des Events! Wir, Daniel Jagszent und Matthias Wulkow, waren auch vor Ort und haben an den zahlreichen Vorträgen teilgenommen. Am Sonntag wurde auch unter vielen anderen Geschenken ein WordPress Hosting L verschenkt.
Hier ein paar Eindrücke des Wordcamps:
David Jardin zum Thema CMS Garden
Silvan Hagen zum Thema UX Design Prozess zur Plugin Entwicklung
Elisabeth Hölzl zum Thema Barrierefreiheit bzw. Barrierefreundlichkeit
Jon Ziemlich zum Thema WordPress Security (und mit einem Live-Hack)
Dominik Schilling und Konstantin Obenland in der Fragen/Antworten Session
Basierend auf das Theme Zonya hat Navispace ein individuelles Design für die Stammel-Modehäuser aus der Münchner Umgebung, genauer in Buchloe, Mindelheim und Schwabmünchen. SaaS Web hat die gewünschten Anpassungen umgesetzt und dabei die Theme-eigenen Mittel genutzt. Das Hosting der Website übernimmt SaaS Web ebenfalls.
Wer schon mal mit WordPress gearbeitet hat, weiß, dass es durchaus passieren kann, dass hinzugefügte PlugIns eigene Styles mit sich bringen und daher ggf. angepasst werden müssen. Natürlich ist es keine besonders gut Idee, die Styles direkt in dem PlugIn zu ändern, denn beim nächsten Update, sind die Anpassungen weg. Auch lassen sich die Styles oft nicht mit der style.css aus dem Root-Verzeichnis überschreiben, da die PlugIn-Styles durchaus später geladen werden.
# Der Code hier sollte in die functions.php eingetragen werden
# Sollte das Theme ein Child-Theme sein, und es gibt noch keine functions.php in
# dem Child-Theme-Verzeichnis, dann genügt eine eigene functions.php in dem
# Child-Theme Verzeichnis mit den Angaben hier unten (die neuen Anweisungen
# und Funktionen ergänzen dann die functions.php des Parent-Themes)
#
# Hier wird verhindert, das "Problem_Stylesheet" zu laden
# 'plugin-style' ist der unique Identifier
function plugin_style_drop(){
wp_dequeue_style( 'plugin-style' );
}
# Hier wird ein extra Stylesheet eingebunden
# Beispielsweise um die Stylesheet Informationen eines Formular-PlugIns zu überschreiben
function style_extension_scripts() {
wp_enqueue_style( 'custom-plugin-style', get_template_directory_uri() . '/plugin-new-style.css' );
}
# Hier werden die Funktionen ausgeführt
# wp_print_scripts; diese Funktion stellt sicher, dass das zu
# dequeuende Style auch geladen wurde, um es sicher zu entfernen
# Die Prio wird als drittes Argument in add_action hinzugefügt,
# der Wert kann individuell angepasst werden
add_action( 'wp_print_scripts', 'plugin_style_drop', 100 );
add_action( 'wp_enqueue_scripts', 'style_extension_scripts', 101 );
Zu MBI-International: MB-International verfügt als Hersteller über ein weit reichendes Angebot an internationalen Markt- und Geodaten auf verschiedenen Gebietsebenen (Postalisch-, Administrativ-, Mikroebene). Hierzu zählen Soziodemographische Daten wie z.B. Bevölkerungszahlen, Anzahl Haushalte und die Alterstruktur sowie Kaufkraftdaten und die dazu passenden Gebietsgrenzen. Weltweite Straßendaten in unterschiedlichen Maßstäben und Qualitäten runden das Angebot ab.
Die populäre Platform as a Service Lösung von RedHat (ehemals Makara) ist nun offiziell aus dem Betastadium raus und wird neben dem kostenfreien gehosteten Package auch mit Premium Service kostenpflichtig angeboten.
Mit OpenShift lassen sich zahlreiche Plattformen einrichten wie z. B. für Java, Ruby, JavaScript (Node.js), PHP, Perl und Python. Über Cartridges lassen sich zudem auch eigene Anwendungen einbinden.
Git ist bereits ein hervorragendes Versionierungssystem mit dem gerade verteilte Teams sehr gut zusammen arbeiten können.
Man kann der Torte allerdings noch eine Kirsche verpassen in dem man Git Flow nachrüstet und somit eine wirklich professionelle Umgebung schafft. Mit Git Flow lassen sich verschiedene Branches automatisiert erstellen und mit vorgegeben Regeln wieder mergen.
So geht’s (wenn git bereits installiert ist):
– Git Flow installieren
– Git Bash öffnen und in das Repo wechseln
Git Flow für ein Repo aktivieren: git flow init
Von einem Branch zum anderen wechselt man einfach mit: git checkout [branch-name]
Hotfix-Branches werden automatisch mit den master- und staging/developer-Branches gemerged. Der Feature-Branch wird mit dem staging/developer-Branch gemerged. Um anschließend online zu gehen, muss der Umweg über den Release-Branch gemacht werden, der dann mit dem master-Branch gemerged wird.
Es kommt immer wieder vor, dass eine Website-Navigation, nicht nur den Seitennamen anzeigen soll, sondern auch Informationen, die dazu gehören, wie zum Beispiel die Description oder das Seiten-Bild, oder was auch immer… Um die Kontrolle darüber zu bekommen, braucht man die Walker_Nav_Menu Klasse.
Vorgehensweise
In der functions.php folgenden Code eingeben, es entspricht dem WP-eigenen Code. Dort werden anschließend die gewünschten Änderungen durchgeführt.
class Custom_Walker extends Walker_Nav_Menu{
function start_el(&$output, $item, $depth, $args){
// Since $output is called by reference we don’t need to return anything.
$output .= apply_filters(„walker_nav_menu_start_el“, $item_output, $item, $depth, $args);
}
}
Was wollen wir jetzt ändern? Zum Beispiel keine <ul><li>-Navigation sondern einfach <div> für die einzelnen Navigationselemente. Dazu das Artikelbild unterhalb, und die Description (aus dem Menue). Das sieht dann z. B. aus aus:
// Add these lines in order to fetch the additional information you wish to display
// We need the target page id in order to fetch the page image
$page = get_page_by_path(basename($item->url));
$page_id = $page->ID;
// We should check if there is an image set or not, but we are lazy for this example
$image_url = get_the_post_thumbnail( $page_id, ‚custom-image-preview‘ );
// Same thing for the description
$description = esc_attr( $item->description );
// Remove the li
// Instead of $item_output = $args->before . „<a $attributes>“ . $args->link_before . $title . „$lt;/a> “ . $args->link_after. $args->after;
$output .= „“;
// Change the output like you need it
$item_output = $args->before . „<div class=’container-main’><a $attributes>“ . $args->link_before . $title . „</a><div class=’page-image’>“ . $image_url . „</div><div class=’menu-page-description’>“ . $description . „</div></div> “ . $args->link_after. $args->after;
Damit es nun auch angezeigt wird, muss der Aufruf von wp_nav_menu modifiziert werden. Beispielsweise so:
GEOwidget ist eine Online Anwendung mit der sich beliebig viele Locations auf einer interaktiven Google Maps Karte platzieren lassen. So erstellen Nutzer in wenigen Klicks (ohne Programmierkenntnisse) mühelos Widgets für Homepages, beispielsweise um das Unternehmensnetzwerk darzustellen.
Nun ist GEOwidget unter der MIT Lizenz in das Google Code Repository gewandert. Jeder kann die Anwendung nun selbst betreiben und weiterentwickeln.
Schön, dass die Community reagiert hat und nach vorne schaut. Nun ist die Magento 1.7.0 Version zu GitHub als Mage+ gewandert, mit dem Ziel einfacher neue Entwickler zu finden, die sich an dem Projekt beteiligen. Das ausführliche Statement zu dem Fork und dem Wechsel von SVN zu GIT kann hier nachgelesen werden: https://github.com/mageplus/mageplus/blob/master/README.md.
Auf der Artikelseite (index) möchte man gegebenenfalls die Länge der Kurzfassung (excerpt) anpassen. Aber vielleicht möchte man zusätzlich auf einer anderen Seite eine Voransicht – beispielsweise die 3 aktuellsten Beiträge – mit einer kürzer gefassten Kurzfassung der Artikel.
Für den ersten Fall braucht es lediglich diesen Eintrag in der functions.php:
function custom_excerpt_length( $length ) {
// Standard ist 54
return 40;
}
add_filter( ‚excerpt_length‘, ‚custom_excerpt_length‘, 999 );
Problem: Damit sind alle Kurzfassungen 40 Wörter lang.
Um aber nun zu differenzieren, anhand der besuchten Seite beispielsweise kann man einfach die Seite innerhalb der Funktion abfragen.
function custom_excerpt_length( $length ) {
// Home ist index
if( is_home() ){
return 40;
}else{
return 10;
}
}
Neben vielen kleinen Fixes und Verbesserungen, wurden folgende wesentliche Funktionen hinzugefügt:
Traits: Methode zur Wiederverwendung von Code
Erläuterung: Traits ist ein Mechanismus zur Wiederverwendung von Code, der in Programmiersprachen mit einfacher Vererbung wie PHP verwendet wird. Ein Trait kann verwendet werden die Beschränkungen der einfachen Vererbung aufzuweichen indem er erlaubt, dass Mengen von Methoden frei in mehreren unabhängigen Klassen die in verschiedenen Klassenhierarchien stecken wiederzuverwenden. Die Semantik der Kombination von Traits und Klassen ist so definiert, dass die Komplexität reduziert wird und die üblichen Probleme vermeidet, die mit Mehrfachvererbung und Mixins in Verbindung gebracht werden.
Ein Trait hat Ähnlichkeit mit einer Klasse ist aber nur dafür vorgesehen Funktionalität in einer feingranularen und konsistenten Art und Weise zu bündeln. Es ist nicht möglich einen Trait aleinstehend zu instantiieren. Es handelt sich um einn Zusatz zur traditionellen Vererbung und erlaubt horizolntale Komposition von Verhaltensweisen, d.h. die Verwendung von Klassenmethoden ohne Vererbung vorauszusetzen.
Built-in webserver für CLI (Command Line Interpreter)
Code wurde von alten „deprecated“ Funktionen gesäubert
Darüber hinaus soll PHP 5.4 deutlich leistungsfähiger sein, vor allem dank der verbesserten Zend Engine.
Es wurde auch einige Funktionen entfernt, die sich ggf. beim Upgrade durch mangelnde Kompatibilität bemerkbar machen könnten.
Register globals, magic quotes und safe mode wurden entfernt
break/continue $var Syntax wurde abgeschafft
allow_call_time_pass_reference wurde aus der php.in entfernt