Mastering PHP Functions: Dari Built-in hingga Arrow Functions dan Strict Typing

🎯 Pengenalan Functions

Function (fungsi) adalah salah satu konsep fundamental dalam pemrograman yang memungkinkan kita untuk mengorganisir code menjadi blok-blok yang dapat digunakan kembali. Function membuat program lebih terstruktur, mudah dipahami, dan efficient.

Apa Itu Function?

Function adalah blok kode yang dirancang untuk melakukan tugas tertentu. Function dapat:

  • Menerima Input - Dalam bentuk parameters/arguments
  • Memproses Data - Menjalankan logika tertentu
  • Menghasilkan Output - Return value atau side effects
  • Digunakan Berulang - Dapat dipanggil berkali-kali

Mengapa Function Penting?

✅ Keuntungan Menggunakan Functions:

  1. Less Typing (Mengurangi Penulisan Kode):
    • Tulis sekali, gunakan berkali-kali
    • Tidak perlu copy-paste kode yang sama
    • Code becomes more DRY (Don't Repeat Yourself)
  2. Reduce and Isolate Errors (Mengurangi dan Mengisolasi Error):
    • Bug hanya perlu diperbaiki di satu tempat
    • Testing lebih mudah karena terisolasi
    • Debugging lebih efisien
  3. Decrease Loading Time (Mengurangi Waktu Loading):
    • Code lebih compact dan terorganisir
    • Easier untuk dioptimasi
  4. Decrease Execution Time (Mengurangi Waktu Eksekusi):
    • Function hanya dikompilasi sekali
    • Reuse compiled code untuk multiple calls
    • PHP engine dapat mengoptimasi function calls

💡 Prinsip Penting dalam Functions:

"Don't Reinvent the Wheel"

Sebelum membuat function baru, cek dulu apakah PHP sudah menyediakan built-in function yang melakukan hal yang sama. PHP memiliki ribuan built-in functions yang siap pakai!

🛠️ PHP Built-in Functions

PHP menyediakan lebih dari 1000+ built-in functions yang dapat langsung digunakan tanpa perlu mendefinisikan sendiri. Functions ini mencakup berbagai kategori seperti string manipulation, mathematical operations, array handling, date/time, file operations, dan banyak lagi.

Kategori Built-in Functions:

  • String Functions - Manipulasi string (strlen, substr, str_replace, dll)
  • Math Functions - Operasi matematika (abs, pow, sqrt, round, dll)
  • Array Functions - Manipulasi array (array_push, array_merge, sort, dll)
  • Date/Time Functions - Operasi tanggal dan waktu (date, time, strtotime, dll)
  • File Functions - File handling (fopen, fwrite, fread, dll)
  • Database Functions - Database operations (mysqli_*, PDO, dll)

Contoh Built-in Functions yang Sering Digunakan

<?php // String Functions $text = "hello world"; echo strtoupper($text); // HELLO WORLD // Math Functions $number = -15.7; echo abs($number); // 15.7 // Output Functions echo("Hello PHP"); // Output: Hello PHP print("Hello World"); // Output: Hello World // Array Functions $fruits = ["apple", "banana"]; array_push($fruits, "orange"); print_r($fruits); // Array dengan 3 elemen ?>

📝 String Functions

String functions adalah salah satu kategori built-in functions yang paling sering digunakan dalam PHP development. Kita sudah mempelajari beberapa di tutorial sebelumnya, tapi mari kita recap dan tambahkan beberapa yang baru.

String Functions Essentials

Function Deskripsi Contoh
strlen() Menghitung panjang string strlen("Hello") → 5
str_word_count() Menghitung jumlah kata str_word_count("Hello World") → 2
strtoupper() Convert ke uppercase strtoupper("hello") → "HELLO"
strtolower() Convert ke lowercase strtolower("HELLO") → "hello"
ucfirst() Uppercase karakter pertama ucfirst("hello") → "Hello"
ucwords() Uppercase setiap kata ucwords("hello world") → "Hello World"
str_replace() Replace substring str_replace("bad", "good", "bad day")
substr() Ambil bagian string substr("hello", 0, 3) → "hel"
strpos() Cari posisi substring strpos("hello world", "world") → 6
trim() Hapus whitespace trim(" hello ") → "hello"

🔢 Math Functions

PHP menyediakan berbagai mathematical functions untuk perhitungan numerik. Functions ini sangat berguna untuk aplikasi yang melibatkan kalkulasi, statistik, atau operasi matematika kompleks.

Math Functions yang Paling Berguna

Function Deskripsi Contoh
abs() Nilai absolut (mutlak) abs(-15) → 15
pow() Pangkat (x^y) pow(2, 3) → 8
sqrt() Akar kuadrat sqrt(16) → 4
round() Pembulatan round(3.7) → 4
ceil() Pembulatan ke atas ceil(3.2) → 4
floor() Pembulatan ke bawah floor(3.9) → 3
max() Nilai maksimum max(1, 5, 3) → 5
min() Nilai minimum min(1, 5, 3) → 1
rand() Random number rand(1, 100) → angka random 1-100
pi() Nilai Pi pi() → 3.14159265359

Contoh Penggunaan Math Functions

<?php // Absolute value $temperature = -15.5; echo "Temperature: " . abs($temperature) . "°C<br/>"; // Power $area = pow(5, 2); // 5^2 = 25 echo "Area: {$area} m²<br/>"; // Square root $side = sqrt(25); echo "Side length: $side<br/>"; // Rounding $price = 19.99; echo "Rounded: " . round($price) . "<br/>"; // 20 echo "Ceil: " . ceil($price) . "<br/>"; // 20 echo "Floor: " . floor($price) . "<br/>"; // 19 // Max and Min $scores = [85, 92, 78, 95, 88]; echo "Highest score: " . max($scores) . "<br/>"; echo "Lowest score: " . min($scores) . "<br/>"; // Random number $dice = rand(1, 6); echo "Dice roll: $dice<br/>"; // Circle calculation $radius = 7; $circumference = 2 * pi() * $radius; echo "Circumference: " . round($circumference, 2); ?>

🔍 Built-in Functions: empty() dan isset()

Dua functions ini sangat penting untuk validasi data dan checking variable existence. Mereka sering digunakan bersama untuk memastikan data exists dan valid sebelum diproses.

isset() - Cek Apakah Variable Sudah Di-Set

isset() mengecek apakah sebuah variable:

  • ✅ Sudah dideklarasikan (exists)
  • ✅ Tidak bernilai NULL

Return: true jika variable exists dan bukan NULL, false jika sebaliknya

empty() - Cek Apakah Variable Kosong

empty() mengecek apakah variable adalah "empty". Dianggap empty jika:

  • "" (empty string)
  • 0 (integer zero)
  • "0" (string zero)
  • NULL
  • FALSE
  • array() (empty array)
  • Variable yang belum di-set

Return: true jika empty, false jika tidak empty

Perbandingan isset() vs empty()

<?php // Test dengan berbagai nilai $var1 = ""; $var2 = 0; $var3 = "0"; $var4 = NULL; $var5 = false; $var6 = "Hello"; // isset() results echo "isset() tests:<br/>"; echo "var1 (''): " . (isset($var1) ? "true" : "false") . "<br/>"; // true echo "var2 (0): " . (isset($var2) ? "true" : "false") . "<br/>"; // true echo "var3 ('0'): " . (isset($var3) ? "true" : "false") . "<br/>"; // true echo "var4 (NULL): " . (isset($var4) ? "true" : "false") . "<br/>"; // false echo "var7 (not set): " . (isset($var7) ? "true" : "false") . "<br/>"; // false echo "<br/>empty() tests:<br/>"; echo "var1 (''): " . (empty($var1) ? "true" : "false") . "<br/>"; // true echo "var2 (0): " . (empty($var2) ? "true" : "false") . "<br/>"; // true echo "var3 ('0'): " . (empty($var3) ? "true" : "false") . "<br/>"; // true echo "var5 (false): " . (empty($var5) ? "true" : "false") . "<br/>"; // true echo "var6 ('Hello'): " . (empty($var6) ? "true" : "false") . "<br/>"; // false ?>

Use Case: Form Validation

File: form.html

<!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <title>Form Example</title> </head> <body> <h2>Check Even or Odd Number</h2> <form action="form.php" method="post"> <input type="number" name="number" placeholder="Enter number" required/> <br/><br/> <input type="submit" name="submit" value="Submit"/> </form> </body> </html>

File: form.php

<?php // Cek apakah form di-submit via POST if (isset($_POST["submit"])) { // Cek apakah number field tidak kosong if (!empty($_POST["number"])) { $number = $_POST["number"]; // Check even or odd if ($number % 2 == 0) { echo "<h2>Number $number is EVEN</h2>"; } else { echo "<h2>Number $number is ODD</h2>"; } } else { echo "<p style='color: red;'>Please enter a number!</p>"; } } else { // Jika file diakses langsung tanpa submit form echo "<p style='color: red;'>Request is not from POST</p>"; } ?>

💡 Best Practice:

Kombinasikan isset() dan !empty() untuk validasi yang robust:

<?php // Good practice if (isset($_POST["username"]) && !empty($_POST["username"])) { $username = $_POST["username"]; // Process username } else { echo "Username is required!"; } ?>

👨‍💻 User-Defined Functions

Selain menggunakan built-in functions, kita juga bisa membuat functions sendiri sesuai kebutuhan. Ini disebut User-Defined Functions.

Anatomi Function

Struktur Function dalam PHP

function functionName($parameter1, $parameter2) { // Function body // Code to execute return $result; // Optional }

Komponen Function:

  1. Keyword "function" - Menandai ini adalah function
  2. Function Name - Nama yang descriptive
  3. Parameters - Input yang diterima (optional)
  4. Function Body - Code yang dieksekusi
  5. Return Statement - Output yang dikembalikan (optional)

⚠️ PENTING: Function Name Case Sensitivity

Di PHP, function names TIDAK case-sensitive, tapi best practice adalah menggunakan naming yang konsisten!

<?php function sayHello() { echo "Hello!"; } // Semua ini akan berfungsi (tapi tidak recommended!) sayHello(); // ✅ Recommended SAYHELLO(); // ✅ Works, but bad practice SayHello(); // ✅ Works, but bad practice sAyHeLLo(); // ✅ Works, but very bad practice ?>

Function Tanpa Return Value

<?php function sayHello() { echo "HELLO"; } function greetUser($name) { echo "Hello, {$name}!"; } // Calling functions sayHello(); // Output: HELLO greetUser("John"); // Output: Hello, John! ?>

Function Dengan Return Value

<?php function getName() { return "JOHN"; } function getAge() { return 25; } function calculateSum($a, $b) { return $a + $b; } // Using return values $name = getName(); echo "Name: $name<br/>"; // Name: JOHN $age = getAge(); echo "Age: $age<br/>"; // Age: 25 $sum = calculateSum(10, 20); echo "Sum: $sum"; // Sum: 30 ?>

Kapan Menggunakan Return vs Echo?

  • Gunakan RETURN jika:
    • Nilai akan digunakan untuk perhitungan lain
    • Ingin function lebih flexible dan reusable
    • Function menghasilkan data yang akan diproses
  • Gunakan ECHO jika:
    • Tujuan function hanya untuk menampilkan output
    • Tidak perlu menyimpan atau memproses hasilnya
    • Function adalah untuk presentation/display

📥 Parameters dan Return Values

Parameters memungkinkan kita untuk mengirim data ke function, sedangkan return values memungkinkan function mengembalikan hasil ke caller.

Single Parameter

<?php function sayHello($name) { echo "Hello {$name}!<br/>"; } sayHello("John"); // Hello John! sayHello("Jane"); // Hello Jane! sayHello("Bob"); // Hello Bob! ?>

Multiple Parameters

<?php function multiply($num1, $num2) { return $num1 * $num2; } $result = multiply(5, 3); echo "5 x 3 = $result<br/>"; // 5 x 3 = 15 // Langsung output echo "7 x 8 = " . multiply(7, 8); // 7 x 8 = 56 ?>

Contoh: Function untuk Menghitung Luas dan Keliling

<?php function calculateRectangleArea($length, $width) { return $length * $width; } function calculateRectanglePerimeter($length, $width) { return 2 * ($length + $width); } $length = 10; $width = 5; $area = calculateRectangleArea($length, $width); $perimeter = calculateRectanglePerimeter($length, $width); echo "Rectangle {$length}x{$width}<br/>"; echo "Area: {$area} m²<br/>"; echo "Perimeter: {$perimeter} m"; ?>
Rectangle 10x5 Area: 50 m² Perimeter: 30 m

🎯 Default Parameters

Default parameters memungkinkan kita mendefinisikan nilai default untuk parameter. Jika caller tidak memberikan nilai untuk parameter tersebut, nilai default akan digunakan.

Kenapa Default Parameters Penting?

  • Flexibility: Function bisa dipanggil dengan atau tanpa argument tertentu
  • Convenience: Tidak perlu selalu pass semua parameters
  • Backwards Compatibility: Bisa menambah parameter baru tanpa break existing code

⚠️ Aturan Default Parameters:

Default parameters harus ditempatkan setelah required parameters (parameters tanpa default value).

<?php // ✅ BENAR function calculate($x, $y = 10) { } // ❌ SALAH - Default parameter tidak boleh sebelum required parameter function calculate($x = 10, $y) { } ?>

Contoh Default Parameters

<?php function calculate($x, $y = 10) { return $x * $y; } // Dengan 2 arguments $result1 = calculate(5, 20); echo "Result 1: $result1<br/>"; // Result 1: 100 // Dengan 1 argument (y menggunakan default value 10) $result2 = calculate(5); echo "Result 2: $result2<br/>"; // Result 2: 50 ?>
Result 1: 100 Result 2: 50

Contoh: Function untuk Greeting dengan Default

<?php function greet($name, $greeting = "Hello", $punctuation = "!") { return "{$greeting} {$name}{$punctuation}"; } // Berbagai cara pemanggilan echo greet("John") . "<br/>"; // Hello John! echo greet("Jane", "Hi") . "<br/>"; // Hi Jane! echo greet("Bob", "Good morning", ".") . "<br/>"; // Good morning Bob. ?>

🔄 Variadic Parameters

Variadic parameters memungkinkan function menerima jumlah argument yang tidak terbatas. Ini sangat berguna ketika kita tidak tahu berapa banyak data yang akan dikirim ke function.

Karakteristik Variadic Parameters:

  • Menggunakan ... (three dots) sebelum parameter name
  • Parameter menjadi array yang berisi semua arguments
  • Bisa menggunakan foreach untuk iterate
  • Harus ditempatkan sebagai parameter terakhir

Sintaks Variadic Parameters

<?php function functionName(...$params) { // $params adalah array foreach ($params as $param) { // Process each parameter } } ?>

Contoh: Say Hello ke Multiple Names

<?php function sayHello(...$names) { $result = "Hello"; foreach ($names as $name) { $result .= ", " . $name; } return $result; } // Bisa dipanggil dengan jumlah argument berbeda echo sayHello("John") . "<br/>"; echo sayHello("John", "Jane") . "<br/>"; echo sayHello("John", "Jane", "Bob", "Smith") . "<br/>"; ?>
Hello, John Hello, John, Jane Hello, John, Jane, Bob, Smith

Contoh: Calculate Sum of Numbers

<?php function calculateSum(...$numbers) { $sum = 0; foreach ($numbers as $number) { $sum += $number; } return $sum; } echo "Sum: " . calculateSum(1, 2, 3) . "<br/>"; // 6 echo "Sum: " . calculateSum(10, 20, 30, 40) . "<br/>"; // 100 echo "Sum: " . calculateSum(5) . "<br/>"; // 5 ?>

Contoh: Combining Regular and Variadic Parameters

<?php function createList($title, ...$items) { $html = "<h3>{$title}</h3>"; $html .= "<ul>"; foreach ($items as $item) { $html .= "<li>{$item}</li>"; } $html .= "</ul>"; return $html; } echo createList("Shopping List", "Milk", "Bread", "Eggs", "Butter"); ?>

🔐 Closure dan Arrow Functions

Closure (atau anonymous function) adalah function tanpa nama yang dapat disimpan dalam variable atau dipass sebagai argument. PHP juga mendukung arrow functions sebagai sintaks yang lebih singkat.

Closure (Anonymous Function)

Karakteristik Closure:

  • Function tanpa nama
  • Dapat disimpan dalam variable
  • Dapat dipass sebagai argument ke function lain
  • Dapat mengakses variable dari parent scope dengan use keyword
<?php // Basic closure $addition = function ($a, $b) { return $a + $b; }; echo $addition(2, 3); // Output: 5 // Closure sebagai callback $numbers = [1, 2, 3, 4, 5]; $squared = array_map(function($n) { return $n * $n; }, $numbers); print_r($squared); // [1, 4, 9, 16, 25] ?>

Closure dengan Use Keyword

<?php $tax = 0.1; // 10% tax $calculateTotal = function ($price) use ($tax) { return $price + ($price * $tax); }; echo "Total: " . $calculateTotal(100); // 110 ?>

Arrow Functions (PHP 7.4+)

Arrow functions adalah sintaks yang lebih singkat untuk closure sederhana. Menggunakan fn keyword dan => arrow.

✅ Keuntungan Arrow Functions:

  • Lebih Singkat: Sintaks lebih compact
  • Auto Capture: Otomatis capture variable dari parent scope
  • Implicit Return: Tidak perlu keyword return

⚠️ Limitasi Arrow Functions:

Arrow functions hanya bisa berisi satu expression. Untuk logic kompleks, gunakan closure biasa.

<?php // Closure biasa $addition = function ($a, $b) { return $a + $b; }; // Arrow function (lebih singkat!) $addition = fn($a, $b) => $a + $b; echo $addition(3, 17); // Output: 20 // Dengan array_map $numbers = [1, 2, 3, 4, 5]; $doubled = array_map(fn($n) => $n * 2, $numbers); print_r($doubled); // [2, 4, 6, 8, 10] // Auto capture dari parent scope $multiplier = 10; $multiply = fn($n) => $n * $multiplier; echo $multiply(5); // 50 ?>

Perbandingan Closure vs Arrow Function

Closure (function)

$add = function($a, $b) { return $a + $b; };
  • Sintaks lebih panjang
  • Perlu keyword return
  • Perlu use untuk capture variables
  • Bisa multi-statement

Arrow Function (fn)

$add = fn($a, $b) => $a + $b;
  • Sintaks lebih singkat
  • Implicit return
  • Auto capture variables
  • Hanya single expression

♻️ Recursive Functions

Recursion adalah teknik dimana sebuah function memanggil dirinya sendiri. Ini adalah konsep powerful yang sering digunakan untuk menyelesaikan masalah yang dapat dipecah menjadi sub-masalah yang lebih kecil dengan pola yang sama.

Karakteristik Recursive Function:

  1. Base Case: Kondisi untuk berhenti (exit condition)
  2. Recursive Case: Function memanggil dirinya sendiri dengan parameter yang lebih kecil
  3. Progress Toward Base Case: Setiap panggilan harus mendekati base case

⚠️ Bahaya Stack Overflow!

Tanpa base case yang proper, recursive function akan terus memanggil dirinya sendiri hingga terjadi stack overflow dan program crash!

Contoh 1: Factorial

Factorial adalah contoh klasik recursion. n! = n × (n-1) × (n-2) × ... × 1

<?php function factorial($num) { // Base case: 0! = 1, 1! = 1 if ($num == 0 || $num == 1) { return 1; } else { // Recursive case return $num * factorial($num - 1); } } echo "5! = " . factorial(5) . "<br/>"; // 120 echo "6! = " . factorial(6) . "<br/>"; // 720 echo "10! = " . factorial(10); // 3628800 ?>
5! = 120 6! = 720 10! = 3628800

Visualisasi Factorial(5):

factorial(5) = 5 * factorial(4) = 5 * (4 * factorial(3)) = 5 * (4 * (3 * factorial(2))) = 5 * (4 * (3 * (2 * factorial(1)))) = 5 * (4 * (3 * (2 * 1))) = 5 * (4 * (3 * 2)) = 5 * (4 * 6) = 5 * 24 = 120

Contoh 2: Fibonacci

Fibonacci sequence: 1, 1, 2, 3, 5, 8, 13, 21, ...

<?php function fibo($num) { // Base case if ($num == 1 || $num == 2) { return 1; } else { // Recursive case return fibo($num - 1) + fibo($num - 2); } } // Print first 10 Fibonacci numbers echo "Fibonacci sequence: "; for ($i = 1; $i <= 10; $i++) { echo fibo($i) . " "; } ?>
Fibonacci sequence: 1 1 2 3 5 8 13 21 34 55

Contoh 3: Countdown

<?php function countdown($n) { // Base case if ($n <= 0) { echo "Blast off! 🚀<br/>"; return; } // Recursive case echo "T-minus $n...<br/>"; countdown($n - 1); } countdown(5); ?>
T-minus 5... T-minus 4... T-minus 3... T-minus 2... T-minus 1... Blast off! 🚀

💡 Kapan Menggunakan Recursion?

Gunakan Recursion untuk:

  • Tree traversal (filesystem, DOM, organizational structure)
  • Mathematical calculations (factorial, fibonacci, power)
  • Divide and conquer algorithms (merge sort, quick sort)
  • Backtracking problems (maze solving, sudoku)

Hindari Recursion untuk:

  • Simple iteration yang bisa dilakukan dengan loop
  • Sangat deep recursion (risk of stack overflow)
  • Performance-critical code (recursion lebih lambat)

📦 Require dan Include: Modular PHP

PHP memungkinkan kita untuk memecah code menjadi multiple files dan menggabungkannya saat runtime. Ini membuat project lebih terorganisir dan maintainable.

4 Functions untuk File Inclusion

Function Behavior jika File Not Found Multiple Inclusion
include() Warning, continue execution Allowed (bisa include berkali-kali)
require() Fatal Error, stop execution Allowed (bisa require berkali-kali)
include_once() Warning, continue execution Only once (prevented)
require_once() Fatal Error, stop execution Only once (prevented)

include() vs require()

include()

  • Soft Error: Warning saja
  • Continue: Script tetap berjalan
  • Use for: Non-critical files (templates, optional modules)

require()

  • Hard Error: Fatal error
  • Stop: Script berhenti
  • Use for: Critical files (config, core functions)

Contoh Praktis: Modular Structure

File: header.php

<?php // Variables yang akan digunakan di main $length = 10; $width = 50; $siteName = "My Website"; ?>

File: footer.php

<?php echo "<footer style='margin-top: 50px; padding: 20px; background: #333; color: white;'>"; echo "<p>Copyright © 2025 Computing Department</p>"; echo "</footer>"; ?>

File: main.php

<!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <title>Modular PHP Example</title> </head> <body> <?php include("header.php"); ?> <h1>Welcome to <?php echo $siteName; ?></h1> <?php $area = $length * $width; echo "<p>Rectangle: {$length} x {$width} = {$area} m²</p>"; ?> <?php include("footer.php"); ?> </body> </html>

include_once() dan require_once()

✅ Mengapa Menggunakan *_once()?

Mencegah masalah yang muncul dari multiple inclusions:

  • Redeclaration Errors: Function atau class dideklarasikan lebih dari sekali
  • Performance: File hanya di-load dan parse sekali
  • Side Effects: Code yang mengubah state tidak dieksekusi berkali-kali

Best Practice Example:

<!DOCTYPE html> <html lang="id"> <body> <?php // Use require_once for critical files require_once("config.php"); require_once("functions.php"); // Use include_once for optional files include_once("header.php"); ?> <main> <?php // Main content here ?> </main> <?php include_once("footer.php"); ?> </body> </html>

Testing: What Happens When File Not Found?

<!DOCTYPE html> <html lang="id"> <body> <h1>Testing include vs require</h1> <?php echo "Before include...<br/>"; include("nonexistent.php"); // Warning, tapi lanjut echo "After include (still running)<br/>"; echo "Before require...<br/>"; require("nonexistent.php"); // Fatal error, stop! echo "After require (won't show)<br/>"; // Tidak akan dieksekusi ?> </body> </html>

🔒 PHP Strict Typing

PHP adalah dynamically typed language, artinya kita tidak perlu mendeklarasikan tipe data variable. Namun, mulai PHP 7, kita bisa menggunakan strict typing untuk type safety yang lebih baik.

Mengapa Strict Typing Penting?

✨ Keuntungan Strict Typing:

  • Type Safety: Mencegah type errors di runtime
  • Better Documentation: Code lebih self-documenting
  • IDE Support: Autocomplete dan error detection lebih baik
  • Catch Bugs Early: Error terdeteksi saat development, bukan production
  • Maintainability: Lebih mudah understand dan refactor code

Problem: Loose Typing

<?php function addNumbers($a, $b) { return $a + $b; } // Ini akan "bekerja" tapi hasilnya tidak expected echo addNumbers("john", "doe"); // Output: 0 (!!!) echo "<br/>"; echo addNumbers("5", "10"); // Output: 15 (string coercion) ?>

Solution: Strict Typing

<?php declare(strict_types=1); // Type hints untuk parameters dan return type function addNumbers(int $a, int $b): int { return $a + $b; } // Sekarang ini akan work echo addNumbers(5, 10); // 15 // Ini akan throw TypeError! // echo addNumbers("5", "10"); // Fatal error! ?>

⚠️ PENTING: declare(strict_types=1)

Statement declare(strict_types=1); harus ditulis di baris pertama file PHP, sebelum code apapun (bahkan sebelum whitespace)!

Type Hints yang Tersedia

Type Deskripsi Contoh
int Integer function add(int $a, int $b): int
float Float/Double function calc(float $x): float
string String function greet(string $name): string
bool Boolean function check(bool $flag): bool
array Array function process(array $data): array
object Object function handle(object $obj): object
mixed Any type (PHP 8+) function any(mixed $val): mixed
void No return value function display(): void

Contoh Lengkap dengan Type Hints

<?php declare(strict_types=1); // Function dengan type hints lengkap function calculatePrice(float $price, float $tax): float { return $price + ($price * $tax); } function displayMessage(string $message): void { echo "<p>{$message}</p>"; } function getUser(int $id): array { // Simulate database query return [ "id" => $id, "name" => "John Doe", "email" => "john@example.com" ]; } // Usage $total = calculatePrice(100.0, 0.1); // 110.0 displayMessage("Total: $total"); $user = getUser(1); print_r($user); ?>

Union Types (PHP 8+)

<?php declare(strict_types=1); // Parameter bisa int ATAU float function multiply(int|float $a, int|float $b): int|float { return $a * $b; } echo multiply(5, 3); // 15 echo multiply(5.5, 2.0); // 11.0 ?>

🎓 Best Practices untuk PHP Functions

💡 Tips Menulis Functions yang Baik:

  1. Single Responsibility: Setiap function hanya melakukan satu tugas
  2. Descriptive Names: Nama function harus jelas describe apa yang dilakukan
    • ✅ calculateTotalPrice()
    • ❌ calc() atau doSomething()
  3. Keep It Short: Idealnya function < 20-30 lines of code
  4. Use Type Hints: Gunakan strict typing untuk type safety
  5. Document Your Code: Gunakan PHPDoc comments
    <?php /** * Calculate the area of a rectangle * * @param float $length Length in meters * @param float $width Width in meters * @return float Area in square meters */ function calculateArea(float $length, float $width): float { return $length * $width; } ?>
  6. Avoid Side Effects: Function tidak seharusnya mengubah global state
  7. Return Early: Return saat kondisi terpenuhi, jangan nested if terlalu dalam
  8. DRY Principle: Don't Repeat Yourself - extract repeated code ke functions

⚠️ Common Mistakes to Avoid:

  • Too Many Parameters: Jika function perlu > 4 parameters, consider using array atau object
  • Unclear Return Values: Function harus konsisten dalam return value type
  • Modifying Parameters: Jangan modify parameters yang dipass (immutability)
  • Deep Nesting: Terlalu banyak nested if/loops membuat function sulit dibaca
  • No Error Handling: Handle edge cases dan invalid inputs

📚 Referensi dan Sumber Belajar

🔗 Link Berguna untuk Belajar PHP Functions:

🎯 Kesimpulan

Selamat! Anda telah menguasai PHP Functions secara komprehensif. Mari kita recap journey kita:

📝 Yang Sudah Dipelajari:

  1. Built-in Functions: Memanfaatkan ribuan functions bawaan PHP
  2. User-Defined Functions: Membuat custom functions untuk kebutuhan spesifik
  3. Parameters: Single, multiple, default, dan variadic parameters
  4. Return Values: Mengembalikan hasil dari function
  5. Closure: Anonymous functions untuk callback dan functional programming
  6. Arrow Functions: Sintaks singkat untuk simple closures
  7. Recursion: Function yang memanggil dirinya sendiri
  8. File Inclusion: include, require, include_once, require_once
  9. Strict Typing: Type safety dengan type hints dan declare(strict_types=1)

🚀 Key Takeaways:

  • Functions membuat code reusable, maintainable, dan organized
  • Don't Reinvent the Wheel - gunakan built-in functions
  • Single Responsibility - satu function, satu tugas
  • Gunakan type hints untuk type safety
  • require_once() untuk critical files, include_once() untuk optional
  • Recursion powerful tapi hati-hati stack overflow
  • Document your functions dengan PHPDoc

Komentar