Referans - Bu sembol PHP'de ne anlama geliyor?


4477

Bu nedir?

Bu, PHP'de sözdizimi hakkında her zaman ortaya çıkan bir soru topluluğudur. Bu aynı zamanda bir Topluluk Wiki'sidir, bu nedenle herkes bu listeyi korumaya katılmaya davet edilir.

Bu neden?

Operatörler ve diğer sözdizimi jetonları hakkında sorular bulmak zordu. ¹
Ana fikir, Yığın Taşması ile ilgili mevcut sorulara bağlantılara sahip olmaktır, bu nedenle PHP Kılavuzundan içerik kopyalamak yerine onlara referans vermemiz daha kolaydır.

Not: Ocak 2013'ten bu yana Yığın Taşması özel karakterleri destekliyor . Arama terimlerini tırnak işareti içine alın, ör.[php] "==" vs "==="

Burada ne yapmalıyım?

Eğer böyle bir soru sorduğunuz için burada birisi size yöneltilmişse, lütfen aşağıdaki sözdizimini bulun. Bağlantılı sorularla birlikte PHP kılavuzuna bağlı sayfalar muhtemelen sorunuza cevap verecektir. Eğer öyleyse, cevabı iptal etmeniz teşvik edilir. Bu liste, başkalarının sağladığı yardımın yerine geçmez.

Liste

Özel simgeniz aşağıda listelenmemişse , Ayrıştırıcı Jetonları Listesinde bulabilirsiniz .


& Bitsel İşleçler veya Referanslar


=& Referanslar


&= Bitsel İşleçler


&& Mantıksal operatörler


% Aritmetik operatörler


!! Mantıksal operatörler


@ Hata Kontrol Operatörleri


?: Üçlü operatör


