Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcelobbt

Parse error: syntax error, unexpected 'var' (T_VAR), expecting

Recommended Posts

Estou com este erro e não consigo resolver. abaixo segue a classe onde ele diz que está dando o erro:

 

<?php
	class Combate {
		var $danopersonagem;
		var $danoadversario;
		var $vitalidadepersonagem;
		var $vitalidadeadversario;
		var $agilidadepersonagem;
		var $agilidadeadiversario;
		var $defesapersonagem;
		var $defesaadversario;
		var $resistenciapersonagem;
		var $resistenciaadversario;
		
		function __construct ($danopersonagem, $danoadversario, $vitalidadepersonagem, $vitalidadeadversario, $agilidadepersonagem $agilidadeadiversario, $defesapersonagem, $defesaadversario, $resistenciapersonagem, $resistenciaadversario) {
			$this->danopersonagem = $danopersonagem;
			$this->danoadversario = $danoadversario;
			$this->vitalidadepersonagem = $vitalidadepersonagem;
			$this->vitalidadeadversario = $vitalidadeadversario;
			$this->agilidadepersonagem = $agilidadepersonagem;
			$this->agilidadeadiversario = $agilidadeadiversario;
			$this->defesapersonagem = $defesapersonagem;
			$this->resistenciapersonagem = $resistenciapersonagem;
			$this->resistenciaadversario = $resistenciaadversario;
		}
		
		
	}
?>

 

 

Mensagem de erro: Parse error: syntax error, unexpected 'var' (T_VAR), expecting variable (T_VARIABLE) in ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira vista provavelmente a versão do PHP na qual esse script está rodando é 5+ e o script foi desenvolvido no modelo de OO do PHP 4.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual seria a diferença, ou como deveria alterar a codificação?

 

Estranho que criei outras classes e rodaram bem. Só essa que deu o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois da variável $agilidadepersonagem está faltando uma vírgula ","

 

código corrigido:

 

<?phpclass Combate {var $danopersonagem;var $danoadversario;var $vitalidadepersonagem;var $vitalidadeadversario;var $agilidadepersonagem;var $agilidadeadiversario;var $defesapersonagem;var $defesaadversario;var $resistenciapersonagem;var $resistenciaadversario; function __construct ($danopersonagem, $danoadversario, $vitalidadepersonagem, $vitalidadeadversario, $agilidadepersonagem, $agilidadeadiversario, $defesapersonagem, $defesaadversario, $resistenciapersonagem, $resistenciaadversario) {$this->danopersonagem = $danopersonagem;$this->danoadversario = $danoadversario;$this->vitalidadepersonagem = $vitalidadepersonagem;$this->vitalidadeadversario = $vitalidadeadversario;$this->agilidadepersonagem = $agilidadepersonagem;$this->agilidadeadiversario = $agilidadeadiversario;$this->defesapersonagem = $defesapersonagem;$this->resistenciapersonagem = $resistenciapersonagem;$this->resistenciaadversario = $resistenciaadversario;}  } 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wallace, mesmo assim o erro continuou.

 

segue a mensagem de erro:

 

Parse error: syntax error, unexpected 'var' (T_VAR), expecting variable (T_VARIABLE) in C:\...\combate.class.php on line 4



Bruno, tentei alterar o código, mas o erro continuou.

 

<?php
	class Combate {
		public $danopersonagem;
		public $danoadversario;
		public $vitalidadepersonagem;
		public $vitalidadeadversario;
		public $agilidadepersonagem;
		public $agilidadeadiversario;
		public $defesapersonagem;
		public $defesaadversario;
		public $resistenciapersonagem;
		public $resistenciaadversario;
		
		public function __construct ($danopersonagem, $danoadversario, $vitalidadepersonagem, $vitalidadeadversario, $agilidadepersonagem, $agilidadeadiversario, $defesapersonagem, $defesaadversario, $resistenciapersonagem, $resistenciaadversario) {
			$this->danopersonagem = $danopersonagem;
			$this->danoadversario = $danoadversario;
			$this->vitalidadepersonagem = $vitalidadepersonagem;
			$this->vitalidadeadversario = $vitalidadeadversario;
			$this->agilidadepersonagem = $agilidadepersonagem;
			$this->agilidadeadiversario = $agilidadeadiversario;
			$this->defesapersonagem = $defesapersonagem;
			$this->resistenciapersonagem = $resistenciapersonagem;
			$this->resistenciaadversario = $resistenciaadversario;
		}	
		
	}
