Soru Referans - Bu sembol PHP'de ne anlama geliyor?


Bu nedir?

Bu, her şimdi ve sonra PHP'de sözdizimi hakkında ortaya çıkan soruların bir koleksiyonudur. Bu aynı zamanda bir Topluluk Wiki, bu yüzden herkes bu listeyi sürdürmeye katılmaya davet edildi.

Bu neden?

Operatörler ve diğer sözdizimi belirteçleri hakkında sorular bulmak zordu.
Ana fikir, Yığın Taşması ile ilgili mevcut sorulara bağlantı sağlamaktır. Bu yüzden, PHP Kılavuzundan içerik kopyalamak için değil, onları referans göstermemiz daha kolay olacaktır.

Not: Ocak 2013'ten beri Yığın Taşması özel karakterleri destekliyor. Arama terimlerini tırnak işaretleri ile kapatın, ör. [php] "==" vs "==="

Burada ne yapmalıyım?

Bu konuda bir soru sorduğunuz için buraya bir kişi tarafından yönlendirildiyseniz, lütfen aşağıdaki söz dizimini bulun. Bağlantılı sayfalar PHP kılavuzu bağlantılı sorularla birlikte muhtemelen sorunuza cevap verecektir. Eğer öyleyse, cevabı onaylamaya teşvik edilirsiniz. Bu liste, sunulan diğer kişilerin yerine geçmez.

Liste

Eğer özel belirteciniz aşağıda listelenmemişse, Parser Jetonları Listesi.


&  Bitsel Operatörler veya Referanslar


=&  Referanslar


&=  Bitsel Operatörler


&&  Mantıksal operatörler


%  Aritmetik operatörler


!!  Mantıksal operatörler


@  Hata Kontrol Operatörleri


?:  Üçlü operatör


