Почему этот фрагмент не выдает ошибку? - PullRequest
0 голосов
/ 23 февраля 2019

Я столкнулся с чем-то, что не могу объяснить, почему это не выдает ошибку в PHP.Извиняюсь, если это очевидно для некоторых из вас, или если на него уже был дан ответ.

Это не вызывает каких-либо проблем, это больше просто наблюдение и поиск понимания.Мне интересно, если кто-нибудь знает из головы, почему это происходит?Мне просто любопытно, потому что не похоже, что это должно работать вообще.Чего мне не хватает?

Проверенная версия PHP: PHP v7.2.12

    <?php
    class FooBar
    {
        public function foo()
        {
            anythingIWantToWrite: // this doesn't throw an error?
            return "foo";
        }

        public function baz()
        {
            baz: 'foobar'; // this doesn't throw an error?
            return "bar";
        }
    }


    $class = new FooBar();

    echo $class->foo()."\n";
    echo $class->baz();

1 Ответ

0 голосов
/ 23 февраля 2019

Потому что это допустимый goto синтаксис , даже если вы на самом деле его не используете.По сути, ваши методы могут содержать оператор goto для перехода к anythingIWantToWrite или baz.Вы просто не.

<?php
class FooBar
{
    public function foo()
    {
        goto anythingIWantToWrite;
        echo 'I am skipped';

        anythingIWantToWrite:
        return "foo";
    }

    public function baz()
    {
        goto baz;
        echo 'I am skipped';

        baz: 'foobar'; // 'foobar" is string literal that simply does nothing.
        return "bar";
    }
}


$class = new FooBar();

echo $class->foo()."\n";
echo $class->baz();

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...