Jump to content
fil79

Dúvida em operações com strings: precedências e conversões

Recommended Posts

fil79

Boas

Porque razão o script devolve o seguinte output


echo 'teste'. 1 + 2 .'34' ;


//resultado 234

Desde já agradeço

Edited by fil79

MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
pikax

php sempre a supreender, a tentar ser bruxo, parece que o problema esta na conversao teste1 para numero.

esta' aqui um exemplo que podera explicar isso:

http://ideone.com/YA9g4c


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens de pensar em duas coisas:

- precedência dos operadores

- direcção de aplicação dos operadores

apesar de no primeiro ponto a documentação indicar que os operadores utilizador estão "ao mesmo nível" de precedência, o exemplo indica que não é bem assim (explico mais tarde)

no que toca na direcção de aplicação, o exemplo também indica que é da direita para a esquerda (algo muito comum nas linguagens)

vamos tentar aplicar então estas duas regras:

- a concatenação de string é feita primeiro que a soma

- as operações com o mesmo nível de precedência são aplicada da direita para a esquerda

echo 'teste'. 1 + 2 .'34' ;

// como a concatenação é feita primeiro que a soma ... da direita para a esquerda tens:

// elevação do valor 2 para a string '2'
echo 'teste'. 1 + '2' .'34' ;
// concatenação da string
echo 'teste'. 1 + '234' ;

// o próximo passo está na próxima concatenação

// elevação do valor 1 para a string '1'
echo 'teste'.'1' + '2' .'34' ;
// concatenação da string
echo 'teste1' + '234' ;

// agora tens de aplicar a soma de string ... mas afinal o que é a soma de string ???
echo 'teste1' + '234';
// <-----------------

// resultado ... '234'

  • Vote 2

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
fil79

tens de pensar em duas coisas:

- precedência dos operadores

- direcção de aplicação dos operadores

apesar de no primeiro ponto a documentação indicar que os operadores utilizador estão "ao mesmo nível" de precedência, o exemplo indica que não é bem assim (explico mais tarde)

no que toca na direcção de aplicação, o exemplo também indica que é da direita para a esquerda (algo muito comum nas linguagens)

vamos tentar aplicar então estas duas regras:

- a concatenação de string é feita primeiro que a soma

- as operações com o mesmo nível de precedência são aplicada da direita para a esquerda

echo 'teste'. 1 + 2 .'34' ;

// como a concatenação é feita primeiro que a soma ... da direita para a esquerda tens:

// elevação do valor 2 para a string '2'
echo 'teste'. 1 + '2' .'34' ;
// concatenação da string
echo 'teste'. 1 + '234' ;

// o próximo passo está na próxima concatenação

// elevação do valor 1 para a string '1'
echo 'teste'.'1' + '2' .'34' ;
// concatenação da string
echo 'teste1' + '234' ;

// agora tens de aplicar a soma de string ... mas afinal o que é a soma de string ???
echo 'teste1' + '234';
// <-----------------

// resultado ... '234'

Muiito bem explicado

Obrigado!


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Dannyps

Vale a pena notar no entanto o seguinte:

echo 'teste'.( 1 + 2 ).'34' ;

//resultado 'teste334'

Share this post


Link to post
Share on other sites
fil79

Vale a pena notar no entanto o seguinte:

echo 'teste'.( 1 + 2 ).'34' ;

//resultado 'teste334'

Bem visto.

Os paranteses alteram a precedência das operações


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.