Dalam bahasa-bahasa lain tertentu (misalnya AS3), telah dicatat bahwa menginisialisasi array baru lebih cepat jika dilakukan seperti ini var foo = []
daripada var foo = new Array()
karena alasan pembuatan objek dan instantiasi. Saya bertanya-tanya apakah ada persamaan dalam PHP?
class Foo {
private $arr = array(); // is there another / better way?
}
php
arrays
initialization
Tom Auger
sumber
sumber
array_fill
? php.net/manual/en/function.array-fill.php$arr = array()
atau$arr = []
Jawaban:
Dalam implementasi ECMAScript (misalnya, ActionScript atau JavaScript),
Array()
adalah fungsi konstruktor dan[]
merupakan bagian dari tata bahasa literal array. Keduanya dioptimalkan dan dieksekusi dengan cara yang benar-benar berbeda, dengan tata bahasa literal tidak dikendalikan oleh overhead memanggil suatu fungsi.PHP, di sisi lain, memiliki konstruksi bahasa yang mungkin terlihat seperti fungsi tetapi tidak diperlakukan seperti itu. Bahkan dengan PHP 5.4, yang mendukung
[]
sebagai alternatif, tidak ada perbedaan dalam overhead karena, sejauh menyangkut kompiler / parser, mereka sepenuhnya identik.Jika Anda perlu mendukung versi PHP yang lebih lama, gunakan sintaksis sebelumnya. Ada juga argumen untuk keterbacaan tetapi, sebagai pengembang JS lama, yang terakhir tampaknya agak alami bagi saya. Saya sebenarnya membuat kesalahan dengan mencoba menginisialisasi array menggunakan
[]
ketika saya pertama kali belajar PHP.Ini perubahan ke bahasa awalnya diusulkan dan ditolak karena suara mayoritas terhadap pengembang inti dengan alasan berikut:
Namun, tampaknya ada perubahan hati yang mengarah ke 5.4, mungkin dipengaruhi oleh implementasi dukungan untuk database populer seperti MongoDB (yang menggunakan sintaksis ECMAScript).
sumber
$array = [];
karena membuat bolak-balik antara JS dan PHP lebih mudah.$array = [];
opsi yang lebih baik ??? atau saya harus mencoba yang lain. mana yang lebih baik[]
hanya sedikit lebih mudah untuk diketik.Membuat array kosong.
Anda bisa mendorong nilai ke array nanti, seperti:
Pada titik ini, $ myArray berisi "tree", "house" dan "dog". Masing-masing perintah di atas ditambahkan ke array, menjaga item yang sudah ada di sana.
Karena berasal dari bahasa lain, cara menambahkan array ini terasa aneh bagi saya. Saya diharapkan harus melakukan sesuatu seperti $ myArray + = "dog" atau sesuatu ... atau mungkin metode "add ()" seperti koleksi Visual Basic miliki. Tetapi sintaks append langsung ini tentu saja pendek dan nyaman.
Anda sebenarnya harus menggunakan fungsi unset () untuk menghapus item:
... akan menghapus "rumah" dari array (array berbasis nol).
... akan menghancurkan seluruh array.
Agar jelas, sintaks kurung kotak kosong untuk menambahkan ke array hanyalah cara memberitahu PHP untuk menetapkan indeks untuk setiap nilai secara otomatis, daripada ANDA yang menetapkan indeks. Di bawah selimut, PHP sebenarnya melakukan ini:
Anda dapat menetapkan indeks sendiri jika Anda inginkan, dan Anda dapat menggunakan nomor apa pun yang Anda inginkan. Anda juga dapat menetapkan nomor indeks untuk beberapa item dan bukan yang lain. Jika Anda melakukan itu, PHP akan mengisi angka indeks yang hilang, bertambah dari angka indeks terbesar yang ditetapkan.
Jadi, jika Anda melakukan ini:
... item "dog" akan diberi nomor indeks 21. PHP tidak melakukan pencocokan pola cerdas untuk penugasan indeks tambahan, jadi ia tidak akan tahu bahwa Anda mungkin menginginkannya untuk menetapkan indeks 30 untuk "dog ". Anda bisa menggunakan fungsi lain untuk menentukan pola kenaikan untuk array. Saya tidak akan membahasnya di sini, tetapi semuanya ada dalam dokumen PHP.
Bersulang,
- = Cameron
sumber
$array[] = 'foo'
berfungsi dengan baik di versi PHP yang lebih lama. Ini hanya$array = [];
untuk menginisialisasi array yang baru di 5.4.Sebelum ke PHP 5.4:
PHP 5.4 dan lebih tinggi
sumber
Dalam PHP array adalah array; tidak ada pertimbangan primitif vs objek, jadi tidak ada optimasi yang sebanding yang bisa didapat.
sumber
Apa yang Anda lakukan adalah 100% benar.
Dalam hal penamaan yang bagus sering dilakukan bahwa properti pribadi / dilindungi didahului dengan garis bawah untuk membuatnya jelas bahwa mereka tidak bersifat publik. Misalnya
private $_arr = array()
ataupublic $arr = array()
sumber
$this
untuk mendapatkan nilai dan tidak boleh menggunakan properti publik.$this->arr
dan$this->_arr
. Mengapa Anda tidak boleh menggunakan properti publik ?!Coba ini:
sumber
Ada ada cara lain , jadi ini yang terbaik.Sunting: Jawaban ini tidak valid sejak PHP 5.4 dan lebih tinggi.
sumber
Menginisialisasi array sederhana:
Inisialisasi array dalam array:
Sumber: Sorce untuk kode
sumber