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 ).
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();

rhie said:
Wah, aneh nih blogsome, masak gw pake kutip dua (“) sama dia otomatis ditambahin back-slash (). Error sugan.
25 mins after the fact.rhie said:
testing captcha di form comment gw
31 mins after the fact.beauty said:
apaan sih nih?ga ngerti…mlz beeng bacanya
59 mins after the fact.away said:
ini nih yang dari dulu aku cari.
1 day after the fact.ada tutorial php versi indonesia.
boleh minta gak?
rhie said:
wah, kalo tutorial bahasa indonesia gw lom punya, adanya e-book basa inggris.
btw, untuk beauty, ini penting lho buat upgrade knowledge ke php5, apa lagi sekarang lagi ngerjain project ERP. Beauty yg jelas dari refconindo khann? ip public-nya 222.124.48.233 hueheheh
1 day after the fact.