Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony 2.8 Parse error: syntax error, unexpected ':', expecting ';' or '{' in c:\xampp\htdocs\myproject\path\to\AnnotationRegistry.php on line 50

I have downloaded and installed Symfony 2.8 from my own PC. I copied my project and paste it in our companies' pc. I have not created and connected to the database yet. I tried to do php app/console server:run on c:\xampp\htdocs\ninjaz\ but after that I get this error message.

Parse error: syntax error, unexpected ':', expecting ';' or '{' in C:\xampp\htdo cs\Ninjaz\vendor\doctrine\annotations\lib\Doctrine\Common\Annotations\Annotation Registry.php on line 50

Edit: My own PC has XAMPP with PHP 7.1. Our company's PC has XAMPP PHP 5.5.19

This is the content of AnnotationRegistry.php:

<?php

namespace Doctrine\Common\Annotations;

final class AnnotationRegistry
{
/**
 * A map of namespaces to use for autoloading purposes based on a PSR-0 convention.
 *
 * Contains the namespace as key and an array of directories as value. If the value is NULL
 * the include path is used for checking for the corresponding file.
 *
 * This autoloading mechanism does not utilize the PHP autoloading but implements autoloading on its own.
 *
 * @var string[][]|string[]|null[]
 */
static private $autoloadNamespaces = [];

/**
 * A map of autoloader callables.
 *
 * @var callable[]
 */
static private $loaders = [];

/**
 * An array of classes which cannot be found
 *
 * @var null[] indexed by class name
 */
static private $failedToAutoload = [];

public static function reset() : void
{
    self::$autoloadNamespaces = [];
    self::$loaders            = [];
    self::$failedToAutoload   = [];
}

/**
 * Registers file.
 *
 * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0
 *             autoloading should be deferred to the globally registered autoloader by then. For now,
 *             use @example AnnotationRegistry::registerLoader('class_exists')
 */
public static function registerFile(string $file) : void
{
    require_once $file;
}

/**
 * Adds a namespace with one or many directories to look for files or null for the include path.
 *
 * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm.
 *
 * @param string            $namespace
 * @param string|array|null $dirs
 *
 * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0
 *             autoloading should be deferred to the globally registered autoloader by then. For now,
 *             use @example AnnotationRegistry::registerLoader('class_exists')
 */
public static function registerAutoloadNamespace(string $namespace, $dirs = null) : void
{
    self::$autoloadNamespaces[$namespace] = $dirs;
}

/**
 * Registers multiple namespaces.
 *
 * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm.
 *
 * @param string[][]|string[]|null[] $namespaces indexed by namespace name
 *
 * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0
 *             autoloading should be deferred to the globally registered autoloader by then. For now,
 *             use @example AnnotationRegistry::registerLoader('class_exists')
 */
public static function registerAutoloadNamespaces(array $namespaces) : void
{
    self::$autoloadNamespaces = \array_merge(self::$autoloadNamespaces, $namespaces);
}

/**
 * Registers an autoloading callable for annotations, much like spl_autoload_register().
 *
 * NOTE: These class loaders HAVE to be silent when a class was not found!
 * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class.
 *
 * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0
 *             autoloading should be deferred to the globally registered autoloader by then. For now,
 *             use @example AnnotationRegistry::registerLoader('class_exists')
 */
public static function registerLoader(callable $callable) : void
{
    // Reset our static cache now that we have a new loader to work with
    self::$failedToAutoload   = [];
    self::$loaders[]          = $callable;
}

/**
 * Autoloads an annotation class silently.
 */
public static function loadAnnotationClass(string $class) : bool
{
    if (\class_exists($class, false)) {
        return true;
    }

    if (\array_key_exists($class, self::$failedToAutoload)) {
        return false;
    }

    foreach (self::$autoloadNamespaces AS $namespace => $dirs) {
        if (\strpos($class, $namespace) === 0) {
            $file = \str_replace('\\', \DIRECTORY_SEPARATOR, $class) . '.php';

            if ($dirs === null) {
                if ($path = stream_resolve_include_path($file)) {
                    require $path;
                    return true;
                }
            } else {
                foreach((array) $dirs AS $dir) {
                    if (is_file($dir . \DIRECTORY_SEPARATOR . $file)) {
                        require $dir . \DIRECTORY_SEPARATOR . $file;
                        return true;
                    }
                }
            }
        }
    }

    foreach (self::$loaders AS $loader) {
        if ($loader($class) === true) {
            return true;
        }
    }

    self::$failedToAutoload[$class] = null;

    return false;
   }
}

I have managed to get the server running by removing those : void and : bool but when I browse my project, it returns another error and it's the same with the first one but when I try to remove it again, it creates another error on other libraries. It's like an endless error after error scenario. I don't know what to do now. I'm only new to Symfony. Help is badly needed.

like image 963
WashichawbachaW Avatar asked Aug 01 '17 08:08

WashichawbachaW


People also ask

How do I fix parse error syntax error unexpected?

The best way to solve it is to remove the recently added plugins by disabling them. The WordPress site is also likely to generate an error after a code edit. A mistake as simple as a missing comma is enough to disrupt the function of a website.

What is PHP parse error?

Parse Error (Syntax) Parse errors are caused by misused or missing symbols in a syntax. The compiler catches the error and terminates the script. Parse errors are caused by: Unclosed brackets or quotes. Missing or extra semicolons or parentheses.


1 Answers

This is caused by wrong version of PHP. I had the same issue. You need PHP 7+. PHP in version lower than 7 does not support the "Return Types Declaration".

You can also try to add following code to your composer.json:

{
    "config": {
        "platform": {"php": "5.6"}
    }
}
like image 162
vagovszkym Avatar answered Sep 28 '22 01:09

vagovszkym