BAB I: PHP Sebagai Bahasa Pemrograman Web

(Ditulis pada Jum’at 28 Juli 2006 @ 21:09)

Pada bab ini akan dijelaskan tentang dasar-dasar PHP sebagai bahasa pemrograman web. Jika anda telah mengetahui tentang dasar-dasar PHP dan telah paham penggunaan PHP sebagai bahasa pemrograman web, maka anda dapat langsung loncat ke BAB II yang akan membahas tentang variabel, array dan tipe data di PHP. Tetapi jika anda baru dan belum mengetahui tentang PHP, maka bab ini memang untuk anda.

Setelah selesai membaca bab ini, anda akan memiliki pengetahuan tentang:

  • PHP sebagai sebuah bahasa pemrograman web

  • Cara membuat script dasar PHP

  • Cara menyisipkan PHP ke dalam HTML

  1. Apa itu PHP?

Apa itu PHP? PHP merupakan sebuah bahasa pemrograman open source yang banyak digunakan khususnya pada aplikasi-aplikasi berbasis web. PHP dapat disisipkan di dalam script HTML. PHP sendiri merupakan kependekan dari

“PHP:Hypertext Preprocessor”.

Berikut ini adalah salah satu contoh script PHP yang disisipkan di dalam sebuah script HTML.

echo “Hallo, ini adalah script PHP!!”;

?>

Pada contoh diatas dapat dilihat bahwa script PHP dapat disisipkan ke dalam HTML. Hal ini tentu saja berbeda dengan bahasa script lain seperti halnya perl atau c yang memerlukan banyak perintah untuk menghasilkan sebuah output HTML.

Sebuah script PHP ditandai dengan sebuah tag awal dan tag akhir. Tag awal dari script PHP ditandai dengan tanda atau dan diakhiri dengan tanda ?>. Seluruh script yang berada di antara dua tag ini akan dianggap sebagai script PHP dan akan di proses oleh PHP Engine.

Perhatian: Pada beberapa sistem, tag short-tag) tidak diperbolehkan dan diharuskan menggunakan tag script PHP diawali dengan tag

Pada dunia pemrograman web, terdapat dua jenis script, yaitu server-side script dan client-side script. Server-side script merupakan script-script yang dijalankan di sisi server yang outputnya kemudian dikirimkan ke sisi client. Contoh server-side script adalah PHP, ASP, ASP.NET, Coldfusion dan lain-lain. Client-side script merupakan script-script yang dijalankan di sisi client. Contoh client-side script adalah JavaScript, VBScript.

PHP termasuk ke dalam bahasa server-side script. Hal ini berarti script-script yang dituliskan dan disisipkan ke dalam halaman HTML akan di proses di server baru kemudian outputnya dikirimkan ke client. Pada contoh diatas, output yang akan dihasilkan adalah sebuah halaman HTML yang berisi tulisan Hallo, ini adalah script PHP!!.

  1. Cara menjalankan PHP

