PHP Rekenmachine
Complete Gids: Een Rekenmachine Maken in PHP
Het bouwen van een functionele rekenmachine met PHP is een uitstekende manier om je programmeervaardigheden te verbeteren. Deze gids behandelt alles van basisbewerkingen tot geavanceerde wiskundige functies, met praktische voorbeelden en beste praktijken voor veilige implementatie.
1. Basisconcepten van PHP Rekenmachines
Een PHP-rekenmachine verwerkt gebruikersinvoer via HTML-formulieren, voert berekeningen uit op de server en retourneert resultaten. De kerncomponenten zijn:
- HTML-formulier: Voor invoer van getallen en bewerkingskeuze
- PHP-verwerkingsscript: Voert de daadwerkelijke berekeningen uit
- Validatie: Zorgt voor veilige en correcte invoer
- Resultaatweergave: Toont de uitkomst aan de gebruiker
if (isset($_POST[‘calculate’])) {
$num1 = floatval($_POST[‘num1’]);
$num2 = floatval($_POST[‘num2’]);
$operation = $_POST[‘operation’];
$result = 0;
switch($operation) {
case ‘add’:
$result = $num1 + $num2;
break;
case ‘subtract’:
$result = $num1 – $num2;
break;
// … andere bewerkingen
}
echo “Resultaat: ” . number_format($result, 2);
}
?>
2. Geavanceerde Wiskundige Functies Implementeren
Voor complexere rekenmachines kun je PHP’s ingebouwde wiskundige functies gebruiken:
| Functie | Beschrijving | Voorbeeld |
|---|---|---|
| sqrt() | Bereken vierkantswortel | sqrt(16) → 4 |
| pow() | Machtsverheffen | pow(2, 3) → 8 |
| log() | Natuurlijke logaritme | log(10) → 2.302585 |
| sin()/cos()/tan() | Trigonometrische functies | sin(0) → 0 |
| pi() | Retourneert waarde van π | pi() → 3.14159265359 |
3. Veiligheidsoverewegingen
Beveiligingsmaatregelen zijn cruciaal bij het verwerken van gebruikersinvoer:
- Invoervalidatie: Gebruik
filter_var()enfilter_input()om alleen numerieke waarden te accepteren - Typeconversie: Zet invoer expliciet om naar float/int met
floatval()ofintval() - CSRF-bescherming: Implementeer tokens voor formulierverzendingen
- Foutafhandeling: Geef geen systeeminformatie prijs bij fouten
$num1 = filter_input(INPUT_POST, ‘num1’, FILTER_VALIDATE_FLOAT);
$num2 = filter_input(INPUT_POST, ‘num2’, FILTER_VALIDATE_FLOAT);
if ($num1 === false || $num2 === false) {
die(“Ongeldige invoer. Voer alleen getallen in.”);
}
if ($num2 == 0 && $_POST[‘operation’] == ‘divide’) {
die(“Fout: Delen door nul is niet toegestaan”);
}
?>
4. Prestatieoptimalisatie
Voor hoogfrequente berekeningen zijn deze optimalisaties belangrijk:
| Techniek | Voordeel | Implementatie |
|---|---|---|
| Opcode caching | 2-5x snellere scriptuitvoering | Installeer OPcache |
| Vooraf berekende waarden | Reduceert herhalende berekeningen | Gebruik statische arrays |
| Bitwise bewerkingen | Sneller dan wiskundige operators | Gebruik << in plaats van *2 |
| Memory management | Voorkomt geheugenleks | Gebruik unset() voor grote arrays |
5. Integratie met Databases
Voor het opslaan van berekeningsgeschiedenis:
$pdo = new PDO(‘mysql:host=localhost;dbname=calculator’, ‘user’, ‘pass’);
$stmt = $pdo->prepare(“INSERT INTO calculations (num1, num2, operation, result) VALUES (?, ?, ?, ?)”);
$stmt->execute([$num1, $num2, $operation, $result]);
$history = $pdo->query(“SELECT * FROM calculations ORDER BY id DESC LIMIT 10”);
?>
<table>
<?php foreach ($history as $row): ?>
<tr>
<td><?= htmlspecialchars($row[‘num1’]) ?></td>
<td><?= htmlspecialchars($row[‘operation’]) ?></td>
<td><?= htmlspecialchars($row[‘num2’]) ?></td>
<td>=</td>
<td><?= htmlspecialchars($row[‘result’]) ?></td>
</tr>
<?php endforeach; ?>
</table>
6. API-Integratie voor Externe Berekeningen
Gebruik externe API’s voor complexe berekeningen zoals valutaomrekening of wetenschappelijke formules:
$api_url = ‘https://api.exchangerate-api.com/v4/latest/EUR’;
$response = file_get_contents($api_url);
$data = json_decode($response, true);
$rate = $data[‘rates’][‘USD’];
$converted = $amount * $rate;
echo number_format($amount, 2) . ” EUR = ” . number_format($converted, 2) . ” USD”;
?>
Veelvoorkomende Fouten en Oplossingen
-
Delen door nul fout
Always check if the divisor is zero before performing division operations. Implement a validation step:
if ($num2 == 0 && $operation == ‘divide’) {
$error = “Cannot divide by zero”;
} -
Type mismatches
PHP’s loose typing can cause unexpected results. Explicitly cast variables:
$result = (float)$num1 + (float)$num2; -
Floating point precision issues
Use the bcmath extension for high precision calculations:
$result = bcadd($num1, $num2, 10); // 10 decimal places
Autoritatieve Bronnen
Voor verdere studie raden we deze officiële bronnen aan:
- Officiële PHP documentatie over rekenkundige operators
- NIST Cybersecurity Resources (beveiligingsbest practices)
- Stanford University – Computer Science 103 (Algoritmische efficiëntie)
Conclusie
Het bouwen van een PHP-rekenmachine biedt waardevolle inzichten in:
- Formulierverwerking en gebruikersinteractie
- Server-side berekeningen en staatbeheer
- Beveiligingsprincipes voor webapplicaties
- Prestatieoptimalisatie technieken
- Integratie met databases en externe services
Begin met een eenvoudige implementatie en breid geleidelijk uit met geavanceerde functies zoals:
- Grafische weergave van resultaten (met GD library)
- Gebruikersaccounts voor berekeningsgeschiedenis
- API-endpoints voor externe toegang
- Machine learning voor patroonherkenning in berekeningen
Door deze gids te volgen en te experimenteren met de voorbeeldcode, kun je een professionele, veilige en schaalbare PHP-rekenmachine bouwen die voldoet aan industriële standaarden.