PHP: Hypertext Preprocessor
door Peter Martin /
db8.nl / petermartin.nl
slides: https://slides.db8.nl
---
Hello World!
----
index.html of index.php
```php
```
---
Wat is PHP
----
### Wat is PHP?
- **PHP (Hypertext Preprocessor)**: Opgericht in 1995 door Rasmus Lerdorf
- **Evolutie**: eenvoudige tool voor het tracken van bezoekers > volwaardige programmeertaal
- **Doel**: Dynamische webapplicaties door server-side scripting
> Van statische HTML naar interactieve en dynamische websites
----
### Voordelen van PHP
- **Simpel**: Makkelijk te leren en combinatie met HTML
- **Open-source**: Gratis en grote community
- **Breed gebruikt**: Populair in CMS-systemen zoals:
- WordPress
- Joomla
- Drupal
> PHP is de drijvende kracht achter veel van het web! (80%)
----
### PHP gebruik?
- **Dynamische websites**: Interactieve inhoud
- **API's**: Server-side logica
- **Server-side scripting**: Beheer van back-end logica en databases
> PHP maakt webapplicaties krachtig en flexibel!
----
### PHP Variabele Types 1/2
- **String**: Opslaan van tekst
`$name = "John Doe";`
- **Integer**: Hele getallen
`$age = 25;`
- **Float**: Getallen met decimalen
`$price = 19.99;`
- **Boolean**: Waar (true) of onwaar (false)
`$is_valid = true;`
- **NULL**: Geen waarde
`$value = NULL;`
----
### PHP Variabele Types 1/2
- **Array**: Verzameling van meerdere waarden
`$colors = array("red", "green", "blue");`
- **Object**: Instantie van een klasse
`$person = new Person();`
----
```php
name = $name;
$this->email = $email;
}
// Methode om een samenvatting van de persoon te geven
public function getSummary() {
return "Naam: $this->name, Email: $this->email";
}
}
// Voorbeeld van het aanmaken van een object
$person = new Person("John Doe", "john.doe@example.com");
echo $person->getSummary();
?>
```
----
### PHP Loops 1/2
- `if-else` Statement
```php
$age = 20;
if ($age >= 18) {
echo "Je mag bier!";
} else {
echo "Je mag cola!";
}
```
- `for` loop
```php
for ($i = 0; $i < 5; $i++) {
echo "Dit is biertje nummer $i\n";
}
```
----
### PHP Loops 2/2
- `while` loop
```php
$count = 0;
while ($count < 3) {
echo "Tel: $count\n";
$count++;
}
```
- `foreach` loop
```php
$beers = ["Gulpener", "Heineken", "Grolsh", 'Jever'];
foreach ($beers as $beer) {
if($beer === "Heineken") {continue;}
echo "Lekker bier: $beer\n";
}
```
---
PHP met Linux
----
### Installatie van PHP op Linux
- 1. **Update package manager**:
```bash
sudo apt update
```
- 2. **Installeer PHP**:
```bash
sudo apt install php
```
- 3. **Controleer installatie**:
```bash
php -v
```
----
### Gebruik van PHP-FPM
- **PHP-FPM (FastCGI Process Manager)**: efficiënte communicatie PHP <-> webserver
- **Webservers**:
- **Nginx**: PHP-FPM voor uitvoer PHP-scripts
- **Apache**: mod_proxy_fcgi voor betere performance
- **Voordelen**:
- Verbeterde prestaties en lagere geheugengebruik
- Maakt schaalbare webapplicaties mogelijk
> PHP-FPM: snellere en efficiëntere verwerking van webverzoeken!
---
PHP en databases
----
### PHP verbinden met Databases
- **MySQLi**:
- Specifiek voor MySQL-databases
- Ondersteunt object-georiënteerd en procedureel
- **PDO (PHP Data Objects)**:
- Ondersteunt meerdere databases (MySQL, PostgreSQL, SQLite, etc.)
- Prepared statements voor betere beveiliging
> **Voorkeur voor PDO**: Flexibiliteit verschillende databases en betere beveiliging
----
#### Transacties en Prepared Statements
- **Prepared Statements**:
- Voorkomt SQL-injecties - query's worden voorbereid via apart variabelen te binden
- **Transacties**:
- database-acties als één geheel uitvoeren
- Indien fout, volledige transactie terug draaien
> Transacties en prepared statements garanderen veilige en efficiënte database-interacties
---
PHP Libraries
----
### PHP Libraries
- **Waarom PHP Libraries?**
- Reusable code voor veelvoorkomende functionaliteit
- Vermindert ontwikkeltijd en onderhoud
- **Wat is Composer?**
- PHP's dependency management tool
- Installeren en beheren van externe libraries
- Beheert versies en dependencies automatisch
> Composer: voor schaalbare en georganiseerde PHP-projecten!
---
PHP Frameworks
----
### PHP Frameworks: Waarom?
- **Frameworks** gestructureerde manier om webapplicaties te ontwikkelen.
- Populaire PHP frameworks:
- **Laravel**: Modern, makkelijk te leren, en biedt veel ingebouwde functies.
- **Symfony**: Zeer flexibel en geschikt voor grote, complexe applicaties.
- **CodeIgniter**: Lichtgewicht en eenvoudig te configureren, ideaal voor kleinere projecten.
----
### PHP Frameworks: Voordelen
- **MVC-architectuur** (Model-View-Controller):
- Scheidt logica, presentatie en data, wat zorgt voor overzichtelijkheid.
- **Rapid Development**: Sneller ontwikkelen door ingebouwde tools en bibliotheken.
- **Herbruikbare code**: Gebruik van componenten en libraries voor efficiëntere ontwikkeling.
---
Best Practices in PHP
----
### Best Practices in PHP: Security 1/3
- **SQL-injectie**:
- Vermijd directe invoer in query's.
- Gebruik **prepared statements** (PDO) voor veilige invoer.
- **Cross-Site Scripting (XSS)**:
- Escape user-invoer met functies zoals `htmlspecialchars()`.
- **CSRF-aanvallen**:
- Bescherm formulieren met **CSRF-tokens** tegen ongeautoriseerde verzoeken.
----
### Best Practices in PHP: OOP 2/3
- **Waarom OOP?**
- Bevordert herbruikbare en modulaire code door gebruik te maken van objecten en klassen.
- **Hoe werkt OOP in PHP?**
- Maak klassen met eigenschappen en methoden.
- Gebruik **inheritance** en **polymorphism** om logica te structureren en hergebruik te stimuleren.
----
### Best Practices in PHP Clean Code 3/3
- **Schrijf leesbare en onderhoudbare code**:
- Gebruik duidelijke namen voor variabelen en functies.
- Houd functies klein en zorg voor één verantwoordelijkheid per functie.
- **PSR-standaarden**:
- Volg **PSR-12** voor code formatting.
- Gebruik **PSR-4** voor autoloading en namespace-structuur.
---
PHP DevOps
----
#### PHP DevOps (Development + Operations)
- **Automatisering**
- Automatisering van taken zoals code-integratie, testen en deployment.
- Snellere en minder foutgevoelige workflows.
- **CI/CD** (Continuous Integration/Continuous Delivery)
- Voortdurende integratie van nieuwe code (CI).
- Automatische uitrol > productieomgeving (CD).
- Maakt softwareontwikkeling sneller en soepeler.
----
- **Samenwerking**
- nauwere samenwerking dev + op teams.
- Sneller inspelen op veranderingen in softwarebehoeften en infrastructuur.
- **Korte Ontwikkelingscycli**
- Snellere bugfixes en features doorvoeren.
- DevOps: verkort tijd ontwikkeling <-> productie.
> **DevOps verbetert het ontwikkelproces door samenwerking, automatisering en continue feedback.**
---
Toekomst van PHP
----
### Toekomst van PHP
- **PHP 9.x en verder**
- Verdere verbeteringen in **performance** (snellere verwerking en optimalisaties).
- **Verbeterde type safety** en nog meer ondersteuning voor strict typing.
- **Asynchrone functionaliteit**: Verwachtingen van betere ondersteuning voor asynchrone programmering en non-blocking I/O.
- Meer focus op **JIT (Just-in-Time) compilation** voor prestatie-intensieve applicaties.
----
- **PHP is nog steeds breed in gebruik**:
- Drijft 75% van alle websites aan, inclusief populaire platforms zoals WordPress en Drupal.
- **Vergelijking met andere talen**:
- **Python**: Sterker in data science
- **Ruby**: Minder populair geworden
> PHP blijft een cruciale speler in webontwikkeling door voortdurende verbeteringen en brede adoptie.
---
PHP Demo
----
### Demo
```php
```
---
Questions?
----
## Photo Credits
- generated with Leonardo.ai
- https://unsplash.com/photos/hello-world-text-67L18R4tW_w
- generated with Leonardo.ai
- generated with ChatGPT/Dall-E
- generated with ChatGPT/Dall-E
- generated with ChatGPT/Dall-E
- generated with ChatGPT/Dall-E
- generated with ChatGPT/Dall-E
- generated with ChatGPT/Dall-E
- generated with ChatGPT/Dall-E
- generated with ChatGPT/Dall-E
- https://unsplash.com/photos/question-mark-neon-signage-8xAA0f9yQnE