2014-11-07 2 views
-29

Поместите это в интерпретатор PHP и он не покажет никаких ошибок. Мне это не подходит. Может ли кто-нибудь пролить свет на , почему это работает? Я действительно ищу кое-какие сведения о lexer/parser.Почему этот допустимый PHP-код

<?php 
-01;[];[];[];4;[[-1]]; 
+6

Это в основном целая куча не-ops. Массивы определены пустым, но не назначены, поэтому выбрасываются. –

+3

Что не подходит вам? –

+2

И числовые литералы также являются достоверными утверждениями, но бесполезными. –

ответ

6

Хотя код, похоже, имеет правильный синтаксис, он ничего не делает, как есть.

Существует недостаток линейных перерывов, поэтому все выглядит смешано вместе, но оно делает имеет правильный синтаксис с полуколонами в конце каждого утверждения.

Если вы должны были переписать этот код, чтобы быть более разборчивыми, вы можете сделать это:

-01; // This is just a negative number with a meaningless 0 padded in front of it. 

[]; // This is an empty array that isn't assigned to any variable, hence useless; 

[]; // same 

[]; // same 

4; // Again, a number that isn't assigned to any variable nor expression. 

[[-1]]; // This is a multi-dimensional array with -1 as the inner arrays value, that isn't assigned to anything either. 

Действительный код, но бесполезно.

0

Несмотря на свои предположения, этот код имеет синтаксическую ошибку в []; и [[-1]];:

PHP Parse error: syntax error, unexpected '[' in .... on line ....

Кроме того, код в целом не работают. Но другие части кода являются законными; У него есть начальный тег PHP (тег Ending не требуется при определенных обстоятельствах, например, когда вы не включаете этот файл в другой файл) и два постоянных выражения.

-01 и 4 постоянные выражения, которые оценивают в -1 и соответственно. За этими выражениями следует ;, что означает конец утверждений. Затем эти операторы работают (Не поднимайте ошибку), пока они не выполняют ничего полезного для вас. Парсер не ищет полезность или бесполезность в коде. Вам нужно написать код, который делает что-то значимое, а не только некоторые заявления о мусоре, которые потребляют ресурсы (время и память).

+1

-1. Этот ответ содержит две основные ошибки. Во-первых, '[];' является абсолютно корректным оператором с PHP 5.4, эквивалентным 'array();'. Во-вторых, только потому, что вы включаете файл в другой файл, это не означает, что вам нужно использовать закрывающий тег '?>'; действительно, официальное руководство по PHP-FIG, [PSR-2] (http://www.php-fig.org/psr/psr-2/), диктует, что они * должны * быть опущены из файлов, содержащих только PHP. –

Смежные вопросы