Setiap berkas Laravel yang kita buka — route, controller, migration, sampai config — pada dasarnya adalah berkas PHP yang penuh variabel bertipe. Ketika membaca kode seperti public function simpan(Request $request): RedirectResponse, kita sedang membaca PHP modern dengan type declaration. Chapter ini menyegarkan konsep variabel dan tipe data sebatas yang dibutuhkan untuk membaca kode Laravel dengan nyaman, bukan kursus PHP lengkap. Kita akan fokus pada tipe scalar, null, perilaku type juggling, dan cara membaca type declaration pada signature method.

Variabel dan Empat Tipe Scalar #

Variabel di PHP selalu diawali tanda $, lalu diikuti nama yang boleh berisi huruf, angka, dan garis bawah. Empat tipe scalar yang paling sering kita temui di kode Laravel adalah int, float, string, dan bool. Fungsi gettype() melaporkan tipe sebuah nilai saat runtime:

php
<?php
$judul = "Belajar Laravel";
$harga = 150000;
$rating = 4.75;
$tersedia = true;

echo gettype($judul), ": ", $judul, "\n";
echo gettype($harga), ": ", $harga, "\n";
echo gettype($rating), ": ", $rating, "\n";
echo gettype($tersedia), ": ", ($tersedia ? "true" : "false"), "\n";

Output yang Dihasilkan:

text
string: Belajar Laravel
integer: 150000
double: 4.75
boolean: true

Perhatikan dua nama yang dilaporkan gettype(): tipe int dilaporkan sebagai integer, dan tipe float dilaporkan sebagai double — nama warisan internal Zend Engine. Selain empat tipe scalar tersebut, PHP mengenal nilai khusus null yang berarti “variabel belum memiliki nilai”:

php
<?php
$namaKategori = null;
var_dump($namaKategori);

$namaKategori = "Tutorial";
var_dump($namaKategori);

Output yang Dihasilkan:

text
NULL
string(8) "Tutorial"

Fungsi var_dump() menampilkan tipe sekaligus isi variabel, sehingga fungsi tersebut menjadi alat bantu favorit saat men-debug. Nilai null sangat sering muncul di Laravel: kolom database yang kosong dibaca Eloquent sebagai null, dan parameter opsional pada helper Laravel sering mengembalikan null ketika data tidak ditemukan.

Type Juggling: Konversi Otomatis #

PHP bukan bahasa yang statically typed seperti Go atau Java. Ketika dua nilai bertipe berbeda dipakai dalam satu operasi, interpreter PHP secara otomatis mengonversi salah satu nilai agar tipenya cocok — perilaku ini disebut type juggling:

php
<?php
var_dump("5" + 3);     // "5" dikonversi menjadi int 5
var_dump("5" == 5);    // true — "5" dikonversi sebelum dibandingkan
var_dump("5" === 5);   // false — string tidak identik dengan int
var_dump("abc" == 0);  // false sejak PHP 8

Output yang Dihasilkan:

text
int(8)
bool(true)
bool(false)
bool(false)

Baris "5" + 3 menghasilkan int(8) karena PHP mengonversi string numerik "5" menjadi angka sebelum menjumlahkan. Operator == membandingkan nilai setelah konversi, sedangkan === membandingkan nilai dan tipe tanpa konversi. Kode Laravel modern memilih === hampir di semua tempat, jadi biasakan membaca kedua operator ini secara berbeda — kita bahas lebih dalam di chapter Operator dan Ekspresi.

Type Declaration pada Signature #

PHP modern memungkinkan kita menuliskan tipe secara eksplisit pada parameter dan return value. Gaya penulisan inilah yang dipakai Laravel di hampir seluruh kode sumbernya:

php
<?php

function formatHarga(int $harga, string $mataUang = "Rp"): string
{
    return $mataUang . number_format($harga, 0, ",", ".");
}

echo formatHarga(150000), "\n";
echo formatHarga(2500000, "USD "), "\n";

Output yang Dihasilkan:

text
Rp150.000
USD 2.500.000

Mari kita baca signature formatHarga per bagian: parameter $harga wajib bertipe int, parameter $mataUang bertipe string dengan nilai default "Rp", dan return type : string menjamin fungsi tersebut mengembalikan string. Jika kita mengirim tipe yang tidak cocok, PHP melempar TypeError alih-alih diam-diam mengonversi. Berikut fungsi serupa yang kita jalankan dengan tiga macam argumen:

php
<?php

function gandakan(int $angka): int
{
    return $angka * 2;
}

echo gandakan(21), "\n";
echo gandakan("42"), "\n";          // string numerik dikonversi otomatis
echo gandakan("dua puluh satu"), "\n"; // string non-numerik: gagal

Output yang Dihasilkan:

text
42
84

Fatal error: Uncaught TypeError: gandakan(): Argument #1 ($angka) must be of type int, string given, called in /tmp/contoh.php on line 10 and defined in /tmp/contoh.php:3

Program berhenti setelah dua baris pertama: argumen 21 diterima langsung, argumen string numerik "42" dikonversi menjadi 42 oleh mode coercion PHP, sedangkan string non-numerik "dua puluh satu" tidak bisa dikonversi sehingga PHP melempar TypeError. Dokumentasi type declaration PHP merinci seluruh aturan konversi tersebut.

Tipe Data di Kode Laravel #

Dua tempat di mana tipe data langsung terlihat saat kita membaca aplikasi Laravel: signature controller dan atribut model Eloquent. Signature controller memberi tahu framework tipe apa saja yang dikirim dan dikembalikan:

php
// app/Http/Controllers/TugasController.php — contoh tampilan

public function simpan(Request $request, int $proyekId): RedirectResponse
{
    $judul = $request->input("judul");   // string
    $selesai = false;                     // bool
    $durasi = $request->integer("durasi"); // int

    return redirect()->route("tugas.index");
}

Contoh di atas tidak kita jalankan karena membutuhkan aplikasi Laravel utuh, tetapi polanya mudah dibaca: parameter $proyekId bertipe int diisi otomatis dari segmen URL, dan method tersebut mengembalikan RedirectResponse. Pada model Eloquent, method casts() mengatur bagaimana kolom database dikonversi menjadi tipe PHP — misalnya kolom selesai dari SQLite menjadi bool, bukan string "1".

Dengan bekal variabel bertipe ini, kita siap membaca ekspresi yang menggabungkan nilai-nilai tersebut — operator PHP modern yang menyusun logika Laravel adalah topik chapter berikutnya.