?? Null Coalesce Operator (PHP 7'den beri)


?string ?int ?array ?bool ?float Null olabilecek dönüş türü bildirimi (PHP 7.1'den beri)


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


:: Kapsam Çözümleme İşleci


\ Ad alanları


-> Sınıflar ve Nesneler


=> Diziler


^ Bitsel İşleçler


>> Bitsel İşleçler


<< Bitsel İşleçler


<<< Yorumlu metin 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 İşleçler


|| Mantıksal operatörler


~ Bitsel İşleçler


+ Aritmetik İşleçler , Dizi İşleçleri


+=ve -= Atama Operatörleri


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


.= Atama Operatörleri


. Dize İşleçleri


, İşlev Bağımsız Değişkenleri

, Değişken Beyanları


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


` Yürütme İşleci


<?= 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çma (PHP 5.6'dan beri)


** Üstelleştirme (PHP 5.6'dan beri)


# Tek satır kabuk stili yorum


:? Sıfırlanabilir dönüş türleri


?-> NullSafe Operatör Çağrıları



36
Bu kesinlikle PHP olmadığını biliyorum, ama phpDocumentor yorum sözdizimi için phpdoc.org için bir bağlantı dahil hakkında ne yaygın olarak kullanılan ve aramak da imkansız /**?
Mike

8
Köşeli ayraç ve kıvırcık ayraç önerebilir miyim?
ajreal

124
Bu soruna da çok fazla girdim (özel karakterleri arayamıyorum ), bu yüzden özel karakterleri görmezden gelmeyen bir arama motoru olan SymbolHound'u yaptım . Bunu StackApps'ta da yayınladım .
dncrane

1
Peki, neden bu? , Sanırım bunun nedeni, "Ana fikir, Yığın Taşması ile ilgili mevcut soruların bağlantılarına sahip olmaktır, bu yüzden onlara referans vermemiz daha kolay" dır.
Herbert

3
Bir soru bugün (Nov.20 / 15) istendi stackoverflow.com/questions/33833259/what-is-rscat-in-php soruyor "php $ rsCat nedir" (bu soruyu hala görünür hale değil silinmelidir) . Garip bir şekilde, $değişken hakkında bir referans yok, sadece değişken değişkenler hakkında bir referans var $$. Bunun bir yerde değiştirilmesi gerektiğine inanıyorum.
Funk Forty Niner

Yanıtlar:


1171

Arttırma / Azaltma Operatörleri

++ arttırma operatörü

-- eksiltme 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şkenin önüne veya arkasına gidebilir.

Değişken önce koymak için, arttırma / azaltma işlemi değişken için yapılır önce daha sonra sonucu geri gönderilir. Değişkenin arkasına konulursa, değişken ilk olarak döndürülür, ardından 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ı verir.

Ön artış 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 yaratır, oraya ilk değişkenin değerini kopyalar ve sadece ilk değişken kullanıldıktan sonra değerini ikincilerle değiştirir.

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

PHP'deki harfleri de artırabilirsiniz:

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

Bir kez zulaşıldıktan sonra , aavb.

Karakter değişkenlerinin artırılabileceğini ancak azaltılamayacağını ve buna rağmen yalnızca düz ASCII karakterlerinin (az ve AZ) desteklendiğini unutmayın.


Yığın Taşması Mesajları:


9
Decrementers karakterlerde, sadece sayılar üzerinde çalışmadığını not için +1
Mark Baker

163
Herkes uğruna, lütfen ön artırmanın kademesiz olarak daha hızlı olmasıyla ilgili cesur bilgileri kaldırın. Bu, erken optimizasyonun en kötü örneğidir ve bu tür bilgiler, PHP öğrenmeye yeni başlıyorlarsa insanların kafasında olmamalıdır.
Lotus Notes

14
@Lotus - Bunu eğlenceli bir gerçek olarak düşünüyorum. PHP ya da C ++, acemi iseniz, ++ i ve i ++ 'ın farklı hızlarda çalışacak kadar farklı olması oldukça tuhaf görünüyor. Büyüleyici buldum.
Peter Ajtai

12
@Peter Ajtai Evet, ilginç, ancak yazınızı yapılandırdığınız yoldan, dili kullanmak için kesinlikle hayati olan PHP'nin asıl gerçeklerinden biri gibi görünmesini sağlıyorsunuz.
Lotus Notes

4
Sadece ben olup olmadığımdan emin değilim, ama elma örneği biraz yanıltıcı görünüyor. 10 elmam var. Ben sadece bir tane yedim 'bana 11 elma olduğuna inanıyor, ama şimdi 10 var çünkü 10 olduğunu söyledikten sonra sadece bir tane yiyorsun, böylece 9'a sahip oluyorsun - bu da kodun ima ettiği şey.
15:59

440

Bitsel Operatör

Biraz nedir? Bir bit, 1 veya 0'ın temsilidir. Temel olarak KAPALI (0) ve AÇIK (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 maksimum değerinin neden 255 olduğunu inceleyeceğiz.

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

Bu 1 Byte'ın temsili

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

Daha iyi anlamak için birkaç örnek

"AND" operatörü: &

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

Bu 8 sayısını çıkaracaktır. Neden? Tablo örneğimizi kullanarak bir bakalım.

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

Böylece tablodan birlikte paylaştıkları tek bitin 8 bit olduğunu görebilirsiniz.

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

"Veya" işleci: |

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

Bu 11 sayısını çıkaracaktır. 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ütunlarında 3 bit ayarlandığımızı göreceksiniz. Bunları ekleyin: 8 + 2 + 1 = 11.


6
$ A değeri 255'ten büyük bir değer alırsa ne olur?
Aycan Yaşıt

@ 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, modern bir 64bit platformda bellekte en küçük tamsayı bile hala 64 bit (8 bayt) olduğu için burada bir bayt uzunluğundaki temsil doğru değil.
Kaii

Neden and &olduğunu 0 0 0 0 1 0 0 0 ve or |bir 0 0 0 0 1 0 1 1?
Vir

285

<=> Uzay Gemisi Operatörü

PHP 7'de eklendi

Uzay gemisi operatörü <=> Bu bir olan PHP 7'de eklenen son karşılaştırma operatörüdür birleştirici olmayan eşitlik operatörleri aynı öncelik sırasına sahip ikili operatör ( ==, !=, ===, !==). Bu operatör, sol ve sağ el işlenenleri arasında daha basit üç yönlü karşılaştırmaya olanak tanır.

Operatör aşağıdakilerin tamsayı ifadesiyle sonuçlanır:

  • 0 her iki işlenen eşit olduğunda
  • Küçüktür 0sol işlenen az sağ işlenen uzun olduğunda
  • Büyüktür 0soldaki işlenen sağ işlenen daha büyük olduğunda

Örneğin

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

Bu operatörü kullanmanın iyi bir pratik uygulaması, iki değer arasındaki üç yönlü karşılaştırmaya dayanarak sıfır, negatif veya pozitif bir tamsayı döndürmesi beklenen karşılaştırma türü geri çağrıları olacaktır. Aktarılan karşılaştırma işlevi usortböyle bir örnektir.

PHP 7'den önce ...

$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;
});

21
Nasıl $a <=> $bfarklı olduğundan emin değilim$a - $b
rev

38
@AcidShout $a - $bsayılar için çalışır, ancak dizeler, nesneler veya diziler için çalışmaz .
mcrumley

44
@mcrumley Hayır, bundan daha kötü. Genel $a - $bolarak sayılar için bile çalışmaz; yalnızca tamsayılar için çalışır . Tamsayı olmayan sayılar için çalışmaz, çünkü usortkarşılaştırıcı işlevinizin dönüş değerlerini çevirir int, yani 0,5'e eşitlenir, yani 4 ve 4,6 gibi 1'den az farklı iki sayı ( hangisinin karşılaştırıcı işlevinize ilk argüman olarak geçtiği) yanlış olarak eşit olarak karşılaştırın.
Mark Amery

5
@MarkA geçiş kılavuzu, operatörün belgelenmiş davranışı değildir. Bunun için bu php.net/language.operators.comparison kılavuzunun dil operatörleri bölümüne bakmak istersiniz, bunun arkasındaki gerçek davranış, dizeler için strcmp yaptığınız gibi, API'nın çeşitli karşılaştırma işlevlerine dayanır. her durumda gerçek dönüş değerini garanti edemezsiniz. Elbette, neredeyse her zaman 1, 0 veya -1'dir, ancak libc'nin strcmp'sini sarmak gibi garanti edemediğiniz durumlarda, güvende olmak için altta yatan spesifikasyonla aynı tanımlanmış davranışı
Şerif

9
@MarkAmery Buradaki nokta, insanların tanımlanmamış davranışlara güvenmesine izin vermemek. Birinin tam olarak 1, 0 veya -1 olmayan bir değer aldığı bir durumda, birisinin dilde yanlış bir şey olduğunu düşünen bir hata raporu gönderirsiniz. Hangi biz garanti edemez bütün bu değer olacaktır olduğunu belgelemek neden az , daha büyük ya da hiç eşit 0 ve mutlaka 1, 0 ve -1.
Şerif


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

Sihirli sabitler : Her ne kadar bunlar sadece semboller değil aynı zamanda bu token ailesinin önemli bir parçası. Nerede kullanıldıkları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ı. Bir içerme içinde kullanılırsa, eklenen dosyanın adı döndürülür. PHP 4.0.2'den beri, __FILE__sembollerin çözüldüğü her zaman mutlak bir yol içerirken, eski sürümlerde bazı durumlarda göreceli yol içerir.

__DIR__: Dosyanın dizini. Bir içerme içinde kullanılırsa, eklenen dosyanın dizini döndürülür. Bu eşdeğerdir dirname(__FILE__). Bu dizin adında, kök dizin olmadığı sürece bir eğik çizgi yoktur. (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 adını döndürür (büyük / küçük harfe duyarlı). PHP 4'te değeri her zaman küçüktü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 harfe duyarlı). PHP 4'te değeri her zaman küçüktür. Sınıf adı, içinde bildirildiği ad alanını içerir (örn. Foo\Bar). PHP 5.4'ten itibaren __CLASS__özelliklerde de çalıştığını unutmayın . Bir özellik yönteminde __CLASS__kullanıldığında, özelliğin kullanıldığı sınıfın adıdır.

__TRAIT__: Özellik adı. (PHP 5.4.0'da eklenmiştir) PHP 5.4'ten itibaren bu sabit, 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 (örn. Foo\Bar).

__METHOD__: Sınıf yöntemi adı. (PHP 5.0.0'da eklendi) Yöntem adı bildirildiği gibi döndürülür (büyük / küçük harfe 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 eklendi).

Kaynak


150

Türü Operatörler

instanceof PHP değişkeninin belirli bir sınıfın somutlaştırılmış 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ı verecektir:

bool(true)
bool(false)

Sebep: Yukarıdaki Örnek$a bir amacı, mclassbu nedenle kullanımı yalnızca mclassveri olmayan örneğisclass

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ı verecektir:

bool(true)
bool(true)

Klon ile Örnek

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

Yukarıdaki örnek çıktı verecektir:

bool(true)
bool(true)

7
Yukarıdaki '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

133

PHP'deki operatörlere genel bakış :


Mantıksal operatörler:

  • $ a && $ b: Hem $ a hem de $ b DOĞRU ise DOĞRU.
  • $ a || $ b: $ a veya $ b DOĞRU ise DOĞRU.
  • $ a xor $ b: $ a veya $ b DOĞRU ise, her ikisi birden değilse DOĞRU.
  • ! $ a: $ a DOĞRU değilse DOĞRU.
  • $ a ve $ b: Hem $ a hem de $ b DOĞRU ise DOĞRU.
  • $ a veya $ b: $ a veya $ b DOĞRU ise DOĞRU.

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

  • $ a == $ b: $ a, tür hokkabazlıktan sonra $ b'ye eşitse DOĞRU.
  • $ a === $ b: $ a $ b'ye eşitse DOĞRU ve aynı türdeyse.
  • $ a! = $ b: $ a, tür hokkabazlıktan sonra $ b ile eşit değilse DOĞRU.
  • $ a <> $ b: $ a, tür hokkabazlıktan sonra $ b'ye eşit değilse DOĞRU.
  • $ a! == $ b: $ a $ b ile aynı değilse veya aynı türde değilse DOĞRU.
  • $ a <$ b : $ a kesinlikle $ b'den küçükse TRUE.
  • $ a> $ b : $ a kesinlikle $ b'den büyükse DOĞRU.
  • $ a <= $ b : $ a $ b'den küçük veya ona eşitse DOĞRU.
  • $ a> = $ b : $ a $ b'den büyük veya ona eşitse DOĞRU.
  • $ a <=> $ b : $ a sırasıyla $ b değerine eşit, daha düşük veya eşit olduğunda sıfırdan küçük, eşit veya sıfırdan büyük bir tam sayı. PHP 7'den beri mevcuttur.
  • $ a? $ b: $ c : $ a döndürürse $ b else $ c döndürür ( üçlü operatör )
  • $ a ?? $ c : $ a ile aynı mı? $ a: $ c ( boş birleştirme operatörü - PHP> = 7 gerektirir)

Aritmetik operatörler:

  • - $ a : $ a'nın karşısında.
  • $ a + $ b : $ a ve $ b tutarının toplamı.
  • $ a - $ b : $ a ve $ b arasındaki fark.
  • $ a * $ b : $ a ve $ b ürünü.
  • $ a / $ b : $ a ve $ b bölümü.
  • $ a% $ b : $ a'nın kalan kısmı $ b'ye bölünür.
  • $ a ** $ b : $ a'nın $ b'th gücüne yükseltilmesinin sonucu (PHP 5.6'da tanıtıldı)

Artan / Azaltan Operatörler:

  • ++ $ a : $ a'yı birer birer artırır, ardından $ a değerini döndürür.
  • $ a ++ : $ a değerini döndürür, ardından $ a değerini birer birer artırır.
  • - $ a : $ a'yı birer birer azaltır, sonra $ a döndürür.
  • $ a-- : $ a değerini döndürür, ardından $ a değerini birer birer azaltır.

Bitsel İşleçler:

  • $ a & $ b : Hem $ a hem de $ b'de ayarlanan bitler ayarlanır.
  • $ a | $ b : $ a veya $ b olarak ayarlanan bitler ayarlanır.
  • $ a ^ $ b : $ a veya $ b olarak ayarlanmış ancak her ikisi birden ayarlanmamış bitler.
  • ~ $ a : $ a olarak ayarlanan bitler ayarlanmaz ve tersi de geçerlidir.
  • $ a << $ b : $ a $ b adımlarının bitlerini sola kaydır (her adım "ikiyle çarp" anlamına gelir)
  • $ a >> $ b : $ a $ b adımlarının bitlerini sağa kaydır (her adım "ikiye böl" anlamına gelir)

Dize İşleçleri:

  • $ a. $ b : $ a ve $ b birleşimi.

Dizi İşleçleri:

  • $ a + $ b : $ a ve $ b birliği.
  • $ a == $ b : $ a ve $ b aynı anahtar / değer çiftlerine sahipse TRUE.
  • $ a === $ b : $ a ve $ b aynı anahtar / değer çiftlerine aynı sırada ve aynı türde sahipse DOĞRU.
  • $ a! = $ b : $ a $ b ile eşit değilse DOĞRU.
  • $ a <> $ b : $ a $ b ile eşit değilse DOĞRU.
  • $ a! == $ b : $ a $ b ile aynı değilse DOĞRU.

Atama Operatörleri:

  • $ a = $ b : $ b değeri $ a değerine atanır
  • $ 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

andoperatör ve oroperatör atama operatöründen daha düşük önceliğe sahiptir =.

Bu $a = true and false;, eşdeğer anlamına gelir ($a = true) and false.

Çoğu durumda, kullanmak isteyeceksiniz &&ve ||C, Java veya JavaScript gibi dillerden bilinen bir şekilde davranacaksınız.


1
Bir hata var $a ?? $c, diyor ki, aynıdır $a ? $a : $c, ancak üçlü operatör değerin doğru olup olmadığını kontrol eder, diğer yandan boş değer birleştirme boş değerleri kontrol eder, bu yüzden $ a 0 ise, 0 alırsınız (0, değil null), örneğin varsa: $a=0; $c=5;o zaman $a?$a:$c5 ve döner $a??$c0. döner
stramin

104

Uzay Gemisi İşleci<=> (PHP 7'de Eklendi)

<=>Uzay gemisi operatörü için örnekler (PHP 7, Kaynak: PHP Manual):

Değişkenlerin üç yönlü karşılaştırması için Tamsayılar, Kayan Noktalar, Dizeler, Diziler ve nesneler.

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

{} Kıvırcık parantez

Ve son gönderi hakkında bazı kelimeler

$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
özellik adları için gösterim. echo $ movies-> film -> {'harika çizgiler'} -> çizgi; SimpleXMLElement içindeki verilere erişmek için kullanılabilir. Belki başka durumlarda da kullanılabilir. php.net/manual/tr/simplexml.examples-basic.php
Andrei

68

Boş birleştirme operatörü (??)

Bu işleç, bir üçlü işleci ile birlikte kullanılması gerektiğinin yaygın olduğu durumlar için PHP 7.0'da eklenmiştir isset(). Varsa ve değilse ilk işlenenini döndürür NULL; aksi takdirde ikinci işlenişini döndürür.

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

PHP Dizeleri: PHP Dizeleri sadece iki yolla değil dört yolla belirtilebilir:

1) Tek Alıntı Dizeleri:

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

2) Çift Alıntı Dizeleri:

$str = 'string';

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

3) Yorumlu metin:

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

4) Nowdoc (PHP 5.3.0'dan beri):

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

@ Rizier123: "Yorumlu metinler sınıf özelliklerini başlatmak için kullanılamaz. PHP 5.3'ten bu yana, bu sınırlama yalnızca değişken içeren yorumlu metinler için geçerlidir."
PHPFan

48

SORU:

Ne anlama =>geliyor?


CEVAP:

=>İnsanların "Key" => "Value"İlişkisel Dizilerdeki çiftleri ayırmak için kullanmaya karar verdiğimiz semboldür .

tertipleyerek:

Bunu anlamak için İlişkisel Dizilerin ne olduğunu bilmeliyiz. Geleneksel bir programcı bir dizi ( PHP'de ) düşündüğünde ortaya çıkan ilk şey şuna benzer:

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

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

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

Kodun daha sonraki bir bölümünde diziyi çağırmak istersek şunları yapabiliriz:

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

Çok uzak çok iyi. Ancak, insan olarak, biz zor olduğunu endeks hatırlamak bulabilir [0]dizinin değeridir yıl 2016, endeks [1]dizinin bir olduğunu selam ve endeks [2]dizisinin basit bir tamsayı değeri . O zaman sahip olacağımız alternatif, İlişkisel Dizi olarak adlandırmaktır . İlişkilendirilebilir bir dizi, Sıralı Diziden birkaç farklılığa sahiptir ( önceki durumların önceden belirlenmiş bir dizide kullanılan dizini, aşağıdaki her değer için 1 artarak arttırabildikleri için budur ).

Farklılıklar ( sıralı ve ilişkilendirilebilir dizi arasında ):

  • İlişkilendirilebilir Bir valueDizinin bildirimini almak için, yalnızca diziye ne koymak istediğinizi eklemezsiniz, aynı zamanda keydiziyi daha sonraki bölümlerinde çağırırken kullanmak istediğiniz dizin değerini (olarak adlandırılır ) da koyarsınız . kodu. Aşağıdaki sözdizimi 's beyanı sırasında kullanılır: "key" => "value".

  • İlişkilendirilebilir Dizi kullanılırken, keydeğer istenen diziyi almak için dizinin dizinine yerleştirilir value.

Örneğin:

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

Ve şimdi, daha önce olduğu gibi aynı çıktıyı almak için, keydeğer diziler dizininde kullanılır:

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

SON NOKTASI:

Dolayısıyla yukarıdaki örnekten, =>sembolün dizi içindeki değerlerin başlatılması SIRASINDA bir dizideki her bir keyve valueçift arasındaki ilişkisini ifade etmek için kullanıldığını görmek oldukça kolaydır .


36

Soru :

PHP'de "&" ne anlama geliyor?

PHP "ve" operatörü

Alıştığımızda hayatı kolaylaştırır .. (aşağıdaki örneğe dikkatlice bakın)

& genellikle $ a ve $ b'de ayarlanan bitlerin ayarlandığını denetler.

bu çağrıların nasıl çalıştığını fark ettiniz mi?

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

Yani her şeyden önce bitsel operatör ve bit oyunu.

Bunların kullanışlı bir örneği, aşağıda verilenler gibi kolay yapılandırmalardır, böylece tek bir tamsayı alanı sizin için binlerce tarak depolayabilir.

Çoğu kişi belgeleri zaten okumuş, ancak bu bitsel operatörlerin gerçek dünya kullanım durumlarını rahatlatmadı.

Örnek Seveceksiniz

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

==değişken veri tipini dikkate almadan kontrol eşitliği için kullanılır

===onay eşitlik için kullanılan her iki değişken değeri ve veri türü

Misal

$a = 5

  1. if ($a == 5) - doğru olarak değerlendirecek

  2. if ($a == '5') - true olarak değerlendirilecektir, çünkü bu her iki değeri karşılaştırırken PHP dahili olarak dize değerini tamsayıya dönüştürür ve sonra her iki değeri de karşılaştırır

  3. if ($a === 5) - doğru olarak değerlendirecek

  4. if ($a === '5') - değer 5 olduğu için false olarak değerlendirilir, ancak bu değer 5 bir tamsayı değildir.


27

Null Coalesce operatörü "??" (PHP 7'de eklendi)

Bir operatör için en çekici isim değil, ama PHP 7 oldukça kullanışlı null birleşimini getiriyor, bu yüzden bir örnek paylaşacağımı düşündüm.

PHP 5'te, zaten bir değeri test eden ve sonra true değerini döndürürse ikinci öğeyi ve döndürmezse üçüncü öğeyi döndüren üçlü bir işlecimiz var:

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

Ayrıca, ilk öğeyle aynı ise ikinci öğeyi atlamanıza izin veren bir kısayol vardır: echo $ count?: 10; // ayrıca çıktılar 10

PHP 7'de ek olarak ?? genellikle iki soru işaretini birlikte nasıl kullanacağım gibi aşırı karışıklığı belirtmek yerine bir değer dizesini birbirine zincirlememizi sağlar. Soldan sağa okuma, var olan ve null olmayan ilk değer döndürülecek değerdir.

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

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

Bu yapı, belki de kullanıcı girdisinden veya mevcut yapılandırmadan gelen bir veya daha fazla değere öncelik vermek ve bu yapılandırma eksikse güvenli bir şekilde varsayılana geri dönmek için yararlıdır. Bu küçük bir özellik ama uygulamalarım PHP 7'ye yükseltilir yükseltmez kullanacağımı bildiğim bir özellik.


12

Sıfırlanabilir dönüş türü bildirimi

PHP 7, dönüş türü bildirimleri için destek ekler. Bağımsız değişken türü bildirimlerine benzer şekilde, dönüş türü bildirimleri de bir işlevden döndürülecek değer türünü belirtir. Döndürme türü bildirimleri için, argüman türü bildirimleriyle aynı türler kullanılabilir.

Katı yazımın dönüş türü bildirimleri üzerinde de etkisi vardır. Varsayılan zayıf modda, döndürülen değerler o türden değilse doğru türe zorlanır. Güçlü modda, döndürülen değer doğru türde olmalıdır, aksi takdirde bir TypeError atılır.

PHP 7.1.0'dan itibaren, tür adının önüne bir soru işareti (?) Eklenerek dönüş değerleri boş bırakılabilir olarak işaretlenebilir. Bu, işlevin belirtilen türü veya NULL döndürdüğünü gösterir.

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

Kaynak


7

Splat Operatörü olarak üç DOTS (...) (PHP 5.6'dan beri)

PHP'nin Splat Operatörü olarak adlandırılan bir operatörü "..." (Üç nokta) vardır. Bir işlevdeki isteğe bağlı sayıda parametreyi iletmek için kullanılır ve bu işlev türüne Değişkin İşlevler denir. "..." (Üç nokta) kullanımına örnekler verelim.

Örnek 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
?>

CalculateNumbers () işlevinin her bağımsız değişkeni, "…" kullanıldığında $ params değerini dizi olarak geçirir.

"…" Operatörünü kullanmanın birçok farklı yolu vardır. Aşağıda bazı örnekler verilmiştir:

Örnek 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
?>

Örnek 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
?>

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

? -> NullSafe Operatörü

Şu an için sadece bir teklif, onu burada bulabilirsiniz . Bu var NullSafe Operator, bu döndüren nulldurumda değerleri işlevleri çağırmak veya elde etmeye çalışmak null... Örnek

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

Bunu eklemek oldukça erken geliyor, kimse bu operatörü herhangi bir canlı kodda görmeyecek ve hatta eklenmeyebilir. Ayrıntılar tamamlanana kadar beklemek ve doğru şekilde belgelemek daha iyi olurdu.
IMSoP

Bu konuda zaten sorularımız var. : / Teklif başarısız olursa, bunun tutmaya değer olup olmadığına karar verebiliriz.
John Conde

@JohnConde bakın? Söylediğim bu ...
Berto99

@JohnConde Onları konu dışı olarak kapatmak isterim, çünkü hayali bir programlama dili soruyorlar; veya belki de "bu soru zaman çizelgesinin farklı bir bölümüne aittir, lütfen zaman makinenizdeki ayarları kontrol edin";)
IMSoP

lol Düşünce aklımdan geçti. Kendime bunun gelecekteki ziyaretçilere değer verip vermeyeceğini sordum ve şimdilik cevap "evet". Ama bu değişebilir ...
John Conde

0

NullSafe Operatörü php8'den beri "? ->" (muhtemelen)

Şu an için sadece bir teklif, bağlantı açıklamasını buraya girdiğinizde bulabilirsiniz . ?->öyle NullSafe Operatordöndürür, nullsen işlevleri çağırmak veya değerleri elde etmeye çalışmak durumunda null...

Örnekler:

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

Bunu eklemek oldukça erken geliyor, kimse bu operatörü herhangi bir canlı kodda görmeyecek ve hatta eklenmeyebilir. Ayrıntılar tamamlanana kadar beklemek ve doğru şekilde belgelemek daha iyi olurdu.
IMSoP

@ IMSoP ben seninleyim, ancak buraya davet edildim stackoverflow.com/questions/62178354/… ...
Berto99

Şimdi bu konuda iki cevabımız var gibi görünüyor . Şahsen, cevap vermeye çalışmak yerine diğer soruyu kapatmak için oy verirdim, çünkü şu anda böyle bir operatör yok.
IMSoP

@ IMSoP C ++ Teklifi hakkında StackOverflow ile ilgili bir çok soru var ve bunlar kapatılmadı: buna rağmen, şu an için bu operatörü göndermemeye çalışıyorum
Berto99

C ++ süreci hakkında fazla bir şey bilmiyorum ve teklifleri tartışmak makul olduğunda ve adil olmak için bu bir egzersiz değişikliği başarılı olma olasılığı oldukça yüksektir, ancak genel olarak PHP için asla bunu yapmayan birçok özellik vardır ve kullanıcıların referans listelerinde bunlarla karşılaşması oldukça kafa karıştırıcı olacaktır. Bununla birlikte, burada sadece huysuz yaşlı bir adam olduğumu söyledi: P
IMSoP
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.