Saturday, 6 February 2016

Beberapa Perubahan pada PHP 7 PART 1



      1. Perubahan pada list()
Pengisian variabel pada list tidak lagi terbalik
Pengisian value ke list() sekarang menurut urutan value yang diisikan, tidak lagi terbalik seperti pada PHP 5. Umumnya, ini akan berpengaruh ketika list digunakan dengan operator array [].
<?php
list($a[], $a[], $a[]) = [123];
var_dump($a);
?>

Output dari kode diatas pada PHP 5 :
array(3) {
  [0]=>
  int(3)
  [1]=>
  int(2)
  [2]=>
  int(1)
}
Output pada PHP 7 :
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
Namun, direkomendasikan agar tidak terlalu bergantung urutan pada urutan list(), karena bisa jadi masih bisa berubah lagi kedepannya.

Pengisian list() kosong dihilangkan
Pembuatan list() tidak boleh kosong. Kode seperti dibawah ini sudah tidak diperbolehkan :
<?php
list() = $a;
list(,,) = 
$a;
list(
$x, list(), $y) = $a;
?>
list() tidak bisa memecah string
list() sekarang tidak bisa lagi memecah variabel string. Untuk memecah string dapat menggunakan str_split().
2.      Perubahan pada foreach
foreach by-value menggunakan salinan dari array
Ketika digunakan pada mode default by-value, foreach sekarang menggunakan salinan dari array yang diiterasikan. Artinya perubahan pada array sumber ketika iterasi berlangsung tidak akan mempengaruhi data yang diiterasikan.

foreach by-reference ditambahkan behaviour baru
Ketika iterasi menggunakan by-reference, foreach sekarang dapat mendeteksi perubahan pada array sumber ketika iterasi berlangsung. Contohnya, menambahkan data kesebuah array ketika iterasi berlangsung sekarang juga akan menghasilkan data yang ditambahkan ketika iterasi :
<?php
$array 
= [0];
foreach (
$array as &$val) {
    
var_dump($val);
    
$array[1] = 1;
}
?>
Output pada PHP 5 :
int(0)
Output pada PHP 7 :
int(0)
int(1)

3.      Perubahan pada integer handling
Literal bilangan oktal
Sebelumnya, literal oktal yang mengandung angka yang tidak valid akan dihilangkan. Contoh 0128, maka yang diambil 012. Sekarang literal oktal yang tidak valid akan menyebabkan error.

Perubahan pada Division By Zero
Sebelumnya, ketika 0 digunakan sebagai pembagi untuk operator pembagi (/) atau modulus (%), sebuah E_WARNING akan tampil dan akan me-return false. Sekarang, operator pembagi me-return sebuah float, antara +INF,-INF, atau NAN. Pada operator modulus E_WARNING telah dihilangkan dan akan melempar sebuah exception DevisionByZeroError.
<?php
var_dump
(3/0);
var_dump(0/0);
var_dump(0%0);
?>

Output pada PHP 5 :
Warning: Division by zero in %s on line %d
bool(false)
 
Warning: Division by zero in %s on line %d
bool(false)
 
Warning: Division by zero in %s on line %d
bool(false)
 
Output pada PHP 7 :
Warning: Division by zero in %s on line %d
float(INF)
 
Warning: Division by zero in %s on line %d
float(NAN)
 
PHP Fatal error:  Uncaught DivisionByZeroError: Modulo by zero in %s line %d
 
4.      Fungsi tidak boleh memiliki parameter ganda dengan nama yang sama
Sekarang tidak diperbolehkan lagi untuk mendefinisikan dua atau lebih fungsi dengan nama yang sama. Contoh dibawah akan men-trigger E_COMPILE_ERROR :
<?php
function foo($a$b$unused$unused) {
    
//
}
?>

5.      Swicth tidak boleh memiliki blok default ganda
Tidak dimungkinkan lagi untuk mendefinisikan dua tau lebih blok default pada sebuah statement switch. Contoh dibawah akan menghasilkan sebuah E_COMPILE_ERROR :
<?php
switch (1) {
    default:
    break;
    default:
    break;
}
?>

6.      Karakter # untuk komentar dihilangkan pada file INI
Dukungan untuk membuat komentas dengan karakter # pada file INI telah dihilangkan. Untuk itu dapat menggunakan semi-kolon (;) atau titik koma. Perubahan ini diterapkan pada php.ini.
Latest
Next Post
Related Posts

1 comment: