token_get_all whitespaces davranış

2 Cevap php

Birisi bana yardımcı olabilir, ben bilmiyorum, ama ben yine de soracağım. I token_get_all javascript ile yazılmış php gibi bir işlevi oluşturma. Bu fonksiyon, belirli bir php kodu "simgelemek" gerektiğini, ama whitespaces ile bazı sorunlar var.

Ben sadece bazı boşlukları belirteçleri kabul görüyoruz php token_get_all işlev yürütülürken, diğer olanları göz ardı edilir.

Birisi bu fonksiyon whitespaces nasıl davranacağını bana açıklayabilir misiniz? Hiç bu konuda bazı belgeleri bulduk?

UPDATE

<?php
if ($var == 0)
{
?>
  • Php beetween ve eğer: yok
  • BOP ve eğer (: tokenized
  • $ Var beetween ve =: tokenized
  • BOP = ve 0: tokenized
  • BOP) ve {: tokenized
  • Beetween {ve>:? Tokenized

2 Cevap

Ben çözüm buldum. Genellikle whitespaces php açık etiketleri sonra göz ardı edilir: <?php, <? fakat <?=

UPDATE

It has taken 2 hours, but i've understood the behaviour:). <?php and <? get also the following space char or new line char (preceeded by \r or not). The rest of the whitespaces are parsed in other tokens but grouped if they follow the first whitespace. Let me explain better with your examples:

<?php echo "test"?>

Kredi: "<?php", "echo" ....

<?php    echo "test"?>

Kredi: "<?php", "(kalan boşlukları)", "echo" ...

Yeni hatları ile bir başka örnek:

<?php
echo "test"
?>

Kredi: "<?php \ n", "echo" ....

<?php


echo "test"
?>

Kredi: "<?php \ n", "\ n \ n (kalan yeni hatlar)", "echo" ....

Ben bu gibi davranır emin değilim bu yüzden ben bütün gün bunu test ettik.

Aslında, göz ardı asla. Zend lexer her zaman amaca indenting / vurgulayarak için, boşluk döndürür.

"<?php if" (one space) is two tokens: "<?php " -- note the space -- and "if") 
"<?php  if" (two spaces) is three tokens: "<?php ", T_WHITESPACE + "if"

Örnek:

$t = token_get_all("<?php echo 1;?>");
echo token_name($t[1][0]); // T_ECHO

$t = token_get_all("<?php       echo 1;?>");
echo token_name($t[1][0]); // T_WHITESPACE