Untuk dapat menjalankan sebuah script PHP, maka dibutuhkan sebuah web server, PHP engine dan sebuah web browser. Anda dapat menggunakan web server apache (http://www.apache.org) yang dapat anda download secara gratis. Sedangkan untuk PHP engine dapat di download di web site PHP (http://www.php.net). Aplikasi web browser dapat menggunakan web browser bawaan sistem operasi atau dapat juga menggunakan web browser firefox.

Proses installasi dan konfigurasi PHP tidak akan dibahas dalam tulisan ini. Anda dapat melihat file INSTALL maupun README dari masing-masing paket PHP & Web Browser untuk informasi bagaimana cara installasi dan konfigurasi PHP.

Berikut ini adalah script PHP pertama kita,

echo “Hallo, ini adalah script PHP!!”;

?>

Simpan script PHP ini dengan nama hello.php. Perlu diperhatikan bahwa ekstensi dari file script PHP ini haruslan .php. Setelah file ini disimpan dan web server dijalankan, buka web browser dan masukan alamat URL dari script ini. Jika file ini diletakkan di web server lokal pada direktori dasar, maka alamat untuk mengakses script ini ada di http://localhost/hello.php atau http://127.0.0.1/hello.php. Jika semua konfigurasi telah benar, maka anda akan melihat output dari script ini sebagai berikut.

Hallo, ini adalah script PHP!!

Script diatas adalah script sederhana yang hanya memanggil sebuah fungsi echo yang gunanya untuk menghasilkan output. Sampai diisini anda telah berhasil membuat sebuah script PHP sederhana, mari kita lanjutkan dengan membuat sebuah script PHP yang menghasilkan halaman informasi, yaitu halmaan PHP info. Cara membuatnya sangat sederhana, cukup panggil fungsi phpinfo() secara otomatis, PHP akan menghasilkan halaman informasi PHP yang dapat anda gunakan untuk melihat konfigurasi PHP anda.

phpinfo(); ?>

  1. Pemrograman Web Dinamis

Setelah tadi kita melihat kemampuan PHP dalam menghasilkan output HTML, sekarang kita akan melihat kemampuan PHP dalam membuat sebuah halaman dinamis. Pada sub bab ini akan dibuat sebuah script PHP yang akan meminta input nama pengguna. PHP kemudian akan menampilkan nama yang dimasukkan dan memberitahukan jenis browser yang digunakan oleh pengguna.

Pertama, untuk melakukan pengecekan jenis browser, kita dapat memeriksanya melalui informasi yang dikirim oleh browser kepada web server. Informasi ini dikirim sebagai bagian dari request HTTP (HTTP Requst). Informasi ini disimpan dalam sebuah variabel global. Variabel pada PHP dimulai dengan menggunakan tanda dollar. Variable yang akan kita gunakan untuk pengecekan jenis browser ini adalah variable

$_SERVER[‘HTTP_USER_AGENT’].

echo $_SERVER[‘HTTP_USER_AGENT’] ?>

Jika script diatas dieksekusi, maka akan menghasilkan output seperti dibawah ini.

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Dari contoh diatas, kita kemudian dapat melakukan pengecekan apakah seorang pengguna menggunakan web browser Internet Explorer atau lainnya. Pengecekan ini dapat dilakukan dengan menggunakan percabangan if..then..else... Fungsi yang digunakan untuk melakukan perbandingan string adalah dengan memanfaatkan fungsi strpos(). Fungsi strpos() ini merupakan fungsi yang disediakan oleh PHP untuk melakukan pencarian string di dalam string, dalam hal ini, kita akan mencari string MSIE dari variable $_SERVER[‘HTTP_USER_AGENT’]. Fungsi ini akan menghasilkan nilai true jika string yang dibandingkan terdapat dalam string sumber, dan akan menghasilkan nilai false jika tidak ditemukan.

Kedua, untuk mendapatkan input dari pengguna, kita dapat memanfaatkan HTML form. Pengguna akan mengisikan data pada HTML form yang kemudian data ini akan dikirim ke server. Data kemudian di proses di server dan dikembalikan ke web browser client dalam bentuk HTML yang telah di proses.

Berikut ini adalah contoh halaman input form HTML. Disini dapat dilihat bahwa kita akan menggunakan sebuah form yang jika tombol submit ditekan, maka data akan dikirimkan ke halaman proses.php.

Your name:

Setelah membuat file HTML ini, kita harus membuat file PHP yang akan menangani hasil input ini. Berikut adalah listing dari file proses.php yang digunakan untuk memproses input.

Hello echo $_GET[‘name’] ?>.

if (strpos($_SERVER[‘HTTP_USER_AGENT’], ‘MSIE’) !== FALSE) {

?>

You are using Microsoft Internet Explorer browser

} else {

?>

You are not using Microsoft Internet Explorer browser

}

?>

Pada saat file HTML diakses, pengguna akan dihadapkan pada sebuah textbox input yang menanyakan nama dari pengguna tersebut. Ketika tombol submit ditekan, maka web browser akan mengirimkan data nama pengguna ini ke halaman proses.php. Pada PHP, variabel dari form dapat diambil dengan menggunakan variabel global $_GET atau $_POST tergantung dari method yang digunakan oleh form tersebut ketika mengirimkan data. Pada contoh diatas, digunakan variabel $_GET[‘name’] karena form dikirimkan dengan method GET dan nama textbox yang digunakan sebagai input textbox bernama name.

Output dari contoh diatas jika kita menggunakan browser Internet Explorer dan mengisikan nama harry adalah sebagai berikut.

Hello harry.

You are using Microsoft Internet Explorer browser

Design Pattern

R&D sekarang lagi anget-angetnya ngomongin design pattern. Semua bermula dari ide untuk upgrade azFramework (telat banget yah, ngomongin design pattern setelah bikin framework). Gw sendiri udah buat sih draft specification-nya, cuman belum lengkap, masih lebih lengkap source-code-nya :D hehehehe. Menurut gw, seharusnya sebelum membangun sebuah framework kita musti ngerti dulu, minimal tau what the hell is design pattern? cuman berhubung kita lagi rush, jadi as usual, rush to code!!

ok, kalo gitu, dalam kesempatan kali ini gw mu bagi info sedikit tentang design pattern & resource yg bisa dikunjungin sebagai referensi.

Design patterns are recurring solutions to software design problems you find again and again in real-world application development. Patterns are about design and interaction of objects, as well as providing a communication platform concerning elegant, reusable solutions to commonly encountered programming challenges.

Salah satu foundation dari design pattern adalah The GoF (Gang of Four) patterns… berhubung gw belum baca, jadi untuk selanjutnya bisa liat langsung link-nya dibawah ini. Keren bo! cuman buat programmer PHP musti sedikit mikir, soalnya contohnya dalam bentuk C#.

http://www.dofactory.com/Patterns/Patterns.aspx
http://www.tml.tkk.fi/~pnr/Tik-76.278/gof/html/Observer.html

KEREEN InsyaAllah, ntar kita bahas satu-satu ya.. skalian bahas janji gw di posting sebelumnya, Fundamental OOP in PHP5

What’s New in PHP 5

Semalem nggak ada kerjaan, ngerjain dokumentasi udah beres sebagian, sisanya nggak bisa dikerjain pake open office, musti pake microsoft office. Berhubung gw gak punya microsoft office, ya udah, gw tinggalin dulu. Lalu gw buka folder buku, disitu ada beberapa buku yg belum gw baca. Salah satu yang menarik adalah PHP 5 Power Programming. Kebetulan masih anget bacaannya, jadi mau gw tulis disini, barangkali ada temen-temen yang kepingin migrate ke PHP5.

So, what’s new in PHP5? Mungkin ini yang kepikiran di benak kita waktu liat PHP5. Bedanya apa sih sama PHP4? Katanya PHP5 OOP-nya lebih bagus, apakah benar demikian? walaupun sekilas, mari kita coba kupas satu per satu. (most of this paper were taken from PHP5 Power Programming e-book).

The PHP5 New Object-Oriented Model
Ketika Zeev Zuraski menambahkan fitur object oriented pada PHP3 dahulu, penambahan tersebut hanyalah sebuah “pelengkap” bagi PHP3. Objek oriented model yang dibuat hanya mendukung inheritance dan menyatukan method dan property ke dalam sebuah class (atau object), tidak lebih. Ketika Zeev dan Andi Gutmans menulis ulang scripting engine pada PHP4, mereka menghasilkan sebuah scripting engine yang benar-benar baru, berjalan dengan lebih cepat dan lebih stabil serta memiliki banyak fungsi baru. Tetapi, Object Oriented Model yang dibawa dari PHP3 tidak banyak berubah.
Walaupun fasilitas OO di PHP4 ini sangat terbatas, tetapi hal ini tidak menyurutkan minat para developer untuk tetap menggunakan fasilitas OO di PHP4, bahkan pada project-project berskala besar/entrprise. Hal inilah yang kemudian dijadikan fokus pada pengembangan PHP5 untuk merancang ulang object oriented model PHP.

Fitur-fitur Object Oriented Baru Pada PHP5
Fitur-fitur OO baru pada PHP5 ini cukup banyak dan memerlukan pembahasan tersendiri. Pada kesempatan ini, gw hanya akan menjelaskan fitur-fitur utama object oriented dari PHP5. Selanjutnya, Insya Allah akan dibahas satu per satu pada posting berikutnya (doa’kan gw punya waktu buat nulis di blog ya :-p ).

Access modifier for methods and properties Fitur baru ini memberikan fasilitas access modifier bagi method dan property dengan akses public, protected dan private. Code snippets dari access modifier ini adalah sebagai berikut.
class MyClass {
  private $id = 18;

  public function getId() {
    return $this->id;
  }
}
Unified Constructor Name __construct() Pada PHP4, constructor ditulis dengan cara membuat sebuah method yang sama dengan nama classnya. Pada PHP5, constructor ini sekarang ditulis dengan keyword construct(). Code snippets-nya adalah sebagai berikut.
class MyClass {
  function <em></em>construct() {
    print "Inside of constructor";
  }
}
Support object destructor by defining a <em></em>destructor() method. Hal ini membuat kita dapat mendefinisikan destructor yang akan dipanggil ketika sebuah objek dihancurkan. Code snippets-nya adalah sebagai berikut.
class MyClass {
  function <em></em>destructor() {
    print "Inside of destructor";
  }
}
Interfaces Seperti halnya java, sebuah class dalam PHP hanya bisa diturunkan dari sebuah class, tetapi bisa mengimplementasikan banyak interface. Code snippets-nya adalah sebagai berikut.
interface Display() {
  function display();
}

class Circle implements Display {
  function display() {
    print "displaying circlen";
  }
}
instanceof operator Sekarang ada language level support untuk pengecekan bagi is-a relationship.
if ($obj instanceof Circle) {
  print '$obj is a circle';
}
Final Method Keyword final memungkinkan sebuah method tidak dapat di overload.
Class MyClass {
  final function getBaseClassName() {
    return <i>CLASS</i>;
  }
}
Final Classes Sebuah class yang di definisikan sebagai final class, tidak akan bisa di inherit. Contoh berikut akan berarkhir dengan error.
final class FinalClassKu {
}

class BogusClass extends FinalClassKu {
}
Explicit object clonning Untuk meng-clone sebuah object, digunakan keyword clone. Kita kemudian dapat mendefinisikan method __clone() yang otomatis akan di eksekusi ketika object di clone.
Class MyClass {
  function <em></em>clone() {
    print "Object is being cloned";
  }
}

$obj = new MyClass();
$obj_copy = clone $obj;
Class constants Sekarang, sebuah class dapat memiliki apa yang disebut class constants. Class constants ini kemudian dapat direferensi dengan menggunakan nama class-nya.
class MyClass {
  const SUCCESS = "Success";
  const FAILURE = "Failure";
}

print MyClass::SUCCESS;
Static Method Sekarang, kita dapat mendefinisikan sebuah method dengan mode static. Method static ini dapat dipanggil dari luar object tanpa perlu membuat instance dari object. Static method tidak memiliki variable $this karena static method ini tidak terkait dengan objek secara spesifik.
Class MyClass {
  static function helloWorld() {
    print "Hello, world!";
  }
}

MyClass:helloWorld();
Static Member Sama seperti method, property juga sekarang dapat didefinisikan secara static yang dapat diakses juga melalui class. Penggunaan static member ini biasanya digunakan pada singleton pattern.
Class Singleton {
  static private $instance = NULL;

  private function <em></em>construct() {
  }

  static public function getInstance() {
    if (self::$instance  NULL) {
      self::$instance = new Singleton();
    }
    return self::instance;
  }
}
Abstract Class Class dapat dideklarasikan sebagai abstract untuk mencegah agar class tidak dapat di instance. Class abstract ini tidak dapat di instance tetapi dapat diturunkan.
abstract class MyBaseClass {
  function display() {
    print "Default display routines being called";
  }
}
Abstract Method Method dapat dideklarasikan sebagai abstract. Sebuah class yang memiliki deklarasi method sebagai abstract harus juga dideklarasikan sebagai abstract class.
abstract class MyBaseClass {
  abstract function display();
}
Class type hints Deklarasi fungsi sekarang dapat menyertakan informasi tipe class pada parameter fungsinya. Jika class yang dimasukkan dalam parameter berbeda jenis classnya, maka akan muncul error.
function expectsMyClass(MyClass $obj) {
}
Support for dereferencing object that are returned from methods Sebuah method yang mengembalikan nilai dalam suatu bentuk yang memiliki referensi, sekarang dapat langsung ditunjuk tanpa membutuhkan bantuan variable dummy.
$obj->method()->method2();
Iterators PHP 5 sekarang dapat menjadikan sebuah class mengimplementasikan interface Iterator. Setelah interface ini diimplementasikan, anda kemudian dapat melakukan iterasi terhadap instance dari object tersebut.
$obj = new MyIteratorImplementation();
foreach ($obj as $value) {
  print "$value";
}
__autoload() Method __autoload() kini dapat digunakan untuk me-load secara otomatis file-file yang berisi class-class yang didefinisikan secara terpisah.
function <em></em>autoload($class_name) {
  include_once ($class_name . "php");
}

$obj = new MyClass1();
$obj2 = new MyClass2();

Other New Language Feature

Exception Handling PHP5 sekarang memiliki exception handling untuk menangani permasalahan error dengan lebih terstruktur. Exception handling hanya memperbolehkan pelemparan object (object thrown) kepada class-class yang diturunkan dari class Exception.
class SQLException extends Exception {
  public $problem;
  function <em></em>construct($problem) {
    $this->problem = $problem;
  }
}

try {
  ...
  throw new SQLException("Couldn't connect to database");
  ...
} catch (SQLException $e) {
  print "Caught an SQLException with problem $obj->problem";
} catch (Exception $e) {
  print "Caught unrecognize exception";
}
foreach with references Sekarang, setiap variable pada foreach dapat dibuat menjadi reference (dengan tanda &). Hal ini mengakibatkan jika kita melakukan iterasi terhadap suatu array, maka nilai yang dikembalikan dari foreach ini dapat diubah yang juga akan mengubah nilai asli dari array tersebut.
foreach ($array as &$value) {
  if ($value = NULL) {
    $value  = NULL;
  }
}
Default value by Reference parameters Pada PHP4, Default value hanya dapat dimiliki oleh parameter method dengan tipe by value. Pada PHP5, parameter by reference-pun dapat memiliki default value.
function my_func(&$arg  null) {
  if ($arg = NULL) {
    print ‘$arg is empty’;
  }
}

my_func();