我只注意到我可以使用一個變量作爲參數,如下所示:$variable = "This's a string."; function('$variable')
,而不是像這樣:function('This's a string');
。我可以明白爲什麼我不能做後者,但我不明白在第一個例子工作的幕後發生了什麼。PHP如何自然地預測變量中的撇號?
2
A
回答
5
你聽說過formal languages的方式嗎?解析器跟蹤上下文,因此它知道期望的字符是什麼,什麼不是。
在你關閉已經打開的字符串的那一刻,你將返回到打開字符串之前的上下文(即在這種情況下,在函數調用的上下文中)。
碼的相關的PHP-內部件是:
- the scanner接通序列之間「和」成一個不可分割的令牌。
- the parser將單個不可分割的標記放入語義環境中。
這些是相關卡盤C code,使它的工作。它們是PHP內部工作的一部分(特別是Zend Engine)。
PHP並沒有預料到任何東西,它真的會讀取所有char字符,並且只要它在不允許的語義環境中找到意外的TOKEN,就會發出解析錯誤。
在您的情況下,它會讀取令牌'This'
並且掃描程序會匹配一個新字符串。然後它繼續閱讀s
,當它找到一個空格時,它將s
變成constant。作爲常數和先前發現的令牌'This'
一起不形成任何known reduction(可能削減解析器鏈接我給你上面描述),解析器會發出像
意外T_STRING
錯誤
你可以從該消息推斷,它是真正指的是什麼已經發現(或者它希望它找到的),所以沒什麼沒有什麼期待。
你的問題本身是錯誤的,因爲變量中沒有引用(變量的標識符)。您可能在變量的值中有一個引用者。不要混淆他們。值可以是獨立的,沒有一個變量:
<?php
'That\'s fine';
42;
(這是剛剛加載這些值到內存中一個有效的PHP代碼)
0
1
功能( '$變量')不應該在" "
逃逸單引號內正確
字符工作中''
字符不逃脫單引號(他們不能逃脫自己!)。
使用""
,您還可以使用變量作爲字符串的一部分,所以:
$pet = 'cat'
$myStory = "the $pet walked down the street"
function($pet)
是函數應該傳遞一個字符串
相關問題
- 1. 發佈包含撇號的php變量
- 2. 用PHP中的雙撇號替換包含單撇號的變量
- 3. 撇號在PHP變量符碼
- 4. 如何添加撇號在PHP自身
- 5. URL變量W /撇號
- 6. 檢測NSString中的撇號?
- 7. SQL Server替換php變量中的撇號
- 8. 在thymeleaf變量中釋放撇號
- 9. Textarea中的撇號PHP
- 10. 如果變量文本包含撇號,PHP值不會顯示
- 11. 撇號內的SCSS變量內容
- 12. 如何用雙撇號替換撇號?
- 13. 如何創建PHP的撇號問題
- 14. 在PHP中取代撇號(')
- 15. 如何忽略php中的引號內的撇號?
- 16. 如何製作一個char變量是撇號的情況?
- 17. 如何逃脫撇號在我的變量名EJS
- 18. 如何在函數的變量PLPGSQL使用字符串撇號
- 19. 如何通過MySql傳遞帶撇號的C#變量
- 20. 消化替代變量撇號
- 21. 撇號在mysql/php
- 22. 撇號php問題
- 23. PostgreSQL中的撇號和引用 - 如何替換撇號?
- 24. 如何將C#中的撇號轉換爲撇號?
- 25. PHP如何檢測變量的變化?
- 26. aspx文件中的撇號撇號
- 27. 在html/php語句中正確地嵌套撇號/引號
- 28. 我的撇號變成了'
- 29. 如何讓PHP的Magic __set像自然變量一樣工作?
- 30. 在JavaScript中,如何存儲包含引號和撇號的變量(來自數據庫)?
如何'函數(「$變量」)'爲你工作? '$ variable'永遠不會被您之前設置的字符串替換。相反,字符串「$變量」將被賦予你的函數。 – sascha 2012-01-03 09:18:39
@ Sn0opy謝謝。伍德斯托克說,你好...在Birdanese手語。 – 2012-01-05 01:40:30