Я получаю (T_CONSTANT_ENCAPSED_STRING) ошибку разбора при использовании файла fizzbuzz.php, набранного прямо из книги, которую я использую - PullRequest
2 голосов
/ 27 октября 2019

Я пытаюсь выполнить назначение fizzbuzz.php из PHP и MySQL, веб-разработка, 5-е издание, стр. 193. Я набрал его точно так же, как в книге, но получаю (T_CONSTANT_ENCAPSED_STRING) ошибку синтаксического анализа (строка 9), когда я запускаю его.

Я пытался заменить yeild на echo, но затем я получаю неправильную ошибку использования функции в строке 27 (функция foreach).
Я пытался избежать "with \ but"это дает мне синтаксическую ошибку, неожиданную строку.
Я пытался использовать 'вместо', но получаю ошибку enacapsed string.

<?php
function fizzbuzz($start, $end)
{
    $current = $start;
    while ($current <= $end)
    {
        if ($current%3 == 0 && $current%5 == 0)
        {
            yield "fizzbuzz";
        }
        elseif ($current%3 == 0)
        {
            yield "fizz";
        }
        elseif ($current%5 == 0)
        {
            yield "buzz";
        }
        else
        {
            yield $current;
        }
        $current++;
    }
}

foreach(fizzbuzz(1, 20) as $number)
{
    echo $number.'<br />';
}
?>

Изменение yeild на echo возвращает строку чисел и строки fizz buzzно они не в том порядке, в котором они должны быть, и все еще есть ошибка функции в строке 27.

Возможно, что-то опечатка, но я проверял это снова и снова, и вот как этозаписано в книге.

1 Ответ

3 голосов
/ 27 октября 2019

Это слишком долго для комментария.

Я подозреваю, что ваша версия PHP, на которой вы ее запускаете, не может ее поддерживать, согласно тестированию вашего кода онлайн на http://sandbox.onlinephpfunctions.com/.

При использовании PHP 5.0.4 возникла та же ошибка.

Вам потребуется обновить сервер, если он находится на локальном компьютере. Если он размещен, вам необходимо связаться с хостинг-провайдером, чтобы узнать, доступна ли вам более новая версия PHP.

Редактировать:

Согласно инструкции на PHP.netв « Note » :

В PHP 5 генератор не может вернуть значение: это может привести к ошибке компиляции. Пустой оператор возврата был допустимым синтаксисом в генераторе, и он завершит работу генератора.

Редактировать # 2:

(из комментариев)

Спасибо за вашу помощь и ссылки на песочницу php, которые помогут мнев будущем. Я запустил phpversion (), и он вернул 5.4.45. Это школьный сервер, поэтому я спрошу их, могут ли они обновить его или установить PEAR на моем ноутбуке. - BackupXfer

При использовании версии 5.4.45 также возвращалась та же ошибка, для новой тестовой ссылки . Эта функция доступна только в PHP 5.5.0 и выше.

...