mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-24 18:11:38 +00:00
849 lines
21 KiB
Markdown
849 lines
21 KiB
Markdown
---
|
|
language: PHP
|
|
contributors:
|
|
- ["Malcolm Fell", "http://emarref.net/"]
|
|
- ["Trismegiste", "https://github.com/Trismegiste"]
|
|
filename: learnphp-id.php
|
|
translators:
|
|
- ["Ahmad Zafrullah", "https://github.com/23Pstars"]
|
|
lang: id-id
|
|
---
|
|
|
|
Dokumen ini menjelaskan tentang PHP5 keatas.
|
|
|
|
```php
|
|
<?php // Skrip PHP harus diawali dengan tag <?php
|
|
|
|
// Jika dokumen PHP hanya mengandung kode PHP, sebaiknya tidak menggunakan
|
|
// tag penutup PHP untuk menghindari ketidaksengajaan tampilnya sesuatu.
|
|
|
|
// Dua garis miring diawal digunakan untuk komentar satu baris.
|
|
|
|
/*
|
|
Membatasi teks dalam garis miring-bintang dan bintang-garis miring
|
|
membuat komentar untuk banyak-baris sekaligus.
|
|
*/
|
|
|
|
// Gunakan "echo" or "print" untuk menampilkan sesuatu
|
|
print('Halo '); // Menampilkan "Halo " tanpa baris baru
|
|
|
|
// () boleh tidak digunakan dalam menggunakan "print" dan "echo"
|
|
echo "Dunia\n"; // Menampilkan "Dunia" dengan baris baru
|
|
// (semua perintah harus diakhiri dengan titik koma)
|
|
|
|
// Apapun yang berada diluar tag <?php akan ditampilkan secara otomatis
|
|
?>
|
|
Halo Dunia, lagi!
|
|
<?php
|
|
|
|
|
|
/************************************
|
|
* Tipe Data & Variabel
|
|
*/
|
|
|
|
// Variabel diawali dengan simnbol $.
|
|
// Nama variabel yang benar diawali dengan huruf atau garis-bawah,
|
|
// diikuti dengan beberapa huruf, angka, dan garis-bawah lainnya.
|
|
|
|
// Nilai Boolean adalah case-insensitive
|
|
$boolean = true; // atau TRUE atau True
|
|
$boolean = false; // atau FALSE atau False
|
|
|
|
// Nilai Integer
|
|
$int1 = 12; // => 12
|
|
$int2 = -12; // => -12
|
|
$int3 = 012; // => 10 (awalan 0 menandakan bilangan Oktal)
|
|
$int4 = 0x0F; // => 15 (awalan 0x menandakan bilangan Heksadesimal)
|
|
// Bilangan Biner Integer tersedia mulai dari PHP 5.4.0.
|
|
$int5 = 0b11111111; // 255 (awalan 0b menandakan bilangan Biner)
|
|
|
|
// Nilai Floats (dikenal juga sebagai Doubles)
|
|
$float = 1.234;
|
|
$float = 1.2e3;
|
|
$float = 7E-10;
|
|
|
|
// Menghapus variable
|
|
unset($int1);
|
|
|
|
// Aritmatika
|
|
$jumlah = 1 + 1; // 2
|
|
$selisih = 2 - 1; // 1
|
|
$perkalian = 2 * 2; // 4
|
|
$pembagian = 2 / 1; // 2
|
|
|
|
// Aritmatika singkat
|
|
$angka = 0;
|
|
$angka += 1; // Menjumlahkan $angka dengan 1
|
|
echo $angka++; // Menampilkan 1 (dijumlahkan dengan 1 setelah ditampilkan)
|
|
echo ++$angka; // Menampilkan 3 (dijumlahkan dengan 1 sebelum ditampilkan)
|
|
$angka /= $float; // Membagi dan menyimpan hasil pembagian pada $angka;
|
|
|
|
// String biasanya diawali dan ditutup dengan petik satu.
|
|
$sgl_quotes = '$String'; // => '$String'
|
|
|
|
// Hindari menggunakan petik dua kecuali menyertakan variabel lain
|
|
$dbl_quotes = "Ini adalah $sgl_quotes."; // => 'Ini adalah $String.'
|
|
|
|
// Karakter khusus hanya berlaku pada petik dua
|
|
$berfungsi = "Ini mengandung \t karakter tab.";
|
|
$tidak_berfungsi = 'Ini hanya mengandung garis miring dan huruf t: \t';
|
|
|
|
// Batasi variabel dengan kurung kurawal jika diperlukan
|
|
$uang = "Saya memiliki $${angka} di Bank.";
|
|
|
|
// Sejak PHP 5.3, nowdocs dapat digunakan untuk tak-terinterpolasi banyak-baris
|
|
$nowdoc = <<<'END'
|
|
Banyak baris
|
|
string
|
|
END;
|
|
|
|
// Heredocs akan melakukan interpolasi
|
|
$heredoc = <<<END
|
|
Banyak baris
|
|
$sgl_quotes
|
|
END;
|
|
|
|
// Menyambung string dapat dilakukan menggunakan .
|
|
echo 'String ini ' . 'tersambung';
|
|
|
|
// String dapat dijadikan parameter pada "echo"
|
|
echo 'Banyak', 'Parameter', 'String'; // Menampilkan 'BanyakParameterString'
|
|
|
|
|
|
/********************************
|
|
* Konstan
|
|
*/
|
|
|
|
// Sebuah konstan didifinisikan menggunakan fungsi define()
|
|
// dan tidak bisa diganti/rubah selama program berjalan!
|
|
|
|
// Nama konstan yang benar diawali dengan huruf dan garis-bawah,
|
|
// diikuti dengan beberapa huruf, angka, atau garis-bawah.
|
|
define("FOO", "sesuatu");
|
|
|
|
// Mengakses konstan memungkinkan untuk dapat dipanggil tanpa menggunakan simbol $
|
|
echo FOO; // Menampilkan 'sesuatu'
|
|
echo 'Keluaran ini adalah ' . FOO; // Menampilkan 'Keluaran ini adalah sesuatu'
|
|
|
|
|
|
|
|
/********************************
|
|
* Larik (Array)
|
|
*/
|
|
|
|
// Semua larik dalam PHP bersifat asosiatif (saling berhubungan).
|
|
|
|
// Berfungsi pada semua versi PHP
|
|
$asosiatif = array('Satu' => 1, 'Dua' => 2, 'Tiga' => 3);
|
|
|
|
// Pada PHP 5.4 diperkenalkan cara penulisan (sintaks) baru
|
|
$asosiatif = ['Satu' => 1, 'Dua' => 2, 'Tiga' => 3];
|
|
|
|
echo $asosiatif['Satu']; // menampilkan 1
|
|
|
|
// Daftar literal secara tidak langsung ditentukan oleh kunci integer
|
|
$larik = ['Satu', 'Dua', 'Tiga'];
|
|
echo $larik[0]; // => "Satu"
|
|
|
|
// Menambahkan sebuah elemen pada akhir larik
|
|
$larik[] = 'Empat';
|
|
// atau
|
|
array_push($larik, 'Lima');
|
|
|
|
// Menghapus elemen dari larik
|
|
unset($larik[3]);
|
|
|
|
/********************************
|
|
* Keluaran
|
|
*/
|
|
|
|
echo('Halo Dunia!');
|
|
// Menampilkan Halo Dunia! ke "stdout".
|
|
// "stdout" adalah sebuah halaman web ketika dijalankan dalam peramban (browser).
|
|
|
|
print('Halo Dunia!'); // Sama seperti "echo"
|
|
|
|
// "echo" dan "print" merupakan bahasa konstruksi, jadi tanda kurung dapat dihilangkan
|
|
echo 'Halo Dunia!';
|
|
print 'Halo Dunia!';
|
|
|
|
$paragraf = 'paragraf';
|
|
|
|
echo 100; // Menampilkan variabel skalar secara langsung
|
|
echo $paragraf; // atau sebuat variabel
|
|
|
|
// Jika PHP tag-singkat telah dikonfigurasi, atau versi PHP yang digunakan
|
|
// adalah 5.4.0 keatas, dapat digunakan sintaks "echo" singkat
|
|
|
|
?>
|
|
<p><?= $paragraf ?></p>
|
|
<?php
|
|
|
|
$x = 1;
|
|
$y = 2;
|
|
$x = $y; // $x sekarang berisi nilai yang sama dengan $y
|
|
$z = &$y;
|
|
// $z sekarang berisi referensi ke $y. Mengubah nilai dari $z
|
|
// akan mengubah nilai dari $y juga, begitupun sebaliknya.
|
|
// $x tetap tidak berubah sebagaimana nilai asli dari $y
|
|
|
|
echo $x; // => 2
|
|
echo $z; // => 2
|
|
$y = 0;
|
|
echo $x; // => 2
|
|
echo $z; // => 0
|
|
|
|
// Menampilkan tipe dan nilai dari variabel ke "stdout"
|
|
var_dump($z); // prints int(0)
|
|
|
|
// Menampilkan variabel ke "stdout" dalam format yang mudah dibaca
|
|
print_r($larik); // menampilkan: Array ( [0] => Satu [1] => Dua [2] => Tiga )
|
|
|
|
/********************************
|
|
* Logika
|
|
*/
|
|
$a = 0;
|
|
$b = '0';
|
|
$c = '1';
|
|
$d = '1';
|
|
|
|
// menegaskan lemparan sebuah peringatan jika pernyataan tidak benar
|
|
|
|
// Perbandingan berikut akan selalu benar, meskipun memiliki tipe yang berbeda.
|
|
assert($a == $b); // kesamaan
|
|
assert($c != $a); // ketidak-samaan
|
|
assert($c <> $a); // versi lain dari ketidak-samaan
|
|
assert($a < $c);
|
|
assert($c > $b);
|
|
assert($a <= $b);
|
|
assert($c >= $d);
|
|
|
|
// Dibawah ini hanya akan bernilai benar jika nilainya memiliki tipe yang sama.
|
|
assert($c === $d);
|
|
assert($a !== $d);
|
|
assert(1 === '1');
|
|
assert(1 !== '1');
|
|
|
|
// Operator 'Spaceship' (sejak PHP 7)
|
|
// Mengembalikan 0 jika nilai pada kedua sisi adalah sama
|
|
// Mengembalikan 1 jika nilai pada sisi kiri lebih besar
|
|
// Mengembalikan -1 jika nilai pada sisi kanan lebih besar
|
|
|
|
$a = 100;
|
|
$b = 1000;
|
|
|
|
echo $a <=> $a; // 0 karena keduanya sama
|
|
echo $a <=> $b; // -1 karena $a < $b
|
|
echo $b <=> $a; // 1 karena $b > $a
|
|
|
|
// Variabel dapat dikonversi menjadi tipe lain, sesuai penggunaannya.
|
|
|
|
$integer = 1;
|
|
echo $integer + $integer; // => 2
|
|
|
|
$string = '1';
|
|
echo $string + $string; // => 2 (string dipaksa menjadi integer)
|
|
|
|
$string = 'satu';
|
|
echo $string + $string; // => 0
|
|
// Menghasilkan 0 karena operator (+) tidak dapat memaksa string 'satu' menjadi sebuah integer
|
|
|
|
// Perubahan tipe dapat dimanfaatkan untuk diperlakukan sebagai tipe lainnya
|
|
|
|
$boolean = (boolean) 1; // => true
|
|
|
|
$nol = 0;
|
|
$boolean = (boolean) $nol; // => false
|
|
|
|
// Terdapat juga fungsi khusus untuk melakukan perubahan terhadap beberapa tipe
|
|
$integer = 5;
|
|
$string = strval($integer);
|
|
|
|
$var = null; // Nilai Null
|
|
|
|
|
|
/********************************
|
|
* Struktur Kontrol
|
|
*/
|
|
|
|
if (true) {
|
|
print 'Saya tampil';
|
|
}
|
|
|
|
if (false) {
|
|
print 'Saya tidak tampil';
|
|
} else {
|
|
print 'Saya tampil';
|
|
}
|
|
|
|
if (false) {
|
|
print 'Tidak tampil';
|
|
} elseif(true) {
|
|
print 'Tampil';
|
|
}
|
|
|
|
// operator ternary
|
|
print (false ? 'Tidak tampil' : 'Tampil');
|
|
|
|
// cara pintas operator ternary mulai dirilis sejak PHP 5.3
|
|
// persamaan dari "$x ? $x : 'Kerjakan'"
|
|
$x = false;
|
|
print($x ?: 'Kerjakan');
|
|
|
|
// operator null coalesce sejak PHP 7
|
|
$a = null;
|
|
$b = 'Ditampilkan';
|
|
echo $a ?? 'a belum di-set'; // menampilkan 'a belum di-set'
|
|
echo $b ?? 'b belum di-set'; // menampilkan 'Ditampilkan'
|
|
|
|
|
|
$x = 0;
|
|
if ($x === '0') {
|
|
print 'Tidak ditampilkan';
|
|
} elseif($x == '1') {
|
|
print 'Tidak ditampilkan';
|
|
} else {
|
|
print 'Tampil';
|
|
}
|
|
|
|
|
|
// Alternatif sintaks untuk kebutuhan templat:
|
|
?>
|
|
|
|
<?php if ($x): ?>
|
|
Ini ditampilkan jika pengujian benar.
|
|
<?php else: ?>
|
|
Selain tersebut ini yang akan ditampilkan.
|
|
<?php endif; ?>
|
|
|
|
<?php
|
|
|
|
// Gunakan "switch" untuk menghemat logika.
|
|
switch ($x) {
|
|
case '0':
|
|
print 'Switch mendukung tipe paksaan';
|
|
break; // Kata kunci "break" harus disertakan, jika tidak
|
|
// maka logika tersebut akan berlanjut ke bagian "dua" dan "tiga"
|
|
case 'dua':
|
|
case 'tiga':
|
|
// Lakukan sesuatu jika $x bernilai "dua" atau "tiga"
|
|
break;
|
|
default:
|
|
// Aksi cadangan
|
|
}
|
|
|
|
// "while", "do...while" dan perulangan "for"
|
|
$i = 0;
|
|
while ($i < 5) {
|
|
echo $i++;
|
|
}; // Menampilkan "01234"
|
|
|
|
echo "\n";
|
|
|
|
$i = 0;
|
|
do {
|
|
echo $i++;
|
|
} while ($i < 5); // Menampilkan "01234"
|
|
|
|
echo "\n";
|
|
|
|
for ($x = 0; $x < 10; $x++) {
|
|
echo $x;
|
|
} // Menampilkan "0123456789"
|
|
|
|
echo "\n";
|
|
|
|
$roda = ['sepeda' => 2, 'mobil' => 4];
|
|
|
|
// Perulangan "foreach" dapat melakukan iterasi pada larik (array)
|
|
foreach ($roda as $jumlah_roda) {
|
|
echo $jumlah_roda;
|
|
} // Menampilkan "24"
|
|
|
|
echo "\n";
|
|
|
|
// Iterasi dapat dilakukan terhadap "key" (kunci) dan "value" (nilai)
|
|
foreach ($roda as $mesin => $jumlah_roda) {
|
|
echo "$mesin memiliki $jumlah_roda buah roda";
|
|
}
|
|
|
|
echo "\n";
|
|
|
|
$i = 0;
|
|
while ($i < 5) {
|
|
if ($i === 3) {
|
|
break; // Menghentikan proses perulangan
|
|
}
|
|
echo $i++;
|
|
} // Menampilkan "012"
|
|
|
|
for ($i = 0; $i < 5; $i++) {
|
|
if ($i === 3) {
|
|
continue; // Melewati tahapan iterasi saat ini
|
|
}
|
|
echo $i;
|
|
} // Menampilkan "0124"
|
|
|
|
|
|
/********************************
|
|
* Fungsi
|
|
*/
|
|
|
|
// Fungsi didefinisikan dengan "function":
|
|
function fungsi_saya () {
|
|
return 'Halo';
|
|
}
|
|
|
|
echo fungsi_saya(); // => "Halo"
|
|
|
|
// Nama fungsi yang baik dan benar diawali dengan sebuah huruf atau garis-bawah, diikuti oleh
|
|
// beberapa huruf, angka, atau garis-bawah.
|
|
|
|
function jumlah ($x, $y = 1) { // $y merupakan opsional, jika tidak ditentukan akan bernilai 1
|
|
$hasil = $x + $y;
|
|
return $hasil;
|
|
}
|
|
|
|
echo jumlah(4); // => 5
|
|
echo jumlah(4, 2); // => 6
|
|
|
|
// $hasil tidak dapat diakses dari luar fungsi
|
|
// print $hasil; // Akan menghasilkan sebuah "warning".
|
|
|
|
// Sejak PHP 5.3 fungsi dapat dideklarasikan menjadi tanpa-nama (anonymous);
|
|
$inc = function ($x) {
|
|
return $x + 1;
|
|
};
|
|
|
|
echo $inc(2); // => 3
|
|
|
|
function foo ($x, $y, $z) {
|
|
echo "$x - $y - $z";
|
|
}
|
|
|
|
// Fungsi dapat mengembalikan fungsi juga
|
|
function bar ($x, $y) {
|
|
// Gunakan "use" untuk mengakses variabel diluar fungsi
|
|
return function ($z) use ($x, $y) {
|
|
foo($x, $y, $z);
|
|
};
|
|
}
|
|
|
|
$bar = bar('A', 'B');
|
|
$bar('C'); // Menampilkan "A - B - C"
|
|
|
|
// Fungsi uang memiliki nama dapat dipanggil berdasarkan string
|
|
$nama_fungsi = 'jumlah';
|
|
echo $nama_fungsi(1, 2); // => 3
|
|
// Bermanfaat untuk menentukan fungsi mana yang akan dipanggil secara dinamis.
|
|
// Atau, dapat juga menggunakan fungsi call_user_func(callable $callback [, $parameter [, ... ]]);
|
|
|
|
// Akses semua parameter yang dikirim ke sebuah fungsi
|
|
function parameter() {
|
|
$jumlah_param = func_num_args();
|
|
if( $jumlah_param > 0 ) {
|
|
echo func_get_arg(0) . ' | ';
|
|
}
|
|
$daftar_param = func_get_args();
|
|
foreach( $daftar_param as $kunci => $param ) {
|
|
echo $kunci . ' - ' . $param . ' | ';
|
|
}
|
|
}
|
|
|
|
parameter('Halo', 'Dunia'); // Halo | 0 - Halo | 1 - Dunia |
|
|
|
|
// Sejak PHP 5.6, mendapatkan jumlah variabel yang ada pada parameter
|
|
function variabel($kata, ...$daftar) {
|
|
echo $kata . " || ";
|
|
foreach ($daftar as $item) {
|
|
echo $item . ' | ';
|
|
}
|
|
}
|
|
|
|
variable("Pemisah", "Halo", "Dunia") // Pemisah || Halo | Dunia |
|
|
|
|
/********************************
|
|
* Penyertaan ("include")
|
|
*/
|
|
|
|
<?php
|
|
// Skrip PHP yang berada dalam dokumen "include" juga harus dibuka dengan tag PHP.
|
|
|
|
include 'dokumen-saya.php';
|
|
// Kode yang ada dalam dokumen-saya.php sekarang dapat diakses dari cakupan saat ini.
|
|
// Jika dokumen tidak dapat disertakan (include, seperti dokumen tidak ditemukan), maka pesan peringatan akan muncul.
|
|
|
|
include_once 'dokumen-saya.php';
|
|
// Jika dokumen-saya telah disertakan (include) oleh perintah sebelumnya, maka
|
|
// dokumen tersebut tidak akan disertakan lagi. Ini bertujuan untuk menghindari kesalahan
|
|
// yang diakibatkan oleh deklarasi ganda.
|
|
|
|
require 'dokumen-saya.php';
|
|
require_once 'dokumen-saya.php';
|
|
// Memiliki fungsi yang sama dengan "include", namun jika dokumen tidak ditemukan
|
|
// atau tidak dapat disertakan maka akan menghasilkan pesan kesalahan fatal.
|
|
|
|
// Isi dari dokumen-saya.php:
|
|
<?php
|
|
|
|
return 'Apapun yang kamu suka.';
|
|
// akhir dari dokumen
|
|
|
|
// "include" dan "require" dapat mengembalikan sebuah nilai.
|
|
$nilai = include 'dokumen-saya.php';
|
|
|
|
// Dokumen akan disertakan berdasarkan lokasi direktori dokumen (file path) yang diberikan, jika tidak didefinisikan
|
|
// maka akan digunakan konfigurasi dari "include_path". Jika dokumen tidak ditemukan dalam "include_path",
|
|
// fungsi include akan melakukan pengecekan pada direktori yang sama dengan dokumen yang menggunakan fungsi include tersebut,
|
|
// jika tidak ditemukan juga maka pesan gagal akan dimunculkan.
|
|
/* */
|
|
|
|
/********************************
|
|
* Kelas (class)
|
|
*/
|
|
|
|
// Kelas didefinisikan dengan kata "class"
|
|
|
|
class KelasSaya
|
|
{
|
|
const NILAI_KONSTAN = 'nilai'; // Sebuah konstan
|
|
|
|
static $nilaiStatis = 'statis';
|
|
|
|
// Variabel statis dan hak jenis aksesnya
|
|
public static $variabelStatisPublik = 'nilaiStatisPublik';
|
|
// Hanya dapat diakses dalam kelas
|
|
private static $variabelStatisPrivat = 'nilaiStatisPrivat';
|
|
// Dapat diakses dalam kelas dan kelas turunan
|
|
protected static $variabelStatisTerlindungi = 'nilaiStatisTerlindungi';
|
|
|
|
// Properti harus mendeklarasikan hak aksesnya
|
|
public $properti = 'publik';
|
|
public $PropertiInstansi;
|
|
protected $variabel = 'terlindungi'; // Dapat diakses dari kelas itu sendiri dan kelas turunannya
|
|
private $variabel = 'tersembunyi'; // Hanya dapat diakses dari kelas itu sendiri
|
|
|
|
// Membuat konstruktor dengan perintah __construct
|
|
public function __construct($PropertiInstansi) {
|
|
// Akses variabel instansi menggunakan perintah $this
|
|
$this->PropertiInstansi = $PropertiInstansi;
|
|
}
|
|
|
|
// Method dideklarasikan sebagai fungsi didalam kelas
|
|
public function methodSaya()
|
|
{
|
|
print 'KelasSaya';
|
|
}
|
|
|
|
// Perintah "final" membuat sebuah fungsi tidak dapat di-override oleh kelas turunannya
|
|
final function tidakDapatDiOverride()
|
|
{
|
|
}
|
|
|
|
/*
|
|
* Deklarasi properti atau method pada kelas sebagai statis membuat properti atau method tersebut
|
|
* dapat diakses tanpa melakukan instansiasi kelas. Properti statis tidak dapat diakses melalui
|
|
* objek kelas yang hasil instansiasi, sedangkan method statis bisa.
|
|
*/
|
|
|
|
public static function methodStatisSaya()
|
|
{
|
|
print 'Saya adalah statis';
|
|
}
|
|
}
|
|
|
|
// Konstan pada kelas dapat diakses secara statis
|
|
echo KelasSaya::NILAI_KONSTAN; // Menampilkan 'nilai'
|
|
|
|
echo KelasSaya::$nilaiStatis; // Menampilkan 'statis'
|
|
KelasSaya::methodStatisSaya(); // Menampilkan 'Saya adalah statis'
|
|
|
|
// Instansi kelas menggunakan perintah "new"
|
|
$kelas_saya = new KelasSaya('Sebuah properti instansiasi');
|
|
// Tanda kurung adalah opsional jika tidak ingin menggunakan argumen.
|
|
|
|
// Akses anggota kelas menggunakan ->
|
|
echo $kelas_saya->properti; // => "publik"
|
|
echo $kelas_saya->propertiInstansi; // => "Sebuah properti instansi"
|
|
$kelas_saya->methodSaya(); // => "KelasSaya"
|
|
|
|
// Menurunkan kelas menggunakan kata kunci "extends"
|
|
class KelasSayaLainnya extends KelasSaya
|
|
{
|
|
function tampilkanPropertiTerlindungi()
|
|
{
|
|
echo $this->properti;
|
|
}
|
|
|
|
// "override" terhadap sebuah method
|
|
function methodSaya()
|
|
{
|
|
parent::methodSaya();
|
|
print ' > KelasSayaLainnya';
|
|
}
|
|
}
|
|
|
|
$kelas_saya_lainnya = new KelasSayaLainnya('Instansiasi properti');
|
|
$kelas_saya_lainnya->tampilkanPropertiTerlindung(); // => Menampilkan "terlindungi"
|
|
$kelas_saya_lainnya->methodSaya(); // Menampilkan "KelasSaya > KelasSayaLainnya"
|
|
|
|
final class SayaTidakBisaDiturunkan
|
|
{
|
|
}
|
|
|
|
// Gunakan method ajaib (magic method) untuk membuat fungsi "getters" dan "setters"
|
|
class PetaKelasSaya
|
|
{
|
|
private $properti;
|
|
|
|
public function __get($key)
|
|
{
|
|
return $this->$key;
|
|
}
|
|
|
|
public function __set($key, $value)
|
|
{
|
|
$this->$key = $value;
|
|
}
|
|
}
|
|
|
|
$x = new PetaKelasSaya();
|
|
echo $x->properti; // akan memanggil method __get()
|
|
$x->properti = 'Sesuatu'; // akan memanggil method __set();
|
|
|
|
// Kelas dapat dijadikan abstrak (menggunakan kata kunci "abstract"), atau
|
|
// meng-implementasikan interfaces (menggunakan kata kunci "implements").
|
|
// Sebuah interface dideklarasikan dengan perintah "interface".
|
|
|
|
interface InterfaceSatu
|
|
{
|
|
public function kerjakanSesuatu();
|
|
}
|
|
|
|
interface InterfaceDua
|
|
{
|
|
public function kerjakanYangLain();
|
|
}
|
|
|
|
// interface dapat diturunkan
|
|
interface InterfaceTiga extends InterfaceDua
|
|
{
|
|
public function kerjakanYangBerbeda();
|
|
}
|
|
|
|
abstract class KelasAbstrakSaya implements InterfaceSatu
|
|
{
|
|
public $x = 'kerjakanSesuatu';
|
|
}
|
|
|
|
class KelasKongkritSaya extends KelasAbstrakSaya implements InterfaceTwo
|
|
{
|
|
public function kerjakanSesuatu()
|
|
{
|
|
echo $x;
|
|
}
|
|
|
|
public function kerjakanYangLain()
|
|
{
|
|
echo 'kerjakanYangLain';
|
|
}
|
|
}
|
|
|
|
// Kelas dapat diimplementasikan pada banyak interface
|
|
class KelasLainnya implements InterfaceSatu, InterfaceDua
|
|
{
|
|
public function kerjakanSesuatu()
|
|
{
|
|
echo 'kerjakanSesuatu';
|
|
}
|
|
|
|
public function kerjakanYangLain()
|
|
{
|
|
echo 'kerjakanYangLain';
|
|
}
|
|
}
|
|
|
|
|
|
/********************************
|
|
* Sifat (Traits)
|
|
*/
|
|
|
|
// Traits mulai tersedia sejak PHP 5.4.0 dan dideklarasikan menggunakan kata kunci "trait"
|
|
|
|
trait TraitSaya
|
|
{
|
|
public function methodTraitSaya()
|
|
{
|
|
print 'Saya menggunakan Trait';
|
|
}
|
|
}
|
|
|
|
class KelasTraitSaya
|
|
{
|
|
use TraitSaya;
|
|
}
|
|
|
|
$kls = new KelasTraitSaya();
|
|
$kls->methodTraitSaya(); // menampilkan "Saya menggunakan Trait"
|
|
|
|
|
|
/********************************
|
|
* Namespaces
|
|
*/
|
|
|
|
// Bagian ini telah dibatasi, karena deklarasi "namespace"
|
|
// karena harus ditempatkan diawal dokumen.
|
|
|
|
<?php
|
|
|
|
// Secara default, kelas tersedia sebagai namespace umum, dan dapat
|
|
// secara khusus dipanggil dengan garis-miring terbalik (backslash).
|
|
|
|
$kls = new \KelasSaya();
|
|
|
|
|
|
// Menentukan namespace untuk sebuah dokumen
|
|
namespace Saya\Namespace;
|
|
|
|
class KelasSaya
|
|
{
|
|
}
|
|
|
|
// (dari dokumen lainnya)
|
|
$kls = new Saya\Namespace\KelasSaya;
|
|
|
|
// Atau dari dalam namespace lainnya.
|
|
namespace Saya\Lainnya\Namespace;
|
|
|
|
use Saya\Namespace\KelasSaya;
|
|
|
|
$kls = new KelasSaya();
|
|
|
|
// Namespace dapat menggunakan alias
|
|
|
|
namespace Saya\Lainnya\Namespace;
|
|
|
|
use Saya\Namespace as SuatuKelasLainnya;
|
|
|
|
$kls = new SuatuKelasLainnya\KelasSaya();
|
|
|
|
|
|
/**********************
|
|
* Late Static Binding
|
|
*
|
|
*/
|
|
|
|
class KelasInduk {
|
|
public static function siapa() {
|
|
echo "Ini adalah " . __CLASS__ . "\n";
|
|
}
|
|
public static function coba() {
|
|
// kata kunci "self" merujuk pada method yang berada dalam satu kelas
|
|
self::who();
|
|
// kata kunci "static" merujuk pada method yang berada di kelas dimana method itu dijalankan
|
|
static::who();
|
|
}
|
|
}
|
|
|
|
KelasInduk::coba();
|
|
/*
|
|
Ini adalah KelasInduk
|
|
Ini adalah KelasInduk
|
|
*/
|
|
|
|
class KelasAnak extends KelasInduk {
|
|
public static function siapa() {
|
|
echo "Tapi ini adalah " . __CLASS__ . "\n";
|
|
}
|
|
}
|
|
|
|
KelasAnak::tes();
|
|
/*
|
|
Ini adalah KelasInduk
|
|
Tapi ini adalah KelasAnak
|
|
*/
|
|
|
|
/**********************
|
|
* Magic constants
|
|
*
|
|
*/
|
|
|
|
// Mendapatkan nama dari suatu kelas. Harus dideklarasikan didalam kelas tersebut.
|
|
echo "Nama kelas ini adalah " . __CLASS__;
|
|
|
|
// Mendapatkan alamat lengkap direktori
|
|
echo "Alamat direktori ini adalah " . __DIR__;
|
|
|
|
// Beberapa yang banyak digunakan
|
|
require __DIR__ . '/vendor/autoload.php';
|
|
|
|
// Mendapatkan alamat lengkap dokumen
|
|
echo "Alamat dokumen ini adalah " . __FILE__;
|
|
|
|
// Mendapatkan nama fungsi
|
|
echo "Nama fungsi ini adalah " . __FUNCTION__;
|
|
|
|
// Mendapatkan nomor baris perintah
|
|
echo "Nomor baris perintah ini adalah " . __LINE__;
|
|
|
|
// Mendapatkan nama method. Hanya mengembalikan sebuah nilai jika berada didalam trait atau deklarasi objek.
|
|
echo "Nama method ini adalah " . __METHOD__;
|
|
|
|
// Mendapatkan nama namespace
|
|
echo "Namespace saat ini adalah " . __NAMESPACE__;
|
|
|
|
// Mendapatkan nama dari trait. Hanya mengembalikan sebuah nilai jika berada didalam trait atau deklarasi objek.
|
|
echo "Namespace saat ini adalah " . __TRAIT__;
|
|
|
|
/**********************
|
|
* Penanganan Kesalahan (Error)
|
|
*
|
|
*/
|
|
|
|
// Penanganan error sederhana menggunakan "try...catch"
|
|
|
|
try {
|
|
// Kerjakan sesuatu
|
|
} catch (Exception $e) {
|
|
// Penanganan exception
|
|
}
|
|
|
|
// Menggunakan "try...catch" blok pada namespace
|
|
|
|
try {
|
|
// Kerjakan sesuatu
|
|
} catch (\Exception $e) {
|
|
// Penanganan exception
|
|
}
|
|
|
|
// Exception khusus
|
|
|
|
class ExceptionSaya extends Exception {}
|
|
|
|
try {
|
|
|
|
$kondisi = true;
|
|
|
|
if ($kondisi) {
|
|
throw new ExceptionSaya('Terjadi sesuatu');
|
|
}
|
|
|
|
} catch (ExceptionSaya $e) {
|
|
// Penanganan untuk exception khusus
|
|
}
|
|
|
|
```
|
|
|
|
## Informasi lainnya
|
|
|
|
Kunjungi [Dokumentasi resmi PHP](http://www.php.net/manual/) untuk referensi dan masukan komunitas.
|
|
|
|
Jika anda tertarik untuk belajar lebih dalam, kunjungi
|
|
[PHP The Right Way](http://www.phptherightway.com/).
|
|
|
|
Jika anda terbiasa dengan manajemen paket, kunjungi
|
|
[Composer](http://getcomposer.org/).
|
|
|
|
Untuk standar umum, kunjungi PHP Framework Interoperability Group's
|
|
[PSR standards](https://github.com/php-fig/fig-standards).
|