Niedawno spotkałem się z pewną… ciekawostką, którą podsunął mi jeden ze współuczestników szkolenia w jakim brałem udział. W języku PHP można komentować kod na kilka sposobów:
-
<?php # to jest komentarz jednolinijkowy ?> -
<?php // to jest komentarz jednolinijkowy ?> -
<?php /* to jest komentarz wielolinijkowy */ ?>
Moja ciekawostka dotyczy wersji 1 i 2. Teraz pytanie, dość proste: co zostanie wyświetlone w wyniku parsowania pliku PHP o treści:
<?php
echo 'aaa?>';
echo 'bbb';
?>
Dość oczywistym jest wynik:
aaa?>bbb
No to teraz pytanie drugie: co będzie wynikiem parsowania poniższego skryptu?
<?php
#echo 'aaa?>';
echo 'bbb';
?>
Dla mnie, i dla conajmniej kilku innych osób które od dość długiego czasu zajmują się PHP, oczywistym jest wynik:
bbb
Ale dla developerów PHP logicznym jest inny rezultat:
'; echo 'bbb'; ?>
Cytat z manuala:
The “one-line” comment styles only comment to the end of the line or the current block of PHP code, whichever comes first. This means that HTML code after // … ?> or # … ?> WILL be printed: ?> breaks out of PHP mode and returns to HTML mode, and // or # cannot influence that. If the asp_tags configuration directive is enabled, it behaves the same with // %> and # %>.
Źródło: manual PHP