Author Topic: Ten PHP Gotchas (10 poin rawan error)  (Read 4006 times)

0 Members and 1 Guest are viewing this topic.

Offline 1nf0rm4t1c5

  • Administrator
  • *
  • Posts: 1150
  • Reputasi: 15
  • Informatics Developer
    • Forum Informatika
  • Lokasi: Indonesia
  • Jenis Kelamin: Laki-laki
Ten PHP Gotchas (10 poin rawan error)
« on: 17 December 2007, 12:21:36 »
Untuk setiap belajar memprogram, termasuk PHP, sangat mustahil menulis program tanpa membuat suatu kesalahan sedikitpun. Triknya adalah menemukan bagaimana mengenali mereka (error2 tersebut), buka lebar2 mata Anda, katakan "Tidak lagi!", dan kemudian perbaiki mereka. Salah satu pesan error (kesalahan) yang sering Anda temui adalah, contoh:

Quote
Parse error: parse error in c:\test.php on line 7

Ini adalah salah satu cara PHP mengatakan, "Huh?". Maksudnya, dia tidak mengerti mengenai sesuatu.
Pesan ini sangat membantu dengan menunjuk pada file dan urutan baris dimana PHP mengalami kebingungan  ???. Kadang2 dia langsung menunjuk pada letak kesalahannya, namun kadang2 kebingungan PHP merupakan akibat dari error (kesalahan) sebelumnya dalam program.

1. MISSING SEMICOLON (KURANG TANDA TITIK KOMA)

Setiap pernyataan PHP diakhiri dengan sebuiah tanda semicolon/titik koma (;).
PHP tidak berhenti membaca sebuah pernyataan sampai dia menemukan sebuah tanda semicolon/titik koma. Jika Anda lupa tidak menuliskan karakter semicolon pada akhir sebuah baris, PHP melanjutkan membaca pernyataan pada baris berikutnya.
Contoh, perhatikan pernyataan berikut:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
Tentu saja, pernyataan tersebut menurut PHP tidak logis (masuk akal) saat PHP membaca dua baris kode sebagai satu pernyataan, jadi dia komplain dengan menampilkan satu pesan kesalahan, seperti yang terlihat pada contoh berikut:

Quote
Parse error: parse error in c:\test.php on line 2

Pada PHP versi terbaru (saat kode ini dibuat, yaitu versi 5.2.3) dengan kode:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
Pesan errornya:

Quote
Parse error: syntax error, unexpected T_ECHO in C:\test.php on line 3

So, jangan lupa untuk memberikan tanda semicolon pada tiap akhir baris yang menyatakan satu pernyataan.

2. NOT ENOUGH EQUAL SIGNS (KURANG TANDA SAMA DENGAN)

Ketika Anda meminta/bertanya apakah dua nilai yang diberikan sama atau tidak dalam sebuah pernyataan perbandingan, Anda perlu memberikan dua tanda sama dengan (==).
Penggunaan satu tanda sama dengan merupakan kesalahan umum yang sering terjadi.
Hal itu tentu saja wajar dikarenakan Anda termasuk saya selama ini sering (bahkan selalu) menggunakan satu tanda sama dengan sejak sekolah dasar, contoh 1 + 1 = 2.
Hal ini adalah kesalahan yan cukup sulit dikenali karena dia tidak menyebabkan atau memunculkan pesan error. Hanya saja membuat program Anda menjadi ganjil, seperti looping (pengulangan) yang tak pernah berhenti atau adanya blok2 tak pernah dieksekusi.

Kita lihat contoh kode berikut:
Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
menakjubkan bukan, kita memandangi saja pada kode tersebut di atas dan tidak melihat, kenapa dia melakukan perulangan yang tak berhenti-berhenti (tak berakhir)!  :-\

3. MISSPELLED VARIABLE NAMES (SALAH EJA NAMA VARIABEL)

Ini adalah titik rawan PHP lainnya yang tidak memunculkan pesan error, cuma membuat ganjil tingkah laku program kita.
Jika Anda mispell (salah eja) sebuah nama variabel, PHP menganggapnya sebagai seuatu variabel baru dan mengerjakan apa yang Anda minta untuk dikerjakan.

Berikut ini 'cara pintar lain:-X untuk menuliskan sebuah looping yang tiada akhir.

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
INGAT!: Bagi PHP, $tes adalah tidak sama dengan variabel $Tes.