??  Boş Yetenek Operatörü (PHP 7'den beri)


:  Kontrol yapıları için alternatif sözdizimi, Üçlü operatör


::  Kapsam Çözünürlük Operatörü


\  Ad alanları


->  Sınıflar ve Nesneler


=>  Diziler


^  Bitsel Operatörler


>>  Bitsel Operatörler


<<  Bitsel Operatörler


<<<  Heredoc veya Nowdoc


=  Atama Operatörleri


==  Karşılaştırma Operatörleri


===  Karşılaştırma Operatörleri


!==  Karşılaştırma Operatörleri


!=  Karşılaştırma Operatörleri


<>  Karşılaştırma Operatörleri


<=>  Karşılaştırma Operatörleri (PHP 7.0'dan beri)


|  Bitsel Operatörler


||  Mantıksal operatörler


~  Bitsel Operatörler


+  Aritmetik operatörler, Dizi Operatörleri


+= ve -=  Atama Operatörleri


++ ve --  Artırma / Azaltma Operatörleri


.=  Atama Operatörleri


.  Dize Operatörleri


,  İşlev Argümanları

,  Değişken Bildirimler


$$  Değişken değişkenler


`  Yürütme Operatörü


<?=  Kısa Açık Etiketler


[]  Diziler (PHP 5.4'ten beri kısa sözdizimi)


<?  Etiketleri açma ve kapatma


...  Bağımsız değişken açmak (PHP 5.6'dan beri)


**  Üs (PHP 5.6'dan beri)


#  Tek satır kabuk stili yorum



3793


Menşei


Bunun kesinlikle PHP olmadığını biliyorum, ancak bir bağlantı da dahil olmak üzere phpdoc.org yaygın olarak kullanılan phpDocumentor yorum sözdizimi için ve aynı zamanda aramak mümkün değildir /**? - Mike
Köşeli ayraç ve kıvrık ayraç önerebilir miyim? - ajreal
Bu soruna çok rastladım (özel karakterler aramama), bu yüzden yaptım SymbolHoundÖzel karakterleri göz ardı eden bir arama motoru. Ben de yayınladım StackApps. - dncrane
Eh, başlıktan Bu neden?Sanırım bunun nedeni "Ana fikir, Yığın Taşması ile ilgili mevcut sorulara bağlantılar sağlamaktır, bu yüzden onlara referans vermemiz daha kolay". - Herbert
Bugün bir soru soruldu (Nov.20 / 15) stackoverflow.com/questions/33833259/what-is-rscat-in-php sormak "Php'de rsCat nedir" (Bu soru hala görünür ve silinmemelidir). Garip bir şekilde, bir referans yok $ değişken, ama hakkında $$ Sadece değişken değişkenler. Bunun bir yerde değiştirilmesi gerektiğine inanıyorum. - Funk Forty Niner


Cevaplar:


Artırma / Azaltma Operatörleri

++ arttırma operatörü

-- azaltma operatörü

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.

Bunlar değişkenden önce veya sonra gidebilir.

Değişkenden önce koyulursa, artış / azaltma işlemi değişkene yapılır. ilk sonra sonuç iade edilir. Değişkenden sonra koyulursa değişken ilk döndü, sonra artış / azaltma işlemi yapılır.

Örneğin:

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

Canlı örnek

Yukarıdaki durumda ++$i Daha hızlı olduğu için kullanılır. $i++ aynı sonuçları olurdu.

Ön artırma biraz daha hızlıdır, çünkü değişkeni gerçekten arttırır ve bundan sonra sonucu döndürür. Artış sonrası, özel bir değişken oluşturur, ilk değişkenin değerini kopyalar ve sadece ilk değişken kullanıldığında, değerini saniye ile değiştirir.

Ancak, kullanmalısınız $apples--, ilk önce mevcut elma sayısını görüntülemek istediğinizde, ve sonra ondan bir tane çıkarmak istersiniz.

PHP'de harfleri de artırabilirsiniz:

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

bir Zamanlar z ulaşıldı aa sonraki, vb.

Karakter değişkenlerinin artırılabileceğini, ancak azalmayacağını ve sadece düz ASCII karakterlerinin (a-z ve A-Z) desteklendiğini unutmayın.


Yığın Taşma Mesajları:


950



Fark, sadece hızdan çok daha fazlasıdır ... $ x = 0; $ y = $ x ++; $ x = 0 ile karşılaştırıldığında; $ y = ++ $ x; ve her bir durumda $ y'nin değeri - Mark Baker
Ekspresörlerin karakterler üzerinde çalışmadığı, yalnızca sayılarla ilgili not için +1 - Mark Baker
Herkesin hatırı için, önceden ön artırmaya ilişkin olarak daha az hızlı olan kalın bilgileri kaldırın. Bu, erken optimizasyonun mutlak en kötü örneğidir ve eğer PHP'yi öğrenmeye yeni başlıyorlarsa, bu tür bilgi insanların kafalarında olmamalıdır. - Lotus Notes
@Lotus - Bunu eğlenceli bir gerçek olarak görüyorum. Eğer PHP'ye veya C ++'ye yeni başlayan biriyseniz, ++ i ve i ++ 'nın farklı hızlarda çalışmak için yeterince farklı olması oldukça garip gözüküyor. Büyüleyici buldum. - Peter Ajtai
@Peter Ajtai Evet, ilginç, ama postunuzu yapılandırdığınız şekilde, dili kullanmak için kesinlikle hayati önem taşıyan PHP'nin en önemli gerçeklerinden biri gibi görünüyorsunuz. - Lotus Notes


Bitsel Operatör

Biraz nedir? Bir bit 1 veya 0'ın bir gösterimidir. Temel olarak OFF (0) ve ON (1)

Bayt nedir? Bir bayt 8 bitten oluşur ve bir baytın en yüksek değeri 255'tir, bu da her bitin ayarlandığı anlamına gelir. Bir baytın neden maksimum değerinin 255 olduğunu göreceğiz.

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

1 baytlık bu temsil

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

Daha iyi anlamak için birkaç örnek

"VE" operatörü: &

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

Bu sayı 8 çıktı. Neden? Peki bizim tablo örneğimizi kullanarak görelim.

-------------------------------------------
|      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|
------------------------------------------- 

Tablodan görebildiğiniz tek şey, birlikte paylaştıkları tek bit 8 bit.

İkinci örnek

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

Paylaşılan iki bit 32 ve 4'tür, birlikte eklendiğinde birlikte 36 döner.

"Or" operatörü: |

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

Bu, 11 sayısını çıkarırdı. Neden?

-------------------------------------------
|      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|
-------------------------------------------

8, 2 ve 1 sütunlarda 3 bite ayarladığımızı göreceksiniz. Bunları ekleyin: 8 + 2 + 1 = 11.


361



Ya a $ 255'ten daha büyük bir değer alırsa? - Aycan Yaşıt
Online bir hesap makinesi var: bitwiseoperatorcalculator.com - jonprasetyo
@ AycanYaşıt İşletim sisteminin çoğu 32 bit ve 64 bit sistem kullanıyor, yani limit 255'ten (8 bit) fazla. - AlbertSamuel
@ AycanYaşıt Aslında, bir bayt uzunluğundaki temsil bile doğru değil, en küçük tamsayı bile 64 bitlik bir platformda bellekte 64 bit (8 byte). - Kaii


_  Gettext () için diğer ad 

'_' Alt çizgi karakteri _() bir takma addır gettext() işlevi.


225





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
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"

210





Sihirli sabitler: Bunlar sadece semboller değil, bu belirteci ailesinin önemli bir parçası olmakla birlikte. Nerede kullanıldığına bağlı olarak değişen sekiz büyülü sabit vardır.

__LINE__: Dosyanın geçerli satır numarası.

__FILE__: Dosyanın tam yolu ve dosya adı. İçerisinde kullanılırsa, dahil edilen dosyanın adı döndürülür. PHP 4.0.2'den beri __FILE__ her zaman, symlinks çözümlenmiş bir mutlak yol içerirken, daha eski sürümlerde, bazı durumlarda göreceli yol içeriyordu.

__DIR__: Dosyanın dizini. İçerisinde kullanılırsa, dahil edilen dosyanın dizini döndürülür. Bu eşdeğerdir dirname(__FILE__). Bu dizin adı, kök dizini olmadığı sürece bir iz bırakma çizgisine sahip değildir. (PHP 5.3.0'da eklendi.)

__FUNCTION__: İşlev adı. (PHP 4.3.0'da eklendi) PHP 5'ten itibaren bu sabit, bildirildiği gibi işlev ismini döndürür (büyük küçük harf duyarlı). PHP 4'te değeri her zaman küçültülür.

__CLASS__: Sınıf adı. (PHP 4.3.0'da eklendi) PHP 5'ten itibaren, bu sabit, bildirildiği gibi sınıf adını döndürür (büyük küçük harf duyarlı). PHP 4'te değeri her zaman küçültülür. Sınıf adı, bildirildiği ad alanını içerir (ör. Foo\Bar). PHP 5.4'ten itibaren unutmayın. __CLASS__ özellikleri de çalışır. Bir özellik yönteminde kullanıldığında, __CLASS__ özelliğin kullanıldığı sınıfın adıdır.

__TRAIT__: Özellik adı. (PHP 5.4.0'a eklendi) PHP 5.4'ten itibaren bu sabite, bildirildiği gibi özelliği döndürür (büyük / küçük harfe duyarlı). Özellik adı, içinde bildirildiği ad alanını içerir (ör. Foo\Bar).

__METHOD__: Sınıf yöntem adı. (PHP 5.0.0'da eklendi) Yöntem adı, bildirildiği gibi döndürülür (büyük / küçük harf duyarlı).

__NAMESPACE__: Geçerli ad alanının adı (büyük / küçük harf duyarlı). Bu sabit derleme zamanında tanımlanır (PHP 5.3.0'da eklenmiştir).

Kaynak


194





<=> Uzay Gemisi Operatörü

PHP 7'de eklendi

uzay gemisi operatörü  <=> PHP 7'de eklenen en son karşılaştırma operatörüdür. birleştirici olmayan Eşitlik operatörleri ile aynı önceliğe sahip ikili operatör (==, !=, ===, !==). Bu operatör, sol el ve sağ işlenenler arasında daha basit üç yönlü karşılaştırmaya izin verir.

Operatör bir tamsayı ifadesiyle sonuçlanır:

  • 0 her iki işlenen eşit olduğunda
  • Daha az 0 Soldaki işlenen sağ işlenenden daha az olduğunda
  • Daha büyük 0 soldaki işlenen sağ işlenenden daha büyük olduğunda

Örneğin.

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

Bu operatörü kullanmanın iyi ve pratik bir uygulaması, iki değer arasındaki üçlü bir karşılaştırmaya dayalı olarak sıfır, negatif veya pozitif bir tamsayı döndürmesi beklenen karşılaştırma tipi geri aramalarda olacaktır. Karşılaştırma işlevi usort böyle bir örnek.

PHP 7'den önce yazarsın ...

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

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

PHP 7'den beri yazabilirsiniz ...

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

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

189



Nasıl emin değil $a <=> $b farklıdır $a - $b - rev
@AcidShout $a - $b Sayılar için çalışır, ancak dizeleri, nesneleri veya dizileri değil. - mcrumley
@mcrumley Hayır, bundan daha kötü. Genel olarak $a - $b sayılar için bile çalışmıyor; sadece için çalışıyor tamsayılar. Tamsayı olmayan sayılar için çalışmıyor, çünkü usort karşılaştırıcı işlevinizin dönüş değerlerini atar intYani, 0, 0'a dönüşür demektir, yani, 4 ve 4.6 gibi, 1'den daha küçük bir fark olan iki sayı, (karşılaştırıcı işlevinize ilk argüman olarak hangisinin aktarıldığına bağlı olarak) yanlış olarak eşit olarak karşılaştırılabilir. - Mark Amery
@MarkAmery taşıma rehberi operatörün belgelenmiş davranışı değildir. Bunun için bu kılavuzun dil operatörleri bölümüne bakmak istersiniz. php.net/language.operators.comparison Bunun arkasındaki gerçek davranış, her bir durumda gerçek dönüş değerini garanti edemediğiniz dizeler için strcmp yaptığınızda olduğu gibi API'nın çeşitli karşılaştırma işlevlerine dayanır. Tabii ki, hemen hemen her zaman 1, 0 veya -1'dir, ancak libc'nin strcmp'ini sarmak gibi bir garanti veremeyeceğiniz durumlar için, güvende olmanız gereken temel özellik olarak aynı tanımlı davranışı sunarsınız. - Sherif
@MarkAmery Burada nokta, insanların tanımlanmamış davranışlara güvenmelerine izin vermemek. Birisinin tam olarak 1, 0 veya -1 olmayan bir değer alması durumunda, bir hata bildirimi yapan biri, dilde yanlış bir şey olduğunu düşünüyor. Bu yüzden, garanti edebileceğimiz her şeyin değer olacağını belgeliyoruz. daha az, daha büyükveya eşittir 0 ve zorunlu olarak 1, 0 ve -1 değil. - Sherif


Tip Operatörleri

instanceof PHP değişkeninin belirli bir sınıfın örneklenmiş bir nesnesi olup olmadığını belirlemek için kullanılır.

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

Yukarıdaki örnek çıktı olacak:

bool(true)
bool(false)

Sebep: Yukarıdaki Örnek $a bir nesnesidir mclass bu yüzden sadece bir mclass ile veri örneği sclass

Kalıtım ile örnek

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

Yukarıdaki örnek çıktı olacak:

bool(true)
bool(true)

Klonla Örnek

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

Yukarıdaki örnek çıktı olacak:

bool(true)
bool(true)

121



Yukarıdakiler 'arayüzler' ile de çalışır. Bu, belirli bir arayüzün mevcut olup olmadığını kontrol etmek için kullanışlıdır. - Ryan Vincent


Genel Bakış PHP'de operatörler:


Mantıksal operatörler:

  • $ a && $ b: Hem a $ a hem de $ b DOĞRU ise TRUE.
  • $ a || $ b: DOĞRU, eğer a $ a veya $ b DOĞRU ise.
  • $ xor $ b: DOĞRU, $ a veya $ b DOĞRU ise, ancak ikisi de değil.
  • ! $ a: DOĞRU ise a $ DOĞRU değil.
  • $ a ve $ b: Hem a $ a hem de $ b DOĞRU ise TRUE.
  • $ a veya $ b: DOĞRU, eğer a $ a veya $ b DOĞRU ise.

Karşılaştırma operatörleri:

  • $ a == $ b: TRUE, tür hokkabazlık sonrası $ b'ye eşitse.
  • $ a === $ b: DOĞRU, $ a, $ b'ye eşitse ve aynı türdeyse.
  • $ a! = $ b: TRUE, tür hokkabazlık sonrası $ b'ye eşit değilse.
  • $ a <> $ b: TRUE, tür hokkabazlık sonrası $ b'ye eşit değilse.
  • $ a! == $ b: DOĞRU, $ a, $ b'ye eşit değilse veya aynı türde değilse.
  • $ a <$ b : $ A, $ b'den az ise TRUE.
  • $ a> $ b : $ A, $ b'den büyükse TRUE.
  • $ a <= $ b : $ A, $ b'den küçük veya ona eşitse TRUE.
  • $ a> = $ b : $ A, $ b'den büyükse veya eşitse TRUE.
  • $ a <=> $ b : $ A, sırasıyla $ b'den küçük, eşit veya daha büyükse, sıfırdan küçük, eşittir veya sıfırdan büyük bir tam sayı. PHP 7'den itibaren mevcut.
  • $ a? $ b: $ c : $ $ bir dönüş $ b ise, $ c döndürürseüçlü operatör)
  • $ a? $ c : $ A ile aynı mı? $ a: $ c (sıfır birleştirici operatör - PHP gerektirir = 7)

Aritmetik operatörler:

  • - $ a : $ A karşısında.
  • $ a + $ b : $ A ve $ b toplamı.
  • $ a - $ b : $ A ve $ b Farkı.
  • $ a * $ b : $ A ve $ b ürünü.
  • $ a / $ b : $ A ve $ b bölümü.
  • $ a% b : $ A payı, $ b.
  • $ a ** $ b : $ B'th gücüne $ a yükselme sonucu (PHP 5.6'da tanıtıldı)

Artırma / Azaltma Operatörleri:

  • ++ $ a : Birer birer birer birer artar, sonra da $ a verir.
  • $ a ++ : $ A değerini döndürür, sonra da birer birer artırır.
  • - $ a : $ A tek tek azalır, sonra $ a verir.
  • $ bir-- : $ A değerini döndürür, ardından birer birer dolar azaltır.

Bitsel Operatörler:

  • $ a & $ b : $ A ve $ b olarak ayarlanan bitler ayarlanır.
  • $ a | $ b : $ A veya $ b olarak ayarlanmış bitler ayarlanır.
  • $ a ^ $ b : $ A veya $ b olarak ayarlanmış ancak her ikisi de ayarlanmamış bitler.
  • ~ $ a : $ A olarak ayarlanan bitler ayarlanmaz ve bunun tersi de geçerlidir.
  • $ a $ b : $ A $ b adımındaki bitleri sola kaydırın (her adım "ikiyle çarpma" anlamına gelir)
  • $ a >> $ b : $ A $ b adımındaki bitleri sağa kaydırın (her adım "ikiye böler" anlamına gelir)

Dize Operatörleri:

  • $ a. $ b : $ A ve $ b'nin birleştirilmesi.

Dizi operatörleri:

  • $ a + $ b: $ A ve $ b Birliği.
  • $ a == $ b : $ A ve $ b aynı anahtar / değer çiftine sahipse TRUE.
  • $ a === $ b : $ A ve $ b aynı sırada ve aynı türdeki aynı anahtar / değer çiftine sahipse TRUE.
  • $ a! = $ b : $ A, $ b'ye eşit değilse TRUE.
  • $ a <> $ b : $ A, $ b'ye eşit değilse TRUE.
  • $ a! == $ b : $ A, $ b ile aynı değilse TRUE.

Atama Operatörleri:

  • $ a = $ b : $ B değeri $ a'ya atandı
  • $ a + = $ b : $ A = $ a + $ b ile aynı
  • $ a - = $ b : $ A = $ a - $ b ile aynı
  • $ a * = $ b : $ A = $ a * $ b ile aynı
  • $ a / = $ b : $ A = $ a / $ b ile aynı
  • $ a% = $ b : $ A = $ a% $ b ile aynı
  • $ a ** = $ b : $ A = $ a ** $ b ile aynı
  • $ a. = $ b : $ A = $ a ile aynı. $ b
  • $ a & = $ b : $ A = $ a & $ b ile aynı
  • $ a | = $ b : $ A = $ a ile aynı | $ b
  • $ a ^ = $ b : $ A = $ a ^ $ b ile aynı
  • $ a << = $ b : $ A = $ a << $ b ile aynı
  • $ a >> = $ b : $ A = $ a >> $ b ile aynı

Not

and operatör ve or operatör, görevlendirme operatöründen daha düşük önceliğe sahiptir =.

Bu şu demek $a = true and false; eşdeğerdir ($a = true) and false.

Çoğu durumda muhtemelen kullanmak isteyeceksiniz && ve ||C, Java veya JavaScript gibi dillerden bilinen bir şekilde davranır.


96