?>

Para ver se ajuda, abaixo o código da página que está chamando a classe:

 

<?php
	include '../combate.class.php';
	
	//cria combate
	$danopersonagem = "4";
	$danoadversario = "2";
	$vitalidadepersonagem = "4";
	$vitalidadeadversario = "6";
	$agilidadepersonagem = "2";
	$agilidadeadiversario = "2";
	$defesapersonagem = "2";
	$defesaadversario = "1";
	$resistenciapersonagem = "0";
	$resistenciaadversario = "1";
	
	$ataque = new Combate($danopersonagem, $danoadversario, $vitalidadepersonagem, $vitalidadeadversario, $agilidadepersonagem, $$agilidadeadiversario, $defesapersonagem, $defesaadversario, $resistenciapersonagem, $resistenciaadversario); //cria combate
	echo "{$ataque->vitalidadepersonagem}".' x '.$ataque->vitalidadeadversario;
	
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tanto a sua última versão quanto a solução enviada pelo @Wallace Maxters funcionaram aqui.

 

 

PHP 5.5.7 (cli) (built: Jan  3 2014 18:58:50) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso que estou achando estranho.

Pois fiz outras classes e todas funcionavam. Deve ser algum bug aqui.

Vou tentar hospedar para ver como se comporta.



Realmente é algo inexplicável. Aqui quando hospedei funcionou perfeitamente. Foi algum bug aqui no meu PC. vai entender.

 

Desculpe galera pelo tempo desperdiçado de vocês.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Checou a versão do PHP entre um servidor e outro, seja(m) ele(s) local(is) ou remoto(s)e verificou se no que funcionou é 5+ (5.1.3+ eu acho)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcelo,

tem que tomar cuidado! Geralmente, em alguns servidores, quando você faz o upload de arquivos, ele remove quebra de linhas, isso faz com que comentários entre outras coisas sem reconhecidas como PARSE ERROR! Já aconteceu comigo

 

///comentario 
$var = 1;

 

vira

 

// comentário $var = 1;



... E só pra constar, no meu Xampp está funcionando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O @Gabriel Heming postou uma explicação interessante sobre esse comportamento um tempo atrás, mas não me lembro dos termos usados pra poder respostar o link.

 

Mas não é algo do servidor e sim do próprio PHP, durante a interpretação do código.

Compartilhar este post


Link para o post
Compartilhar em outros sites


Note:

In order to maintain backward compatibility with PHP 4, PHP 5 will still accept the use of the keyword var in property declarations instead of (or in addition to) public, protected, or private. However, var is no longer required. In versions of PHP from 5.0 to 5.1.3, the use of var was considered deprecated and would issue an E_STRICT warning, but since PHP 5.1.3 it is no longer deprecated and does not issue the warning.

If you declare a property using var instead of one of public, protected, or private, then PHP 5 will treat the property as if it had been declared as public.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodei alguns testes rápidos aqui e pude chegar a conclusão de que isso é coisa do capiroto pois rodando o código inicial desde o PHP 4.4.9, o erro que aparece é justamente o da vírgula ausente.

 

Corrigindo ela, o objeto funciona no PHP 4.4.9, 5.0.4, 5.0.5, 5.1.4, 5.3.1...

 

Se tivéssemos a linha em que o erro ocorreu poderíamos saber com certeza, mas ela foi omitida do post inicial.

 

E sobre esse E_STRICT que supostamente seria levantado caso a keyword var seja usada, ou é uma informação errada, ou no servidor que eu testei rolou algum patch invalidando essa afirmação pois no 5.0.5 não apareceu nada.

 

Fica como voto de Minerva o fato de que testei nessas versões antigas num sandbox online, logo não sei o que exatamente pode estar rolando nos bastidores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.