4. MISSING DOLLAR SIGNS (KURANG TANDA DOLLAR)

Kurangnya tanda dollar ($) dalam sebuah nama variabel sangat sulit untuk dilihat, namun minimal, biasanya dia memunculkan pesan error sehingga Anda tahu di mana letak kesalahannya.
Biasanya dia memunculkan pesan error yang cukup familiar:

Quote
Parse error: parse error in test.php on line 7

5. TROUBLING QUOTES (TANDA PETIK BERMASALAH)

Anda bisa memiliki quotes/tanda petik yang terlalu banyak, terlalu sedikit, atau salah tulis/jenis. Anda memiliki terlalu banyak saat Anda menempatkan tanda quotes dalam tanda quotes lainnya, misal:

Quote
$tes "<table width="100%">";

PHP akan melihat tanda double quote (petik ganda) (") kedua - sebelum 100 - sebagai akhir dari tanda double quote (") dan membaca karakter 1 sebagai sebuah instruksi, dimana tentu saja tidak logis (masuk akal).
Walah! Muncul pesan error lainnya.  >:(

Kode tersebut bisa Anda tuliskan seperti pada contoh berikut:

Quote
$tes "<table width='100%'>";

atau

Quote
$tes "<table width=\"100%\">";

Anda dibilang memiliki tanda quotes yang terlalu sedikit jika Anda lupa mengakhiri string yang berada dalam quotes, seperti:

Quote
$tes "<table width='100%'>;

PHP akan melanjutkan membaca baris berikutnya sebagai bagian dari string dalam quotes sampai dia menemukan tanda double quote lainnya, dimana bisa jadi tak terdapat pada baris2 berikutnya.
Hal ini salah satu kejadian dimana pemunculan error menunjuk pada dimana PHP mengalami kebingungan, bukan pada error yang sesungguhnya.
Error yang sebenarnya terjadi pada beberapa baris sebelumnya, saat Anda lupa mengakhiri string dengan quotes.

Anda dibilang memiliki jenis quotes yang salah saat Anda menggunakan tanda single quote / petik tunggal (') dimana seharusnya double quote / petik ganda (") atau sebaliknya.

6 INVISIBLE OUTPUT (OUTPUT TIDAK TERLIHAT/MUNCUL)

Beberapa pernyataan, seperti pernyataan header, harus dieksekusi sebelum program menghasilkan output apapun. Jika Anda mencoba menggunakan pernyataan2 semacam itu setelah mengirimkan output, mereka akan gagal.
Contoh pernyataan berikut akan gagal karena pesan header tidak pada output pertama:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.

<html> tidak berada dalam seksi (bagian) PHP dan oleh karena itu dikirim sebagai output HTML.
Pernyataan2 berikut ini akan bekerja baik (berhasil):

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
Sedangkan, pernyataan berikut akan gagal:
Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
sebab, terdapat satu tanda spasi sebelum dimulainya tag PHP. Tanda spasi tersebut merupakan output ke browser, sehingga halaman web kelihatan kosong.
Oleh karena itu, pernyataan header gagal dieksekusi dikarenakan di sana terdapat output sebelumnya. Hal ini merupakan kesalahan umum dan susah untuk terdeteksi.

7. NUMBERED ARRAYS (ARRAY BERBILANG)

PHP menganggap bahwa nilai pertama dalam suatu array adalah angka nol (0). Tentu saja, manusia cenderung mempercayai atau menganggap bahwa sebuah daftar/rangkaian diawali oleh nomor satu (1).
Ini secara fundamental merupakan cara yang berbeda dalam menampilkan isi dari suatu daftar/rangkaian menurut kita manusia dalam mempercayai suatu array tidak bekerja dengan benar saat dia bekerja baik2 saja.

Perhatikan contoh kode berikut:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
Tak ada yang ditampilkan oleh pernyataan2 tersebut. Kita langsung saja menyimpulkan bahwa ada sesuatu yang salah dengan looping (perulangan) -nya. Sebenarnya, dia baik2 saja. Hanya saja hasilnya adalah seperti terlihat pada array berikut:

Quote
$array[0]=1
$array[1]=2
$array[2]=3

Dan tak ada yang menyatakan atau memberikan isi apapun dalam $array[3].

8. INCLUDING PHP STATEMENTS (MENYERTAKAN PERNYATAAN2 PHP)

Ketika sebuah file dibaca dengan menggunakan pernyataan include dalam bagian PHP, nampaknya beralasan bagi kita bahwa pernyataan2 dalam file akan diperlakukan sebagai pernyataan2 PHP.
Lagipula, PHP menambahkan pernyataan2 tersebut dalam program di titik dimana kita menyertakannya.
Bagaimanapun, PHP tidak melihatnya seperti anggapan atau cara kita. Jika sebuah file bernama file1.inc berisi pernyataan2 berikut:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
dan kita membacanya dengan menggunakan pernyataan2 berikut dalam program utama:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
Kita berharap kata Hi muncul di halaman web. Bagaimanapun, halaman web sebenarnya menampilkan ini:

Quote
if ( $tes == 1 ) echo "Hi";

Jelasnya, file yang disertakan dilihat atau dianggap sebagai HTML. Untuk mengirimkan Hi ke halaman web, dalam file1.inc perlu diisi pernyataan2 sbb:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
9. MISSING MATES (KEHILANGAN TEMAN)

Tanda Parentheses (tanda kurung buka tutup) dan curly brackets (kurung kurawal) datang sebagai sebyah pasangan dan harus digunakan dengan cara seperti itu.
Dibuka dengan sebuah ( yang tidak ditutup dengan ) atau sebuah { tanpa sebuah } akan menghasilkan sebuah pesan kesalahan. Salah satu favorit saya dalam penggunaan satu tanda kurung tutup dimana diperlukan dua, adalah seperti terlihat pada pernyataan berikut:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
Dalam pernyataan tersebut di atas diperlukan sebuah satu tanda kurung tutup di akhir pernyataan.
Memang cukup sulit untuk mengetahui bahwa salah satu blok2 Anda tidak ada tutupnya saat Anda memiliki blok2 di dalam blok, dan blok tersebut berada di dalam blok2 lainnya. Misal, perhatikan contoh berikut:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
Anda dapat melihat di sana terdapat 3 tanda kurung kurawal pembuka dan hanya 2 sebagai penutupnya.
Bayangkan jika terdapat 100 baris kode di dalam blok2 ini. Akan menjadi sulit sekali mendeteksi permasalahan - khususnya jika Anda berpikir tanda kurung tutup yang terakhir adalah penutup looping while, namun PHP melihatnya sebagai penutup loop IF untuk $tes2.

Di suatu tempat dalam program Anda, PHP mungkin menggunakan tanda kurung tutup untuk menutup looping while dimana Anda bahkan tidak melihatnya. Akan menjadi rumit untuk dilacak permasalahan tersebut dalam program yang berukuran besar.
Blok2 yang memiliki indentasi lebih mudah untuk melihat kepunyaan blok mana tanda kurung penutup tersebut. Juga, saya sering menggunakan komentar untuk tetap menjaga trek/jejak sedang berada di mana saya sekarang, seperti:

Code:
Hanya pengunjung TERDAFTAR yang bisa melihat konten. Silakan melakukan Registrasi terlebih dahulu atau Login.
10. CONFUSING PARENTHESES AND BRACKETS (TANDA KURUNG BIASA DAN KURUNG KURAWAL YANG MEMBINGUNGKAN)

Saya tidak yakin apakah hal ini merupakan masalah untuk semua orang atau masalah buat saya saja karena kadang2 apa yang dilihat tidak seperti yang digunakan. Meskipun PHP tidak bermasalah dalam memberdakan antara tanda kurung biasa dan kurung kurawal, mata kita kadang2 tidak sesuai. Khususnya saat memandangi layar komputer pada jam2 terakhir setelah selama 10 jam berturutan melakukan pemrograman, kita  8) maksudnya saya, dengan mudahnya bingung oleh tanda ( dan {.
Penggunaan tanda yang salah akan memberikan pesan error dalam parsing kode.

_Th47s 4ll_

So, terus latihan ya, biar mudah mengenali error dan tentu saja mudah memperbaikinya.
« Last Edit: 31 March 2009, 13:06:30 by 1nf0rm4t1c5 »

Forum Informatika

Ten PHP Gotchas (10 poin rawan error)
« on: 17 December 2007, 12:21:36 »
Sponsored Links:


Offline CompScience

  • Bibit IF
  • *
  • Posts: 53
  • Reputasi: 6
Re: Ten PHP Gotchas (10 poin rawan error)
« Reply #1 on: 17 December 2007, 17:20:47 »
emang bener, sering salah di masalah2 itu... trims.