Referensi - Apa arti simbol ini dalam PHP?


4480

Apa ini?

Ini adalah kumpulan pertanyaan yang muncul sesekali tentang sintaksis di PHP. Ini juga Wiki Komunitas, jadi semua orang diundang untuk berpartisipasi dalam memelihara daftar ini.

Kenapa ini?

Dulu sulit untuk menemukan pertanyaan tentang operator dan token sintaksis lainnya. Idea
Gagasan utamanya adalah memiliki tautan ke pertanyaan yang ada di Stack Overflow, jadi lebih mudah bagi kita untuk merujuk mereka, bukan untuk menyalin konten dari Manual PHP.

Catatan: Sejak Januari 2013, Stack Overflow mendukung karakter khusus . Hanya mengelilingi istilah pencarian dengan tanda kutip, mis[php] "==" vs "==="

Apa yang harus saya lakukan di sini?

Jika Anda telah diarahkan ke sini oleh seseorang karena Anda telah mengajukan pertanyaan seperti itu, temukan sintaksis tertentu di bawah ini. Halaman tertaut ke manual PHP bersama dengan pertanyaan terkait kemungkinan akan menjawab pertanyaan Anda kemudian. Jika demikian, Anda dianjurkan untuk mengubah jawaban. Daftar ini tidak dimaksudkan sebagai pengganti bantuan yang disediakan orang lain.

Daftar

Jika token khusus Anda tidak tercantum di bawah ini, Anda mungkin menemukannya di Daftar Token Parser .


& Operator atau Referensi Bitwise


=& Referensi


&= Operator Bitwise


&& Operator yang logis


% Operator Aritmatika


!! Operator yang logis


@ Operator Kontrol Kesalahan


?: Operator ternary


?? Null Coalesce Operator (sejak PHP 7)


?string ?int ?array ?bool ?float Deklarasi tipe pengembalian tidak dapat dibatalkan (sejak PHP 7.1)


: Sintaks alternatif untuk struktur kontrol , Operator Ternary


:: Operator Penyelesaian Ruang Lingkup


\ Ruang nama


-> Kelas dan Objek


=> Array


^ Operator Bitwise


>> Operator Bitwise


<< Operator Bitwise


<<< Heredoc atau Nowdoc


= Operator Penugasan


== Operator Perbandingan


=== Operator Perbandingan


!== Operator Perbandingan


!= Operator Perbandingan


<> Operator Perbandingan


<=> Operator Perbandingan (sejak PHP 7.0)


| Operator Bitwise


|| Operator yang logis


~ Operator Bitwise


+ Operator Aritmatika , Operator Array


+=dan -= Operator Penugasan


++dan -- Operator yang Menambah / Menurunkan


.= Operator Penugasan


. Operator String


, Argumen fungsi

, Deklarasi Variabel


$$ Variabel variabel


