2012-05-30 21 views
7

PHP'de, büyük harflerle sarılmış bir dizgiye eşit bir değişken yazdığınızda, bir shell_exec() komutunda olduğu gibi çalıştırılır. What does the grave accent symbol (`) (not single quote) represent in PHP?Backticks (grave while) kullanırken dize manipülasyon kuralları nelerdir?

Yani, php sen vb değişkenler, dizelerle birleştirmek için her türlü şeyi yapabileceklerini?

+1

"Backtick" terimiyle daha fazla şansınız olabilir. Karakter sadece bir harfle birleştirildiğinde bir vurgu olur. – Charles

+0

@Charles öneri için teşekkürler – Kristian

cevap

5

PHP "` yerine 'kullanarak veya ben yapamam edebilir, Bu karakter ters tırnak operatörü denir ters tırnakların sarılı

bir dizgi değişmezi bir T_ENCAPSED_AND_WHITESPACE belirteç olduğunu böyle bir şey çalıştırarak bu teyit edebilir.:.

print_r(token_get_all('<?php `uname`;')); 

bu verir:

Array 
(
    [0] => Array 
     (
      [0] => 367 
      [1] => <?php 
      [2] => 1 
     ) 

    [1] => ` 
    [2] => Array 
     (
      [0] => 313 
      [1] => uname 
      [2] => 1 
     ) 

    [3] => ` 
    [4] => ; 
) 

T_ENCAPSED_AND_WHITESPACET_ENCAPSED_AND_WHITESPACE verir ve sonra token_name(313) çalıştırın.

Ayrıştırıcıya, backticks ile sarılmış bir dize, "hello $world"'a eşdeğerdir. Dizenin (hello bölümü) değişmez/sabit kısmı T_ENCAPSED_AND_WHITESPACE'dur.

Sorunuza yanıt vermek için, backticks ile sarılmış bir dizeye yapabileceğiniz değişkenleri içeren bir dizeye yapabileceğiniz her şey. O zaman neden T_ENCAPSED_AND_WHITESPACE? Muhtemelen, değişkenleri içeren bir dizge gibi, bu değer çalışma zamanında belirlenir. Oysa bir T_CONSTANT_ENCAPSED_STRING (normal bir değişmez dize), ayrıştırıcının gözünde bir sabit gibi bir şeydir.