19

I have got the following error in my Laravel project after uploading in Bluehost cPanel. But in local server there is no error.

Parse error: syntax error, unexpected 'const' (T_CONST), expecting variable (T_VARIABLE)

Here is the code

<?php
namespace Doctrine\DBAL;
use Doctrine\DBAL\Driver\ServerInfoAwareConnection;
use Doctrine\DBAL\Exception\InvalidArgumentException;
use Closure;
use Exception;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Driver\Connection as DriverConnection;
use Doctrine\Common\EventManager;
use Doctrine\DBAL\Cache\ResultCacheStatement;
use Doctrine\DBAL\Cache\QueryCacheProfile;
use Doctrine\DBAL\Cache\ArrayStatement;
use Doctrine\DBAL\Cache\CacheException;
use Doctrine\DBAL\Driver\PingableConnection;
use Throwable;
use function array_key_exists;
use function array_merge;
use function func_get_args;
use function implode;
use function is_int;
use function is_string;
use function key;
class Connection implements DriverConnection
{

public const TRANSACTION_READ_UNCOMMITTED = TransactionIsolationLevel::READ_UNCOMMITTED;

public const TRANSACTION_READ_COMMITTED = TransactionIsolationLevel::READ_COMMITTED;

public const TRANSACTION_REPEATABLE_READ = TransactionIsolationLevel::REPEATABLE_READ;

public const TRANSACTION_SERIALIZABLE = TransactionIsolationLevel::SERIALIZABLE;

public const PARAM_INT_ARRAY = ParameterType::INTEGER + self::ARRAY_PARAM_OFFSET;

public const PARAM_STR_ARRAY = ParameterType::STRING + self::ARRAY_PARAM_OFFSET;

const ARRAY_PARAM_OFFSET = 100;

protected $_conn;

protected $_config;

protected $_eventManager;

protected $_expr;

private $_isConnected = false;

private $autoCommit = true;

private $_transactionNestingLevel = 0;

private $_transactionIsolationLevel;

private $_nestTransactionsWithSavepoints = false;

private $_params = [];

private $platform;

protected $_schemaManager;

protected $_driver;

private $_isRollbackOnly = false;

protected $defaultFetchMode = FetchMode::ASSOCIATIVE;

My local server PHP version is 7.2.0

Bluehost PHP version is 7.0.0

Is that PHP version related problem?

How to fix this?

Nigel Ren
  • 56,122
  • 11
  • 43
  • 55
Arafat Rahman
  • 574
  • 3
  • 11
  • 27
  • 3
    I vote to reopen this question, because the alleged duplicate question doesn't address this error message. A simple search for 'T_CONST' reveals this. – Olaf Dietsche Aug 31 '19 at 18:11

2 Answers2

41

The ability to specify the visibility of class constants was only added in PHP 7.1, from the manual page

Note:

As of PHP 7.1.0 visibility modifiers are allowed for class constants.

So on the PHP 7.0 server, the

public const TRANSACTION_READ_UNCOMMITTED ...

lines should not have the public on them. It also says that

The default visibility of class constants is public.

So public is not needed anyway.

Nigel Ren
  • 56,122
  • 11
  • 43
  • 55
  • got this error from an installed composer package we didn't want to downgrade, so we upgraded php: e.g: https://php.watch/articles/Ubuntu-PHP-7.4, https://kenfavors.com/code/how-to-upgrade-to-php7-4-fpm-in-ubuntu-16-04-18-04/ – ManInTheArena Mar 24 '21 at 17:10
4

It seems like you want to define a constant variable.

My instruction was :

const CONSTANT = 'jkl';

The error I got :

syntax error, unexpected 'const' (T_CONST) in ...

I changed that instruction to :

define('CONSTANT', 'jkl');
echo CONSTANT;

output :

jkl

Syntax of the method 'define' :

define('variable_name', 'value_of_the_variable', [case-insensitive_constant_name = true/false]);

For eg.

define('CONSTANT3', 'ghi', true);
echo CONSTANT3;
define('constant3', 'ghi'); //Defining 'constant3' again will give an error.

But

define('CONSTANT3', 'ghi');
echo CONSTANT3;
define('constant3', 'ghi'); //This won't give an error.
echo constant3;

Always remember that regular variables should be addressed by using '$' before their name but constant variables should be addressed directly as shown by me in the code above.

isherwood
  • 58,414
  • 16
  • 114
  • 157
Nam
  • 41
  • 1