` Operator Eksekusi


<?= Tag Terbuka Pendek


[] Array (sintaks singkat sejak PHP 5.4)


<? Membuka dan Menutup tag


... Pembongkaran argumen (sejak PHP 5.6)


** Eksponensial (sejak PHP 5.6)


# Komentar gaya shell satu baris


:? Jenis pengembalian tidak dapat dikembalikan


?-> Panggilan Operator NullSafe



36
Saya tahu ini bukan sepenuhnya PHP, tetapi bagaimana dengan menyertakan tautan ke phpdoc.org untuk sintaksis komentar phpDocumentor, yang umum digunakan dan juga tidak mungkin untuk mencari /**?
Mike

8
Dapatkah saya menyarankan braket persegi dan braket keriting?
ajreal

124
Saya banyak mengalami masalah ini (tidak dapat mencari karakter khusus), itulah sebabnya saya membuat SymbolHound , mesin pencari yang tidak mengabaikan karakter khusus. Saya juga mempostingnya di StackApps .
dncrane

1
Nah, dari judulnya Mengapa ini? Saya kira itu karena "Gagasan utamanya adalah memiliki tautan ke pertanyaan yang ada di Stack Overflow, jadi lebih mudah bagi kami untuk merujuknya".
Herbert

3
Sebuah pertanyaan diajukan hari ini (20 Nov / 15) stackoverflow.com/questions/33833259/what-is-rscat-in-php menanyakan "Apa itu $ rsCat di php" (apakah pertanyaan itu masih dapat dilihat dan tidak dihapus) . Anehnya, tidak ada referensi tentang $variabel, tetapi tentang $$Variabel Variabel saja. Saya percaya itu harus diubah di suatu tempat.
Funk Forty Niner

Jawaban:


1172

Operator yang Menambah / Menurunkan

++ operator kenaikan

-- operator penurunan

Example    Name              Effect
---------------------------------------------------------------------
++$a       Pre-increment     Increments $a by one, then returns $a.
$a++       Post-increment    Returns $a, then increments $a by one.
--$a       Pre-decrement     Decrements $a by one, then returns $a.
$a--       Post-decrement    Returns $a, then decrements $a by one.

Ini bisa pergi sebelum atau sesudah variabel.

Jika diletakkan sebelum variabel, operasi kenaikan / penurunan dilakukan ke variabel terlebih dahulu kemudian hasilnya dikembalikan. Jika diletakkan setelah variabel, variabel pertama kali dikembalikan, maka operasi penambahan / penurunan dilakukan.

Sebagai contoh:

$apples = 10;
for ($i = 0; $i < 10; ++$i) {
    echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}

Contoh langsung

Dalam kasus di atas ++$idigunakan, karena lebih cepat. $i++akan memiliki hasil yang sama.

Pra-kenaikan sedikit lebih cepat karena itu benar-benar menambah variabel dan setelah itu 'mengembalikan' hasilnya. Post-increment menciptakan variabel khusus, menyalin nilai dari variabel pertama dan hanya setelah variabel pertama digunakan, menggantikan nilainya dengan variabel kedua.

Namun, Anda harus menggunakan $apples--, karena pertama, Anda ingin menampilkan jumlah apel saat ini, dan kemudian Anda ingin mengurangi satu dari itu.

Anda juga dapat menambahkan huruf dalam PHP:

$i = "a";
while ($i < "c") {
    echo $i++;
}

Setelah ztercapai aaberikutnya, dan seterusnya.

Perhatikan bahwa variabel karakter dapat bertambah tetapi tidak dikurangi dan meskipun demikian hanya karakter ASCII biasa (az dan AZ) yang didukung.


Posting Stack Overflow:


9
+1 untuk catatan bahwa decrementer tidak berfungsi pada karakter, hanya pada angka
Mark Baker

163
Demi semua orang, harap hapus informasi yang tebal tentang pra-kenaikan menjadi sangat cepat. Ini adalah contoh terburuk absolut dari pengoptimalan prematur dan informasi semacam ini tidak boleh ada di kepala orang jika mereka baru mulai belajar PHP.
Lotus Notes

14
@ Lotus - Saya menganggapnya sebagai fakta yang menyenangkan. Jika Anda seorang pemula untuk PHP, atau C ++, dll, tampaknya cukup aneh bahwa ++ i dan i ++ cukup berbeda untuk bekerja pada kecepatan yang berbeda. Saya menemukan itu menarik.
Peter Ajtai

12
@Peter Ajtai Ya, ini menarik, tetapi dari cara Anda menyusun posting Anda, Anda membuatnya tampak seperti salah satu fakta utama PHP yang sangat vital untuk menggunakan bahasa tersebut.
Lotus Notes

4
Tidak yakin apakah itu hanya saya atau tidak, tetapi contoh apel sepertinya sedikit menyesatkan. 'Saya punya 10 apel. Saya baru saja makan satu 'membuat saya percaya Anda memiliki 11 apel, tetapi sekarang Anda memiliki 10 karena Anda hanya makan satu daripada makan satu setelah mengatakan Anda memiliki 10, sehingga membuat Anda memiliki 9 - yang adalah apa yang disiratkan oleh kode.
さ り げ な い 告白

440

Operator Bitwise

Apa itu sedikit? Bit adalah representasi dari 1 atau 0. Pada dasarnya OFF (0) dan ON (1)

Apa itu byte? Sebuah byte terdiri dari 8 bit dan nilai tertinggi dari sebuah byte adalah 255, yang berarti setiap bit diatur. Kita akan melihat mengapa nilai maksimum byte adalah 255.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------

Representasi 1 Byte ini

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 (1 Byte)

Beberapa contoh untuk pemahaman yang lebih baik

Operator "DAN": &

$a =  9;
$b = 10;
echo $a & $b;

Ini akan menghasilkan angka 8. Mengapa? Baiklah mari kita lihat menggunakan contoh tabel kita.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      &     |   0|  0|  0|  0| 1| 0| 0| 0|
------------------------------------------- 

Jadi Anda bisa lihat dari tabel, hanya bit yang mereka bagikan adalah 8 bit.

Contoh kedua

$a =  36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111

Dua bit yang dibagi adalah 32 dan 4, yang bila ditambahkan bersama mengembalikan 36.

Operator "Atau": |

$a =  9;
$b = 10;
echo $a | $b;

Ini akan menampilkan angka 11. Mengapa?

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      |     |   0|  0|  0|  0| 1| 0| 1| 1|
-------------------------------------------

Anda akan melihat bahwa kami memiliki 3 bit yang ditetapkan, di kolom 8, 2, dan 1. Tambahkan itu: 8 + 2 + 1 = 11.


6
Bagaimana jika $ a mengambil nilai lebih dari 255?
Aycan Yaşıt

@ AycanYaşıt Sebagian besar sistem operasi menggunakan sistem 32 bit dan 64 bit, itu artinya batasnya jauh lebih dari 255 (8 bit).
AlbertSamuel

@ AycanYaşıt Sebenarnya, representasi di sini dengan panjang satu byte bahkan tidak benar, karena bahkan bilangan bulat terkecil masih 64 bit (8 byte) dalam memori pada platform 64bit modern.
Kaii

Mengapa and &ini 0 0 0 0 1 0 0 0 dan or |itu 0 0 0 0 1 0 1 1?
Vir

285

<=> Operator Pesawat Luar Angkasa

Ditambahkan dalam PHP 7

The Operator pesawat ruang angkasa <=> adalah operator perbandingan terbaru ditambahkan dalam PHP 7. Ini adalah non-asosiatif operator biner dengan didahulukan sama operator kesetaraan ( ==, !=, ===, !==). Operator ini memungkinkan untuk perbandingan tiga arah yang lebih sederhana antara operan kiri dan kanan.

Operator menghasilkan ekspresi bilangan bulat dari:

  • 0 ketika kedua operan sama
  • Kurang dari 0ketika operan kiri kurang dari operan kanan
  • Lebih besar daripada 0ketika operan kiri lebih besar dari operan kanan

misalnya

1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

Aplikasi praktis yang baik untuk menggunakan operator ini adalah dalam perbandingan jenis panggilan balik yang diharapkan untuk mengembalikan bilangan bulat nol, negatif, atau positif berdasarkan perbandingan tiga arah antara dua nilai. Fungsi perbandingan diteruskan ke usortsalah satu contohnya.

Sebelum PHP 7 Anda akan menulis ...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    if ($a < $b) {
        return -1;
    } elseif ($a > $b) {
        return 1;
    } else {
        return 0;
    }
});

Sejak PHP 7 Anda dapat menulis ...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    return $a <=> $b;
});

21
Tidak yakin bagaimana $a <=> $bbedanya dengan$a - $b
rev

38
@AcidShout $a - $bberfungsi untuk angka, tetapi tidak untuk string, objek, atau array.
mcrumley

44
@ McCrumley Tidak, ini lebih buruk dari itu. Secara umum $a - $bbahkan tidak bekerja untuk angka; ini hanya berfungsi untuk bilangan bulat . Ini tidak berfungsi untuk bilangan non-bilangan bulat, karena usortmelemparkan nilai pengembalian fungsi komparator Anda ke int, yang berarti 0,5 akan dilemparkan ke 0, yang berarti bahwa dua angka dengan selisih kurang dari 1, seperti 4 dan 4.6, dapat (tergantung yang dilewati sebagai argumen pertama ke fungsi komparator Anda) membandingkan secara salah sama.
Mark Amery

5
@MarkAmery panduan migrasi bukan perilaku yang didokumentasikan dari operator. Untuk itu Anda ingin melihat bagian operator bahasa dari manual untuk php.net/language.operators.comparison perilaku aktual di balik ini bergantung pada berbagai fungsi perbandingan API, seperti ketika Anda melakukan strcmp untuk string, di mana Anda tidak dapat menjamin nilai pengembalian aktual dalam setiap kasus. Tentu, ini hampir selalu 1, 0, atau -1, tetapi untuk kasus-kasus di mana Anda tidak dapat menjaminnya seperti dalam membungkus strabp libc, Anda menawarkan perilaku yang didefinisikan sama dengan spec yang mendasarinya agar aman
Sherif

9
@MarkAmery Intinya di sini bukan untuk memungkinkan orang untuk mengandalkan perilaku yang tidak terdefinisi. Untuk satu kasus di mana seseorang mendapatkan nilai yang tidak tepat 1, 0, atau -1, Anda membuat seseorang mengajukan laporan bug karena mengira ada sesuatu yang salah dalam bahasa tersebut. Itulah sebabnya kami mendokumentasikan bahwa yang dapat kami jamin adalah bahwa nilainya akan kurang dari , lebih besar dari , atau sama dengan 0, dan tidak harus 1, 0, dan -1.
Sherif


273
Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true 
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
x or y     Or              True if any of x or y are true x=6 y=3
                           (x < 10 or y > 10) returns true 
x || y     Or              True if any of x or y are true x=6 y=3
                           (x < 3 || y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"

239

Konstanta ajaib : Meskipun ini bukan hanya simbol tetapi bagian penting dari keluarga token ini. Ada delapan konstanta magis yang berubah tergantung di mana mereka digunakan.

__LINE__: Nomor baris file saat ini.

__FILE__: Path lengkap dan nama file file. Jika digunakan di dalam sebuah menyertakan, nama file yang disertakan dikembalikan. Sejak PHP 4.0.2, __FILE__selalu berisi path absolut dengan symlink diselesaikan sementara di versi yang lebih lama itu berisi path relatif dalam beberapa keadaan.

__DIR__: Direktori file. Jika digunakan di dalam sebuah include, direktori file yang disertakan dikembalikan. Ini setara dengan dirname(__FILE__). Nama direktori ini tidak memiliki garis miring kecuali jika itu adalah direktori root. (Ditambahkan dalam PHP 5.3.0.)

__FUNCTION__: Nama fungsi. (Ditambahkan dalam PHP 4.3.0) Pada PHP 5 konstanta ini mengembalikan nama fungsi seperti yang dinyatakan (case-sensitive). Dalam PHP 4 nilainya selalu lebih rendah.

__CLASS__: Nama kelas. (Ditambahkan dalam PHP 4.3.0) Pada PHP 5 konstanta ini mengembalikan nama kelas seperti yang dinyatakan (case-sensitive). Dalam PHP 4 nilainya selalu lebih rendah. Nama kelas termasuk namespace yang dideklarasikan dalam (misalnya Foo\Bar). Perhatikan bahwa pada PHP 5.4 __CLASS__berfungsi juga dalam sifat. Ketika digunakan dalam metode sifat, __CLASS__adalah nama kelas yang digunakan sifat tersebut.

__TRAIT__: Nama sifat. (Ditambahkan dalam PHP 5.4.0) Pada PHP 5.4 konstanta ini mengembalikan sifat seperti yang dinyatakan (case-sensitive). Nama sifat mencakup namespace yang dideklarasikan dalam (misalnya Foo\Bar).

__METHOD__: Nama metode kelas. (Ditambahkan dalam PHP 5.0.0) Nama metode dikembalikan seperti yang dinyatakan (case-sensitive).

__NAMESPACE__: Nama namespace saat ini (case-sensitive). Konstanta ini didefinisikan dalam waktu kompilasi (Ditambahkan dalam PHP 5.3.0).

Sumber


150

Ketik Operator

instanceof digunakan untuk menentukan apakah variabel PHP adalah objek instantiated dari kelas tertentu.

<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);

Contoh di atas akan menampilkan:

bool(true)
bool(false)

Alasan: Contoh di atas $aadalah objek dari mclassjadi gunakan hanya mclassdata bukan turunan dengansclass

Contoh dengan warisan

<?php 
class pclass { } 
class childclass extends pclass { } 
$a = new childclass; 
var_dump($a instanceof childclass); 
var_dump($a instanceof pclass);

Contoh di atas akan menampilkan:

bool(true)
bool(true)

Contoh dengan Clone

<?php 
class cloneable { } 
$a = new cloneable;
$b = clone $a; 
var_dump($a instanceof cloneable); 
var_dump($b instanceof cloneable);

Contoh di atas akan menampilkan:

bool(true)
bool(true)

7
Di atas berfungsi dengan 'antarmuka' juga. Ini berguna untuk memeriksa apakah ada antarmuka tertentu.
Ryan Vincent

133

Gambaran umum operator di PHP :


Operator yang logis:

  • $ a && $ b: BENAR jika keduanya $ a dan $ b BENAR.
  • $ a || $ b: BENAR jika $ a atau $ b BENAR.
  • $ a xor $ b: BENAR jika salah satu $ a atau $ b BENAR, tetapi tidak keduanya.
  • ! $ a: TRUE jika $ a bukan TRUE.
  • $ a dan $ b: BENAR jika keduanya $ a dan $ b BENAR.
  • $ a atau $ b: BENAR jika salah satu $ a atau $ b BENAR.

Operator perbandingan:

  • $ a == $ b: BENAR jika $ a sama dengan $ b setelah jenis juggling.
  • $ a === $ b: BENAR jika $ a sama dengan $ b, dan mereka bertipe sama.
  • $ a! = $ b: BENAR jika $ a tidak sama dengan $ b setelah jenis juggling.
  • $ a <> $ b: BENAR jika $ a tidak sama dengan $ b setelah jenis juggling.
  • $ a! == $ b: BENAR jika $ a tidak sama dengan $ b, atau mereka tidak dari jenis yang sama.
  • $ a <$ b : BENAR jika $ a benar-benar kurang dari $ b.
  • $ a> $ b : BENAR jika $ a benar-benar lebih besar dari $ b.
  • $ a <= $ b : BENAR jika $ a kurang dari atau sama dengan $ b.
  • $ a> = $ b : BENAR jika $ a lebih besar dari atau sama dengan $ b.
  • $ a <=> $ b : Integer kurang dari, sama dengan, atau lebih besar dari nol ketika $ a masing-masing kurang dari, sama dengan, atau lebih besar dari $ b. Tersedia pada PHP 7.
  • $ a? $ b: $ c : jika $ pengembalian $ b lagi kembalikan $ c ( operator ternary )
  • $ a ?? $ c : Sama dengan $ a? $ a: $ c ( operator penggabungan nol - membutuhkan PHP> = 7)

Operator Aritmatika:

  • - $ a : Berlawanan dengan $ a.
  • $ a + $ b : Jumlah $ a dan $ b.
  • $ a - $ b : Perbedaan $ a dan $ b.
  • $ a * $ b : Produk $ a dan $ b.
  • $ a / $ b : Quotient dari $ a dan $ b.
  • $ a% $ b : Sisa $ a dibagi dengan $ b.
  • $ a ** $ b : Hasil meningkatkan $ a hingga $ b'th power (diperkenalkan dalam PHP 5.6)

Operator yang Menambah / Menurunkan:

  • ++ $ a : Menambah $ a per satu, lalu mengembalikan $ a.
  • $ a ++ : Mengembalikan $ a, lalu menambah $ a per satu.
  • - $ a : Mengurangi $ a per satu, lalu mengembalikan $ a.
  • $ a-- : Mengembalikan $ a, lalu mengurangi $ a per satu.

Operator Bitwise:

  • $ a & $ b : Bit yang diset pada $ a dan $ b ditetapkan.
  • $ a | $ b : Bit yang diset dalam $ a atau $ b ditetapkan.
  • $ a ^ $ b : Bit yang diset dalam $ a atau $ b tetapi tidak keduanya ditetapkan.
  • ~ $ a : Bit yang diatur dalam $ a tidak disetel, dan sebaliknya.
  • $ a << $ b : Geser bit $ a $ b langkah ke kiri (setiap langkah berarti "dikalikan dua")
  • $ a >> $ b : Geser bit $ a $ b langkah ke kanan (setiap langkah berarti "bagi dua")

Operator String:

  • $ a. $ b : Rangkuman $ a dan $ b.

Operator Array:

  • $ a + $ b : Persatuan $ a dan $ b.
  • $ a == $ b : BENAR jika $ a dan $ b memiliki pasangan kunci / nilai yang sama.
  • $ a === $ b : BENAR jika $ a dan $ b memiliki pasangan kunci / nilai yang sama dalam urutan dan jenis yang sama.
  • $ a! = $ b : BENAR jika $ a tidak sama dengan $ b.
  • $ a <> $ b : BENAR jika $ a tidak sama dengan $ b.
  • $ a! == $ b : BENAR jika $ a tidak identik dengan $ b.

Operator Penugasan:

  • $ a = $ b : Nilai $ b ditugaskan untuk $ a
  • $ a + = $ b : Sama dengan $ a = $ a + $ b
  • $ a - = $ b : Sama dengan $ a = $ a - $ b
  • $ a * = $ b : Sama dengan $ a = $ a * $ b
  • $ a / = $ b : Sama dengan $ a = $ a / $ b
  • $ a% = $ b : Sama dengan $ a = $ a% $ b
  • $ a ** = $ b : Sama dengan $ a = $ a ** $ b
  • $ a = $ b : Sama dengan $ a = $ a. $ b
  • $ a & = $ b : Sama dengan $ a = $ a & $ b
  • $ a | = $ b : Sama dengan $ a = $ a | $ b
  • $ a ^ = $ b : Sama dengan $ a = $ a ^ $ b
  • $ a << = $ b : Sama seperti $ a = $ a << $ b
  • $ a >> = $ b : Sama dengan $ a = $ a >> $ b

Catatan

andoperator dan oroperator memiliki prioritas lebih rendah dari operator penugasan =.

Ini berarti $a = true and false;setara dengan ($a = true) and false.

Dalam kebanyakan kasus, Anda mungkin ingin menggunakan &&dan ||, yang berperilaku dengan cara yang dikenal dari bahasa seperti C, Java atau JavaScript.


1
Ada kesalahan dalam $a ?? $c, katanya sama dengan $a ? $a : $c, tetapi operator ternary memeriksa apakah nilainya benar, di sisi lain, null menggabung cek untuk nilai null, jadi, jika $ a adalah 0, Anda akan mendapatkan 0 (karena 0 adalah bukan null), misalnya jika Anda memiliki: $a=0; $c=5;lalu $a?$a:$cmengembalikan 5, dan $a??$cmengembalikan 0.
stramin

104

Operator Pesawat Luar Angkasa<=> (Ditambahkan dalam PHP 7)

Contoh untuk <=>operator pesawat ruang angkasa (PHP 7, Sumber: PHP Manual):

Integer, Floats, Strings, Array & objek untuk perbandingan variabel tiga arah.

// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
// Comparison is case-sensitive
echo "B" <=> "a"; // -1

echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0

$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1

$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1

// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 1


74

{} Kurung kurawal

Dan beberapa kata tentang posting terakhir

$x[4] = 'd'; // it works
$x{4} = 'd'; // it works

$echo $x[4]; // it works
$echo $x{4}; // it works

$x[] = 'e'; // it works
$x{} = 'e'; // does not work

$x = [1, 2]; // it works
$x = {1, 2}; // does not work

echo "${x[4]}"; // it works
echo "${x{4}}"; // does not work

echo "{$x[4]}"; // it works
echo "{$x{4}}"; // it works

4
{''} notasi untuk nama properti. echo $ movies-> movie -> {'great-lines'} -> line; dapat digunakan untuk mengakses data di SimpleXMLElement. Mungkin bisa digunakan dalam kasus lain juga. php.net/manual/en/simplexml.examples-basic.php
Andrei

68

Operator penggabungan nol (??)

Operator ini telah ditambahkan dalam PHP 7.0 untuk kasus umum yang memerlukan penggunaan operator ternary bersamaan isset(). Ini mengembalikan operan pertamanya jika ada dan tidak NULL; selain itu mengembalikan operan keduanya.

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

64

String PHP: String PHP dapat ditentukan dalam empat cara, bukan hanya dua cara:

1) String Kutipan Tunggal:

$string = 'This is my string'; // print This is my string

2) String Kutipan Ganda:

$str = 'string';

$string = "This is my $str"; // print This is my string

3) Heredoc:

$string = <<<EOD
This is my string
EOD; // print This is my string

4) Nowdoc (sejak PHP 5.3.0):

$string = <<<'END_OF_STRING'
    This is my string 
END_OF_STRING; // print This is my string

@ Rizier123: Apa yang dimaksud dengan "Heredocs tidak dapat digunakan untuk menginisialisasi properti kelas. Sejak PHP 5.3, batasan ini hanya berlaku untuk heredocs yang mengandung variabel."?
PHPFan

48

PERTANYAAN:

Apa =>artinya


MENJAWAB:

=>Adalah simbol yang kami manusia putuskan untuk digunakan untuk memisahkan "Key" => "Value"pasangan dalam Array Asosiatif.

MENGURANGI:

Untuk memahami ini, kita harus tahu apa itu Array Asosiatif. Hal pertama yang muncul ketika seorang programmer konvensional memikirkan sebuah array ( dalam PHP ) akan menjadi sesuatu yang mirip dengan:

$myArray1 = array(2016, "hello", 33);//option 1

$myArray2 = [2016, "hello", 33];//option 2

$myArray3 = [];//option 3
$myArray3[] = 2016; 
$myArray3[] = "hello"; 
$myArray3[] = 33;

Sedangkan, jika kita ingin memanggil array di beberapa bagian kode selanjutnya, kita dapat melakukan:

echo $myArray1[1];// output: hello
echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello

Sejauh ini bagus. Namun, sebagai manusia, kita mungkin sulit mengingat bahwa indeks [0]array adalah nilai tahun 2016, indeks [1]array adalah salam , dan indeks [2]array adalah nilai integer sederhana . Alternatif yang akan kita miliki adalah menggunakan apa yang disebut sebagai Associative Array . Array asosiatif memiliki beberapa perbedaan dari Sequential Array ( yang merupakan kasus-kasus sebelumnya karena mereka menambah indeks yang digunakan dalam urutan yang telah ditentukan, dengan menambah 1 untuk setiap nilai berikut ).

Perbedaan ( antara array berurutan dan asosiatif ):

  • Selama deklarasi Array Asosiatif, Anda tidak hanya menyertakan valueapa yang ingin Anda masukkan ke dalam array, tetapi Anda juga meletakkan nilai indeks (disebut key) yang ingin Anda gunakan saat memanggil array di bagian selanjutnya dari kode. Sintaks berikut digunakan selama deklarasi itu: "key" => "value".

  • Saat menggunakan Array Asosiatif, keynilai kemudian akan ditempatkan di dalam indeks array untuk mengambil yang diinginkan value.

Contohnya:

    $myArray1 = array( 
        "Year" => 2016, 
        "Greetings" => "hello", 
        "Integer_value" => 33);//option 1

    $myArray2 = [ 
        "Year" =>  2016, 
        "Greetings" => "hello", 
        "Integer_value" => 33];//option 2

    $myArray3 = [];//option 3
    $myArray3["Year"] = 2016; 
    $myArray3["Greetings"] = "hello"; 
    $myArray3["Integer_value"] = 33;

Dan sekarang, untuk menerima output yang sama seperti sebelumnya, keynilainya akan digunakan dalam indeks array:

echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello

TITIK AKHIR:

Jadi dari contoh di atas, cukup mudah untuk melihat bahwa =>simbol digunakan untuk mengekspresikan hubungan dari Associative Array antara masing-masing keydan valuepasangan dalam array SELAMA inisiasi nilai-nilai dalam array.


36

Pertanyaan :

Apa artinya "&" di sini di PHP?

Operator PHP "&"

Membuat hidup lebih mudah setelah kita terbiasa .. (lihat contoh di bawah ini dengan cermat)

& biasanya memeriksa bit yang ditetapkan dalam $ a dan $ b ditetapkan.

Pernahkah Anda memperhatikan cara kerja panggilan ini?

   error_reporting(E_ERROR | E_WARNING | E_PARSE);
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    error_reporting(E_ALL & ~E_NOTICE);
    error_reporting(E_ALL);

Jadi di balik semua di atas adalah permainan operator bitwise dan bit.

Salah satu kasus yang bermanfaat dari ini adalah konfigurasi mudah seperti memberi di bawah ini, sehingga bidang bilangan bulat tunggal dapat menyimpan ribuan kombo untuk Anda.

Kebanyakan orang sudah membaca dokumen tetapi tidak mengandalkan kasus penggunaan dunia nyata dari operator bitwise ini.

Contoh Yang Anda Sukai

<?php

class Config {

    // our constants must be 1,2,4,8,16,32,64 ....so on
    const TYPE_CAT=1;
    const TYPE_DOG=2;
    const TYPE_LION=4;
    const TYPE_RAT=8;
    const TYPE_BIRD=16;
    const TYPE_ALL=31;

    private $config;

    public function __construct($config){
        $this->config=$config;

        if($this->is(Config::TYPE_CAT)){
            echo 'cat ';
        }
        if($this->is(Config::TYPE_DOG)){
            echo 'dog ';
        }
        if($this->is(Config::TYPE_RAT)){
            echo 'rat ';
        }
        if($this->is(Config::TYPE_LION)){
            echo 'lion ';
        }
        if($this->is(Config::TYPE_BIRD)){
            echo 'bird ';
        }
        echo "\n";
    }

    private function is($value){
        return $this->config & $value;
    }
}

new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird

30

== digunakan untuk memeriksa kesetaraan tanpa mempertimbangkan tipe data variabel

===digunakan untuk cek kesetaraan bagi kedua variabel nilai dan tipe data

Contoh

$a = 5

  1. if ($a == 5) - akan mengevaluasi ke true

  2. if ($a == '5') - akan mengevaluasi ke true, karena ketika membandingkan kedua nilai ini, PHP secara internal mengubah nilai string tersebut menjadi integer dan kemudian membandingkan kedua nilai tersebut

  3. if ($a === 5) - akan mengevaluasi ke true

  4. if ($a === '5') - akan mengevaluasi ke false, karena nilai 5, tetapi nilai 5 ini bukan bilangan bulat.


27

Operator Null Coalesce "??" (Ditambahkan dalam PHP 7)

Bukan nama yang paling menarik untuk seorang operator, tetapi PHP 7 membawa null null yang cukup berguna jadi saya pikir saya akan membagikan sebuah contoh.

Di PHP 5, kami sudah memiliki operator ternary, yang menguji suatu nilai, dan kemudian mengembalikan elemen kedua jika itu mengembalikan true dan yang ketiga jika tidak:

echo $count ? $count : 10; // outputs 10

Ada juga singkatan untuk apa yang memungkinkan Anda untuk melompati elemen kedua jika itu sama dengan yang pertama: echo $ count?: 10; // juga menghasilkan 10

Di PHP 7 kita juga mendapatkan ?? Operator yang alih-alih menunjukkan kebingungan ekstrem yang biasanya saya gunakan menggunakan dua tanda tanya bersama-sama memungkinkan kita untuk menyatukan serangkaian nilai. Membaca dari kiri ke kanan, nilai pertama yang ada dan bukan nol adalah nilai yang akan dikembalikan.

// $a is not set
$b = 16;

echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16

Konstruk ini berguna untuk memprioritaskan satu atau lebih nilai yang mungkin datang dari input pengguna atau konfigurasi yang ada, dan dengan aman kembali ke default yang diberikan jika konfigurasi itu hilang. Ini semacam fitur kecil tapi itu salah satu yang saya tahu saya akan gunakan segera setelah aplikasi saya ditingkatkan ke PHP 7.


12

Deklarasi tipe pengembalian tidak dapat dibatalkan

PHP 7 menambahkan dukungan untuk deklarasi tipe kembali. Demikian pula untuk deklarasi tipe argumen, deklarasi tipe kembali menentukan tipe nilai yang akan dikembalikan dari suatu fungsi. Tipe yang sama tersedia untuk deklarasi tipe kembali seperti yang tersedia untuk deklarasi tipe argumen.

Pengetikan ketat juga memiliki efek pada deklarasi tipe kembali. Dalam mode lemah default, nilai yang dikembalikan akan dipaksa ke tipe yang benar jika mereka belum dari tipe itu. Dalam mode kuat, nilai yang dikembalikan harus dari jenis yang benar, jika tidak, TypeError akan dibuang.

Pada PHP 7.1.0, nilai kembali dapat ditandai sebagai nullable dengan awalan nama jenis dengan tanda tanya (?). Ini menandakan bahwa fungsi mengembalikan tipe yang ditentukan atau NULL.

<?php
function get_item(): ?string {
    if (isset($_GET['item'])) {
        return $_GET['item'];
    } else {
        return null;
    }
}
?>

Sumber


7

Tiga DOTS sebagai Operator Splat (...) (sejak PHP 5.6)

PHP memiliki operator "..." (Tiga titik) yang disebut sebagai Operator percikan. Ini digunakan untuk melewatkan jumlah parameter yang berubah-ubah dalam suatu fungsi dan tipe fungsi ini disebut Fungsi Variadik. Mari kita ambil contoh untuk menggunakan "..." (Tiga titik).

Contoh 1:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

echo calculateNumbers(10, 20, 30, 40, 50);

//Output 150
?>

Setiap argumen fungsi calculNumbers () melewati $ params sebagai array saat menggunakan "...".

Ada banyak cara berbeda untuk menggunakan operator "...". Di bawah ini beberapa contoh:

Contoh 2:

<?php
function calculateNumbers($no1, $no2, $no3, $no4, $no5){
    $total = $no1 + $no2 + $no3 + $no4 + $no5;
    return $total;
}

$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers(...$numbers);

//Output 150
?>

Contoh 3:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}
$no1 = 70;
$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers($no1, ...$numbers);

//Output 220
?>

Contoh 4:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

$numbers1 = array(10, 20, 30, 40, 50);
$numbers2 = array(100, 200, 300, 400, 500);
echo calculateNumbers(...$numbers1, ...$numbers2);

//Output 1650

?>

0

? -> Operator NullSafe

Untuk saat ini, itu hanya proposal, Anda dapat menemukannya di sini . Ini adalah NullSafe Operator, itu kembali nulljika Anda mencoba untuk memanggil fungsi atau mendapatkan nilai dari null... Contoh

$objDrive = null;
$drive = $objDrive?->func?->getDriver()?->value; //return null
$drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object

Menambahkan ini terasa agak prematur, tidak ada yang akan melihat operator ini dalam kode langsung apa pun, dan bahkan mungkin tidak ditambahkan. Akan lebih baik menunggu sampai detailnya selesai dan mendokumentasikannya dengan benar.
IMSoP

Kami sudah mendapatkan pertanyaan tentang itu. : / Jika proposal gagal maka kita dapat memutuskan apakah ini layak disimpan.
John Conde

@ JohnConde, lihat? inilah yang saya katakan ...
Berto99

@ JohnConde saya akan tergoda untuk menutup mereka sebagai di luar topik, karena mereka bertanya tentang bahasa pemrograman imajiner; atau mungkin "pertanyaan ini berada di bagian waktu yang berbeda, silakan periksa pengaturan di mesin waktu Anda";)
IMSoP

lol Pikiran itu terlintas di benak saya. Saya bertanya pada diri sendiri apakah ini akan menawarkan nilai bagi pengunjung masa depan dan, untuk saat ini, jawabannya adalah "ya". Tapi itu mungkin berubah ...
John Conde

0

Operator NullSafe "? ->" (mungkin) sejak php8

Untuk saat ini, itu hanya proposal, Anda dapat menemukannya masukkan deskripsi tautan di sini . ?->itu adalah NullSafe Operator, ia kembali nulljika Anda mencoba menjalankan fungsi atau mendapatkan nilai dari null...

Contoh:

<?php
$obj = null;
$obj = $obj?->attr; //return null
$obj = ?->funct(); // return null
$obj = $objDrive->attr; // Error: Trying to get property 'attr' of non-object
?>

Menambahkan ini terasa agak prematur, tidak ada yang akan melihat operator ini dalam kode langsung apa pun, dan bahkan mungkin tidak ditambahkan. Akan lebih baik menunggu sampai detailnya selesai dan mendokumentasikannya dengan benar.
IMSoP

@IMSoP saya bersamamu, namun saya diundang untuk melakukannya di sini stackoverflow.com/questions/62178354/… ...
Berto99

Sepertinya kita sekarang memiliki dua jawaban tentang ini. Secara pribadi, saya hanya akan memilih untuk menutup pertanyaan lain daripada mencoba menjawab, karena saat ini tidak ada operator seperti itu.
IMSoP

@IMSoP ada banyak pertanyaan di sini di StackOverflow tentang C ++ Proposal, dan mereka belum ditutup: meskipun begitu, saya bersama Anda tentang tidak memposting di sini operator ini untuk saat ini
Berto99

Saya tidak tahu banyak tentang proses C ++ dan kapan masuk akal untuk membahas proposal, dan untuk bersikap adil ini tampaknya cukup berhasil modifikasi latihan, tetapi secara umum ada banyak fitur yang diusulkan untuk PHP yang tidak pernah berhasil sampai ke bahasa, dan itu akan agak membingungkan bagi pengguna untuk menemukan mereka semua dalam daftar referensi. Yang mengatakan, saya sebagian hanya menjadi orang tua yang pemarah di sini: P
IMSoP
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.