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[]) = [1, 2, 3];
var_dump($a);
?>
list($a[], $a[], $a[]) = [1, 2, 3];
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() = $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;
}
?>
$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);
?>
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) {
//
}
?>
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;
}
?>
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.
This comment has been removed by the author.
ReplyDelete