Perl Compatible Regular Expressions (PCRE) are a type of regular expression syntax and engine that follows the powerful and flexible style of the Perl programming language. They offer advanced features that go beyond the basic regular expressions found in many older systems.
Perl was one of the first languages to introduce highly expressive regular expressions. The PCRE library was created to bring those capabilities to other programming languages and tools, including:
Python (similar via the re
module)
JavaScript (with slight differences)
pcregrep
(a grep version supporting PCRE)
Editors like VS Code, Sublime Text, etc.
✅ Lookahead & Lookbehind:
(?=...)
– positive lookahead
(?!...)
– negative lookahead
(?<=...)
– positive lookbehind
(?<!...)
– negative lookbehind
✅ Non-greedy quantifiers:
*?
, +?
, ??
, {m,n}?
✅ Named capturing groups:
(?P<name>...)
or (?<name>...)
✅ Unicode support:
\p{L}
matches any kind of letter in any language
✅ Assertions and anchors:
\b
, \B
, \A
, \Z
, \z
✅ Inline modifiers:
(?i)
for case-insensitive
(?m)
for multiline matching, etc.
(?<=\buser\s)\w+
This expression matches any word that follows "user " using a lookbehind assertion.
PCRE are like the "advanced edition" of regular expressions — highly powerful, widely used, and very flexible. If you're working in an environment that supports PCRE, you can take advantage of rich pattern matching features inspired by Perl.
Memcached is a distributed in-memory caching system commonly used to speed up web applications. It temporarily stores frequently requested data in RAM to avoid expensive database queries or API calls.
Key-Value Store: Data is stored as key-value pairs.
In-Memory: Runs entirely in RAM, making it extremely fast.
Distributed: Supports multiple servers (clusters) to distribute load.
Simple API: Provides basic operations like set
, get
, and delete
.
Eviction Policy: Uses LRU (Least Recently Used) to remove old data when memory is full.
Caching Database Queries: Reduces load on databases like MySQL or PostgreSQL.
Session Management: Stores user sessions in scalable web applications.
Temporary Data Storage: Useful for API rate limiting or short-lived data caching.
Memcached: Faster for simple key-value caching, scales well horizontally.
Redis: Offers more features like persistence, lists, hashes, sets, and pub/sub messaging.
sudo apt update && sudo apt install memcached
sudo systemctl start memcached
It can be used with PHP or Python via appropriate libraries.
The Whoops PHP library is a powerful and user-friendly error handling tool for PHP applications. It provides clear and well-structured error pages, making it easier to debug and fix issues.
✅ Beautiful, interactive error pages
✅ Detailed stack traces with code previews
✅ Easy integration into existing PHP projects
✅ Support for various frameworks (Laravel, Symfony, Slim, etc.)
✅ Customizable with custom handlers and loggers
You can install Whoops using Composer:
composer require filp/whoops
Here's a simple example of how to enable Whoops in your PHP project:
require 'vendor/autoload.php';
use Whoops\Run;
use Whoops\Handler\PrettyPageHandler;
$whoops = new Run();
$whoops->pushHandler(new PrettyPageHandler());
$whoops->register();
// Trigger an error (e.g., calling an undefined variable)
echo $undefinedVariable;
If an error occurs, Whoops will display a clear and visually appealing debug page.
You can extend Whoops by adding custom error handling, for example:
use Whoops\Handler\CallbackHandler;
$whoops->pushHandler(new CallbackHandler(function ($exception, $inspector, $run) {
error_log($exception->getMessage());
}));
This version logs errors to a file instead of displaying them.
Whoops is mainly used in development environments to quickly detect and fix errors. However, in production environments, it should be disabled or replaced with a custom error page.
Twig is a powerful and flexible templating engine for PHP, commonly used in Symfony but also in other PHP projects. It helps separate logic from presentation and offers many useful features for frontend development.
{{ }}
)Twig uses double curly braces to output variables:
<p>Hello, {{ name }}!</p>
→ If name = "Max"
, the output will be:
"Hello, Max!"
{% %}
)Twig supports if-else statements, loops, and other control structures.
{% if user.isAdmin %}
<p>Welcome, Admin!</p>
{% else %}
<p>Welcome, User!</p>
{% endif %}
Loops (for
)
<ul>
{% for user in users %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
Twig supports "Base Layouts", similar to Laravel's Blade.
base.html.twig
)<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Page{% endblock %}</title>
</head>
<body>
<header>{% block header %}Default Header{% endblock %}</header>
<main>{% block content %}{% endblock %}</main>
</body>
</html>
Child Template (page.html.twig
)
{% extends 'base.html.twig' %}
{% block title %}Homepage{% endblock %}
{% block content %}
<p>Welcome to my website!</p>
{% endblock %}
→ The blocks override the default content from the base template.
You can include reusable components like a navbar or footer:
{% include 'partials/navbar.html.twig' %}
Twig provides many filters to format content:
Filter | Beispiel | Ausgabe |
---|---|---|
upper |
`{{ "text" | upper }}` |
lower |
`{{ "TEXT" | lower }}` |
length |
`{{ "Hallo" | length }}` |
date |
`{{ "now" | date("d.m.Y") }}` |
Twig automatically escapes HTML to prevent XSS attacks:
{{ "<script>alert('XSS');</script>" }}
→ Outputs: <script>alert('XSS');</script>
To output raw HTML, use |raw
:
{{ "<strong>Bold</strong>"|raw }}
Model-View-Controller (MVC) is a software architecture pattern that divides an application into three main components:
✔ Better maintainability through a clear separation of concerns.
✔ Reusability of components.
✔ Easy testability since logic is separated from the interface.
✔ Flexibility, as different views can be used for the same model.
MVC is widely used in web and desktop applications, including:
Kirby CMS is a flexible, file-based Content Management System (CMS) designed for developers and designers who value maximum control over their projects. Created by Bastian Allgeier, it is known for its minimalist approach and high adaptability. Here are the key features of Kirby CMS:
Kirby stores content in simple text files (usually Markdown or YAML) instead of relying on a database like MySQL. This makes it ideal for small to medium-sized projects where setting up and maintaining a database is unnecessary.
Kirby doesn’t come with pre-built themes, giving developers complete freedom to create templates and layouts from scratch. It’s PHP-based, allowing you to design dynamic websites tailored to your needs.
The Panel is an intuitive interface for editors to manage content. It provides a clear structure and can be customized to meet the specific requirements of each project, ensuring a user-friendly experience.
Kirby is particularly appealing to web developers because it:
Kirby isn’t free. While you can test it without cost, a license is required for live, production use. This ensures high-quality, ad-free development, making it a popular choice for professional projects.
Kirby is suitable for:
Kirby CMS is perfect for projects that demand maximum flexibility and control. It combines straightforward content management with powerful developer tools, making it a favorite among designers and developers who want to build bespoke websites from scratch.
The LAMP stack is a collection of open-source software used together to develop dynamic websites and web applications. The acronym LAMP stands for the following components:
L – Linux
A – Apache
The LAMP stack is often compared to modern alternatives like the MEAN stack (MongoDB, Express.js, Angular, Node.js), but it remains popular due to its simplicity and reliability, especially for traditional web development projects.
The LEMP stack is a collection of software commonly used together to host dynamic websites and web applications. The acronym "LEMP" represents the individual components of the stack:
Linux: The operating system that serves as the foundation for the stack. It supports the other software components.
Nginx (pronounced "Engine-X"): A high-performance, resource-efficient web server. Nginx is often preferred because it scales better for handling simultaneous connections compared to Apache.
MySQL (or MariaDB): The relational database used to store data. MySQL is commonly paired with PHP to generate dynamic content. Modern setups often use MariaDB, a fork of MySQL.
PHP, Python, or Perl: The scripting language used for server-side programming. PHP is particularly popular in web development for rendering database-driven dynamic content on web pages.
The LEMP stack is a modern alternative to the better-known LAMP stack, which uses Apache as the web server.
SonarQube is an open-source tool for continuous code analysis and quality assurance. It helps developers and teams evaluate code quality, identify vulnerabilities, and promote best practices in software development.
Code Quality Assessment:
Detecting Security Vulnerabilities:
Technical Debt Evaluation:
Multi-Language Support:
Reports and Dashboards:
SonarQube is available in a free Community Edition and commercial editions with advanced features (e.g., for larger teams or specialized security analysis).
PSR-12 is a coding style guideline defined by the PHP-FIG (PHP Framework Interoperability Group). It builds on PSR-1 (Basic Coding Standard) and PSR-2 (Coding Style Guide), extending them to include modern practices and requirements.
PSR-12 aims to establish a consistent and readable code style for PHP projects, facilitating collaboration between developers and maintaining a uniform codebase.
namespace
declaration.use
statements should follow the namespace
declaration.namespace App\Controller;
use App\Service\MyService;
use Psr\Log\LoggerInterface;
{
for a class or method must be placed on the next line.public
, protected
, private
) is mandatory for all methods and properties.class MyClass
{
private string $property;
public function myMethod(): void
{
// code
}
}
public function myFunction(
int $param1,
string $param2
): string {
return 'example';
}
{
must be on the same line as the control structure.if ($condition) {
// code
} elseif ($otherCondition) {
// code
} else {
// code
}
[]
) for arrays.$array = [
'first' => 'value1',
'second' => 'value2',
];
?
.public function getValue(?int $id): ?string
{
return $id !== null ? (string) $id : null;
}
<?php
tag and must not include a closing ?>
tag.PSR-12 extends PSR-2 by:
PSR-12 is the standard for modern and consistent PHP code. It improves code quality and simplifies collaboration, especially in team environments. Tools like PHP_CodeSniffer
or PHP-CS-Fixer
can help ensure adherence to PSR-12 effortlessly.