Ir para conteúdo
Fórum Script Brasil

neto.joaobatista

Membros
  • Total de itens

    116
  • Registro em

  • Última visita

Tudo que neto.joaobatista postou

  1. neto.joaobatista

    MySql em Servidor

    Certo, você recebe alguma mensagem de erro ?
  2. Amigão, você não precisa fazer isso... Uma vez que você já recebeu os dados de um formulário você pode fazer tudo de uma vez: $username = $_POST["usuario"]; $password = $_POST["senha"]; include( "painel_pecas_user.php" ); //Esse kara já consegue fazer o que ele precisa sem precisar simular um POST para ele []'s J. Neto
  3. Tenta assim: if ( isset( $_POST[ "nota" ] ) && isset( $_POST[ "id_aluno" ] ) ){ if ( ( $total = count( ( $nota = $_POST[ "nota" ] ) ) ) == count( ( $id_aluno = $_POST[ "id_aluno" ] ) ) ){ $sql = ""; for ( $i = 0; $i < $total; $i++ ){ $sql .= sprintf( "%s( %s , '%s' )" , empty( $sql ) ? "" : ", " , $id_aluno[ $i ] , $nota[ $i ] ); } $sql = sprintf( "INSERT INTO notas_aluno ( id_aluno, nota) VALUES %s" , $sql ); include( "SQL.php" ); } } []'s J. Neto
  4. neto.joaobatista

    MySql em Servidor

    Questões: Pelo IP da maquina servidora não está funcionando ? Você está utilizando um usuário com permissões para acesso remoto ? A maquina servidora tem algum firewall instalado ?
  5. Bom amigo, como seu ambiente é Windows você pode tentar as bibliotecas COM: $word = new COM("word.application"); []'s J. Neto
  6. neto.joaobatista

    flash+php+ligthbox

    Bom amigo, fiz um teste aqui e realmente ficou mais complicado que deveria, porém acho que se você fizer: 1. Envie seus dados para o Flash no formato XML: <dados> <texto>um <a href="event:1">texto</a> que está dentro do seu <a href="event:2">campo</a></texto> <links> <link id="id1" rel="primeiro link" target="self" /> <link id="id2" rel="segundo link" target="_blank" /> </links> </dados> O primeiro nó do seu XML é o texto, nele você coloca o que irá aparecer no seu TextField. Logo abaixo do seu nó texto você tem um nó chamado links e dentro dele uma referência para cada link do seu nó texto. Ai você irá trocar todos os hrefs dos seus links por: <a href="event:1">link 1</a> <a href="event:2">link 2</a> ... <a href="event:1000">link 1000</a> E para cada event:1, event:2, ..., event:N você terá um link no nó links que irá conter os dados que você precisa. Para fazer isso no AS 3 você usa o event:X, porém é possível obter o mesmo resultado no AS com asfunction. O exemplo abaixo foi feito utilizando o AS3 por que como não uso Windows não tenho o Flash aqui para testar... package { import flash.events.TextEvent; import flash.display.Sprite; import flash.text.TextField; public class Teste extends Sprite { /** * O campo que conterá seu texto */ private var seucampo:TextField; /** * Um outro campo só para você ver o resultado */ private var outrocampo:TextField; /** * O XML que você irá carregar, nesse exemplo eu usei um XML aqui dentro mesmo */ private var dados:XML; /** * Constroi o teste */ public function Teste(){ this.seucampo = new TextField(); this.seucampo.width = 200; this.seucampo.height = 200; this.seucampo.border = true; // Adicionamos um listener para que quando alguém clicar em um link chamar o método clicado this.seucampo.addEventListener( TextEvent.LINK, clicado ); this.outrocampo = new TextField(); this.outrocampo.y = 202; this.outrocampo.width = 200; this.outrocampo.height = 200; this.outrocampo.border = true; this.pegaXML(); this.escreveCampo(); this.addChild( this.seucampo ); this.addChild( this.outrocampo ); } /** * Pega o XML do servidor, nesse exemplo eu usei um XML escrito aqui mesmo */ public function pegaXML():void { this.dados = <dados> <texto>um <a href="event:1">texto</a> que está dentro do seu <a href="event:2">campo</a></texto> <links> <link id="id1" rel="primeiro link" target="self" /> <link id="id2" rel="segundo link" target="_blank" /> </links> </dados> } /** * Aqui pegamos o XML e jogamos o nó texto para o seucampo */ public function escreveCampo():void { this.seucampo.htmlText = this.dados.texto.toXMLString(); } /** * Cada vez que alguém clicar em um link um evento é disparado e esse método é chamado */ public function clicado( e:TextEvent ):void { var id:String = "id" + e.text; var rel:String = dados.links.link.( @id == id ).@rel.toXMLString(); var target:String = dados.links.link.( @id == id ).@target.toXMLString(); outrocampo.text = "link: " + e.text + "\nrel: " + rel + "\ntarget: " + target; } } } PS: Já faz bastante tempo que não desenvolvo utilizando AS e nem tenho mais Flash na minha máquina (nem é possível). O pessoal do ActionScript poderá te ajudar melhor quanto ao event:qqrcoisa ou o asfunction:suafuncao,parametro. []'s J. Neto
  7. Amigo, essa questão de remoto/local é só uma questão de localização física das maquinas, e isso é relevante apenas para nós, mortais. O PHP usa um IP ou um nóme para conectar à sua base MySQL, portanto basta que sua máquina "local" tenha um IP fixo ou um nome válido que o PHP não se importará em conectar, mesmo não estando no mesmo servidor (e muitas vezes não está mesmo). []'s J. Neto
  8. neto.joaobatista

    flash+php+ligthbox

    Bom amigo, fiz um teste aqui e realmente ficou mais complicado que deveria, porém acho que se você fizer: 1. Envie seus dados para o Flash no formato XML: <dados> <texto>um <a href="event:1">texto</a> que está dentro do seu <a href="event:2">campo</a></texto> <links> <link id="id1" rel="primeiro link" target="self" /> <link id="id2" rel="segundo link" target="_blank" /> </links> </dados> O primeiro nó do seu XML é o texto, nele você coloca o que irá aparecer no seu TextField. Logo abaixo do seu nó texto você tem um nó chamado links e dentro dele uma referência para cada link do seu nó texto. Ai você irá trocar todos os hrefs dos seus links por: <a href="event:1">link 1</a> <a href="event:2">link 2</a> ... <a href="event:1000">link 1000</a> E para cada event:1, event:2, ..., event:N você terá um link no nó links que irá conter os dados que você precisa. Para fazer isso no AS 3 você usa o event:X, porém é possível obter o mesmo resultado no AS com asfunction. O exemplo abaixo foi feito utilizando o AS3 por que como não uso Windows não tenho o Flash aqui para testar... package { import flash.events.TextEvent; import flash.display.Sprite; import flash.text.TextField; public class Teste extends Sprite { /** * O campo que conterá seu texto */ private var seucampo:TextField; /** * Um outro campo só para você ver o resultado */ private var outrocampo:TextField; /** * O XML que você irá carregar, nesse exemplo eu usei um XML aqui dentro mesmo */ private var dados:XML; /** * Constroi o teste */ public function Teste(){ this.seucampo = new TextField(); this.seucampo.width = 200; this.seucampo.height = 200; this.seucampo.border = true; // Adicionamos um listener para que quando alguém clicar em um link chamar o método clicado this.seucampo.addEventListener( TextEvent.LINK, clicado ); this.outrocampo = new TextField(); this.outrocampo.y = 202; this.outrocampo.width = 200; this.outrocampo.height = 200; this.outrocampo.border = true; this.pegaXML(); this.escreveCampo(); this.addChild( this.seucampo ); this.addChild( this.outrocampo ); } /** * Pega o XML do servidor, nesse exemplo eu usei um XML escrito aqui mesmo */ public function pegaXML():void { this.dados = <dados> <texto>um <a href="event:1">texto</a> que está dentro do seu <a href="event:2">campo</a></texto> <links> <link id="id1" rel="primeiro link" target="self" /> <link id="id2" rel="segundo link" target="_blank" /> </links> </dados> } /** * Aqui pegamos o XML e jogamos o nó texto para o seucampo */ public function escreveCampo():void { this.seucampo.htmlText = this.dados.texto.toXMLString(); } /** * Cada vez que alguém clicar em um link um evento é disparado e esse método é chamado */ public function clicado( e:TextEvent ):void { var id:String = "id" + e.text; var rel:String = dados.links.link.( @id == id ).@rel.toXMLString(); var target:String = dados.links.link.( @id == id ).@target.toXMLString(); outrocampo.text = "link: " + e.text + "\nrel: " + rel + "\ntarget: " + target; } } } []'s J. Neto
  9. neto.joaobatista

    flash+php+ligthbox

    Bom, de fato o TextField.htmlText irá entender apenas os atributos comuns. Mas com um XML você conseguiria ter a listagem de todos as tags com todos os atributos, ai com getCharIndexAtPoint você consegue o caracter pela a posição que o kara clicou, faz a varredura até encontrar o primeiro espaço em branco antes e até encontrar o próximo espaço em branco depois, faz a seleção e compara com os seus links, encontrando o link na lista do XML você dispara a ação. []'s J. Neto
  10. neto.joaobatista

    flash+php+ligthbox

    Como você está lendo essa linha no Flash ? Não seria mais fácil você enviar um XML para o Flash ?? []'s J. Neto
  11. Você pode usar um "trigger"... Como você só passou duas tabelas e nenhuma relação entre elas eu assumi que você quer atualizar a linha da tabela2 que contém o id inserido na tabela1, porém você pode modificar a parte do UPDATE para atender suas necessidades. create trigger atualiza AFTER INSERT ON tabela1 for each row update tabela2 set `telefone`=NEW.telefone WHERE tabela2.id = NEW.id Explicando: Cria o "gatilho" "atualiza" que será puxado logo após um insert ocorrer na tabela1 O gatilho percorrerá cada linha inserida e irá efetuar um UPDATE na tabela2 atualizando a coluna "telefone" com o valor do telefone da nova linha da tabela1 quando o id da tabela2 for igual ao id da nova linha Abraços... J. Neto
  12. Eu imaginei mesmo que o ganho para o status seria pequeno, mesmo porque o seu vilão de verdade é o código de barras. Porém, se for possível reduzir tanto no "status" quanto no código de barras então acredito que o ganho será bem maior Quando você tiver os dados, poste no fórum, fiquei curioso quanto ao desempenho... Abraços... J. Neto
  13. Bom amigão, Você conseguirá fazer se seu projeto estiver em um servidor apache. Para isso você precisará criar um arquivo chamado .htaccess, No seu .htaccess: RewriteEngine on RewriteBase / RewriteRule ^(.*)$ index.php?querystring=$0 [QSA] O código acima fará com que o apache pegue qualquer coisa depois da base e jogue na variável querystring. Feito isso é só usar a autenticação HTTP para fazer o resto, aqui vai um exemplo: /** * Definindo locale e hora para Brasil */ setlocale( LC_ALL , 'pt_br' ); date_default_timezone_set( "America/Sao_Paulo" ); /** * Demonstração de sistema de autenticação HTTP utilizando PHP + Apache */ abstract class Main { /** * Mensagem que aparecerá quando não se identificar ou digitar um login e senha inválido */ const ACESSO_NEGADO = "Acesso negado"; /** * Mensagem que aparecerá para solicitar o login e senha */ const INDENTIFIQUE = "Para acessar, identifique-se"; /** * Mensagem para o erro HTTP 404 */ const ARQUIVO_NAO_ENCONTRADO = "O arquivo solicitado não existe"; /** * Mensagem que aparecerá se o usuário tentar recuperar um arquivo proibido: HTTP 403 */ const PROIBIDO = "Acesso negado ao arquivo solicitado"; /** * Mensagem que aparecerá se o usuário tentar listar o conteúdo da pasta */ const LISTAGEM_PROIBIDA = "A listagem desse diretório é proibida"; /** * O nome do usuário * @var string */ static private $user; /** * A senha do usuário * @var string */ static private $pswd; /** * Inicia a demonstração de autenticação via HTTP */ static public function start(){ /** * Verificamos se o usuário digitou seu login e senha, se não tiver digitado abrimos o diálogo * para que ele possa digitar */ if ( !isset( $_SERVER[ "PHP_AUTH_USER" ] ) ){ self::authentication(); } else { /** * Recuperamos os dados digitados pelo usuário, se forem válidos então continuamos. */ self::$user = $_SERVER[ "PHP_AUTH_USER" ]; self::$pswd = $_SERVER[ "PHP_AUTH_PW" ]; if ( self::validate() ){ self::go(); } else { /** * Os dados são inválidos, solicitamos login e senha novamente */ self::authentication(); } } } /** * Verificamos se o usuário está solicitando um arquivo ou uma pasta. * Se o arquivo que o usuário estiver solicitando existir então devolvemos o arquivo para o usuário. * Se o usuário estiver solicitando uma pasta, um erro HTTP 403 será retornado informando que a listagem de pastas é proibido */ static private function go(){ if ( isset( $_REQUEST[ "querystring" ] ) ){ $file = $_REQUEST[ "querystring" ]; if ( !empty( $file ) && !is_dir( $file ) ){ if ( file_exists( $file ) ){ if ( !self::getFile( $file ) ){ header( "HTTP/1.0 403 Forbidden" ); printf( self::PROIBIDO ); } } else { header( "HTTP/1.0 404 Not Found" ); printf( self::ARQUIVO_NAO_ENCONTRADO ); } } else { header( "HTTP/1.0 403 Forbidden" ); printf( self::LISTAGEM_PROIBIDA ); } } } /** * Verifica se o arquivo solicitado pode ser recuperado, somente .jpg, .png e .gif são permitidos, para que outros * arquivos possam ser exibidos basta acrescentar um novo na lista * * @param string $file O arquivo que está sendo solicitado * @return boolean TRUE se o arquivo estiver na lista, FALSE se não. */ static private function getFile( $file ){ $ret = false; $parts = pathinfo( $file ); switch ( $parts[ "extension" ] ){ case "jpg": case "png": case "gif": $ret = true; header( "HTTP/1.0 200 OK" ); header( sprintf( "Content-Type: image/%s" , $parts[ "extension" ] ) ); header( sprintf( "Content-Length: %d" , filesize( $file ) ) ); header( sprintf( "Date: %s" , gmstrftime( "%a, %d %b %Y %H:%M:%S %Z" , time() ) ) ); header( sprintf( "Last-Modified: %s" , gmstrftime( "%a, %d %b %Y %H:%M:%S %Z" , filemtime( $file ) ) ) ); readfile( $file ); break; } return( $ret ); } /** * Exibe o diálogo HTTP para autenticação */ static private function authentication(){ header( sprintf( 'WWW-Authenticate: Basic realm="%s"' , self::INDENTIFIQUE ) ); self::unauthorized( self::ACESSO_NEGADO ); } /** * Exibe o erro HTTP 401 para acesso negado */ static private function unauthorized(){ header( 'HTTP/1.0 401 Unauthorized' ); printf( self::ACESSO_NEGADO ); } /** * Valida os dados do usuário, aqui a validação pode ser de qualquer forma, inclusive recuperando os * dados em um banco de dados * @return boolean TRUE se os dados do usuário forem válidos */ static private function validate(){ $ret = false; if ( ( self::$user == "teste" ) && ( self::$pswd == "senha" ) ){ $ret = true; } return( $ret ); } } Main::start(); Coloque o código acima em um arquivo index.php na pasta que você quer proteger e na mesma pasta você coloca o .htaccess []'s J. Neto
  14. Eu faria assim: public function listar(){ $ret = false; try { $stmt = $this->conexao->query("SELECT * FROM produtos ORDER BY descricao"); $this->conexao = null; // Definimos o retorno aqui para que uma exceção disparada pelo PDO não nos confunda. $ret = $stmt; } catch ( PDOException $ex ){ throw new Exception( $ex->getMessage() , $ex->getCode() , $ex ); } return( $ret ); } try { if ( $obj->listar() !== false ){ printf( "Ok, retornamos um resultado\n" ); } } catch ( Exception $e ){ printf( "Erro[ %d ]: %s\n" , $e->getCode() , $e->getMessage() ); } []'s J. Neto
  15. Bom, você não pode utilizar move_uploaded_file para o passo 3 porque a foto já não está mais na pasta temporária de uploads do servidor, em vez disso ela está na sua pasta temporária. Para mover/renomear um arquivo você utiliza a função rename: bool rename ( string $oldname , string $newname [, resource $context ] ) No seu caso ficaria assim: rename( $temp , "fotos/" . $id_gerado ); []'s J. Neto
  16. O que você pode fazer é criar uma pasta chamada temp e mover o arquivo para essa pasta, ai quando o usuário confirmar que a foto está correta você move novamente da pasta temp para a pasta fotos. ;)
  17. hehehe, falha minha... Bom o que está acontecendo é que eu não imaginei que arq1 e arq2 pudessem ficar tão grandes.... Se você utilizar uma @ na frente do preg_match você eliminará o Warning que está sendo gerado atualmente, porém você terá uma execução realmente MUITO lenta conforme o número de linhas começar a crescer. Talvez se mudarmos o ponto de vista em relação ao preg_match consigamos um resultado menos danoso: // Abrindo e lendo o arquivo arq1.txt $arq1 = fopen( "arq1.txt" , "r" ); $arq1str = ""; $arq1arr = array(); while ( ( $line = fgets( $arq1 ) ) ){ $arq1str .= $line; } // Abrindo e lendo o arquivo arq2.txt $arq2 = fopen( "arq2.txt" , "r" ); $arq2str = ""; $arq2arr = array(); while ( ( $line = fgets( $arq2 ) ) ){ $arq2str .= $line; } $arq1bool = preg_match_all( "/^.*$/m" , $arq1str , $arq1arr ); $arq2bool = preg_match_all( "/^.*$/m" , $arq2str , $arq2arr ); // Verificamos se o arq1.txt tem alguma linha if ( $arq1bool ) { $diff = array(); // Verificamos se encontramos alguma linha no arq2.txt, se não encontrarmos então a diferença é o próprio arq1.txt if ( $arq2bool ) { // Comparando as diferenças $diff = array_diff( $arq1arr[ 0 ] , $arq2arr[ 0 ] ); } else { $diff = $arq1arr[ 0 ]; } // Verificando se existem itens no arq1.txt que não estão no arq2.txt if ( count( $diff ) ) { // Existem itens no arq1.txt que não estão no arq2.txt então vamos gravá-las no arq3.txt $arq3 = fopen( "arq3.txt" , "w+" ); $arq3_content = implode( "\r\n" , $diff ); // Fechando o arq3.txt fwrite( $arq3 , $arq3_content , strlen( $arq3_content ) ); fclose( $arq3 ); } } // Fechando os arquivos fclose( $arq2 ); fclose( $arq1 ); Tenta ai e me da um toque... []'s J. Neto
  18. Tenta assim: if($fastuper=="Ligado"){ $cor="#00ff00"; }else{ $cor="#ff0000"; } echo "Status: <span style=\"color:$cor;\">$fastuper</span>";
  19. Bom, não tinha visto sua resposta no fórum por isso enviei outra em PVT. Mas lamento profundamente que esse fórum seja "moderado" dessa forma. Por mim, pode considerar o tópico encerrado. Abraços, João Neto
  20. Bom, a sintaxe do PHP nesse caso da condicional é muito similar à do C: if ( lvalue == rvalue ){ //são iguais } else { //são diferentes } Assim: abstract class Color { const GREEN = "#00FF00"; const RED = "#FF0000"; } if ( $fastuper == "LIGADO" ){ $LIGADO = Color::GREEN; } else { $DESLIGADO = Color::RED; } Porém, se LIGADO e DESLIGADO não forem variáveis e sim constantes você faria assim: if ( $fastuper == "LIGADO" ){ define( "LIGADO" , Color::GREEN ); } else { define( "DESLIGADO" , Color::RED ); } Agora, se você utilizar apenas uma variável ou constante para definir a cor, você poderia fazer assim: abstract class Color { const GREEN = "#00FF00"; const RED = "#FF0000"; } $cor = $fastuper == "LIGADO" ? Color::GREEN : Color::RED; // ou como constante define( "COR" , $fastuper == "LIGADO" ? Color::GREEN : Color::RED ); []'s J. Neto
  21. Será mesmo que é ? Alguém aqui já leu algum código realmente grande ? Gente, tenho uma classe A que utiliza uma classe B e C, a classe B utiliza uma classe D e E e a classe C uma classe F e G. Vocês estão me dizendo que eu devo incluir na classe A as classes: D e E (que fazem parte da B ) F e G (que fazem parte da C ) Sem contar é claro as classes B, C (que fazem parte da própria classe A ). Por que se for isso mesmo, então acho realmente que todo mundo enlouqueceu, hehehehe, fico imaginando um arquivo codificado assim, tipo. 1a linha: include... 2a linha : include... ... 576a linha: include... <? Aplicacao::getObj()->mostra_nome(); //Detalhe que a classe Aplicacao foi definida no include 3 ?> Uau, fico imaginando o quão elegante é um código assim... Abraços a todos.
  22. Meu amigo: 1. Ou você é completamente LOUCO ou 2. Você NUNCA desenvolveu uma aplicação maior que dois ou três arquivos ou 3. EU preciso URGENTEMENTE voltar para a faculdade. Lamento pelo tom, moderação, mas acho que a resposta do Marcus Nunes ẽ completamente ridícula e posso enumerar uma centena de ocasiões onde incluir um arquivo e esse arquivo incluir outros arquivos que também incluem outros arquivos É NATURAL e muitas vezes reflete UMA BOA PRÁTICA DE PROGRAMAÇÃO. Bom Beraldo, existem várias formas de se fazer isso, algumas mais elegantes e outras mais fáceis e práticas, vou passar como exemplo uma mais prática e mais simples de implementar, porém você terá sempre que tomar cuidado com o uso pois você pode correr um risco de segurança se esse método for utilizado de forma errada: No seu arquivo validar_session.php (que está na raiz): include_once( sprintf( "%sseu_arquivo.php" , $_SERVER[ "DOCUMENT_ROOT" ] ) ); O código poderá não funcionar se você estiver desenvolvendo em um ambiente onde você tem um "localhost" e nesse servidor você tem várias pastas, uma para cada projeto. Nesse caso você pode utilizar uma verificação antes do include: if ( $_SERVER[ "SERVER_NAME"] == "localhost" ){ $nome_da_pasta_do_seu_projeto = "projeto"; include_once( sprintf( "%s%s/seu_arquivo.php" , $_SERVER[ "DOCUMENT_ROOT" ] , $nome_da_pasta_do_seu_projeto ) ); } else { include_once( sprintf( "%sseu_arquivo.php" , $_SERVER[ "DOCUMENT_ROOT" ] ) ); } Abraços Beraldo. PS: Marcus Nunes para garantir seu direito a réplica sem prejudicar o andamento do fórum, você pode escrever diretamente para o meu email: neto.joaobatista@gmail.com []'s J. Neto
  23. Bom amigo, você pode utilizar as funções nativas do PHP para fazer isso: array_filter: Irá criar um filtro utilizando uma função callback arsort: Irá ordernar sua matriz de forma reversa (O maior virá primeiro e o menor por último) Primeiro você cria a função callback para trabalhar com o array_filter: /** * Pontua os elementos de uma matriz segundo o número de ocorrências * <p> * Caso seja passado o parâmetro $valor então assumiremos que estamos atuando como callback e * retornaremos sempre FALSE, se nenhum parâmetro for passado então assumiremos que estamos atuando * standalone e retornaremos uma matriz com a lista de elementos já pontuada e ordenada * </p> * * @param mixed $valor O elemento da matriz * @return boolean|array */ function rank( $valor = null ){ static $lista = array(); $ret = false; // Usamos func_num_args aqui para evitar um comportamento inesperado caso algum elemento da matriz contenha NULL if ( func_num_args() ){ if ( $valor == NULL ) $valor = "NULL"; if ( !isset( $lista[ $valor ] ) ) $lista[ $valor ] = 1; else ++$lista[ $valor ]; } else { $ret = $lista; //Ordenamos a matriz de forma reversa para que o elemento que tiver maior quantidade seje o primeiro da lista arsort( $ret ); // Reiniciamos a matriz para que a função rank possa ser utilizada como callback novamente $lista = array(); } return( $ret ); } Depois de definido seu callback você pode trabalhar com sua matriz normalmente: $canal[]='Globo'; $canal[]='Globo'; $canal[]='Globo'; $canal[]='SBT'; $canal[]='Globo'; $canal[]='Globo'; $canal[]='Record'; $canal[]='Record'; $canal[]='SBT'; $canal[]='SBT'; $canal[]='SBT'; $canal[]='Record'; // Fazemos o filtro na matriz array_filter( $canal , "rank" ); // Chamamos a função rank agora sem ser como callback, para recuperar a lista: var_dump( rank() ); ?> O código acima irá produzir: array(3) { ["Globo"]=> int(5) ["SBT"]=> int(4) ["Record"]=> int(2) } []'s J. Neto
  24. Bom amigão, em qualquer linguagem que trabalha com esses operadores o funcionamento é o seguinte: Os operadores de incremento e decremento podem ser de prefixo e de sufixo, os de prefixo têm prioridade na operação (ocorrem antes das outras operações): $a = 2; $b = 1; $c = ++$a + $b; var_dump( array( $a , $b , $c ) ); O código acima vai produzir: array(3) { [0]=> int(3) [1]=> int(1) [2]=> int(4) } Isso porque a prioridade foi dada ao operador de incremento de prefixo, ou seja: Defina a variável $c com o valor incrementado de $a somado ao valor de $b Porém os operadores de incremento de sufixo ocorrem depois da expressão ser interpretada: $a = 2; $b = 1; $c = $a++ + $b; var_dump( array( $a , $b , $c ) ); O código acima irá produzir: array(3) { [0]=> int(3) [1]=> int(1) [2]=> int(3) } Ou seja: Defina a variável $c com o valor da variável $a somado ao valor da variável $b, somente então incremente a variável $a Um exemplo legal é o próximo: $a = 2; $b = 1; $c = $a++ + $b - $a; var_dump( array( $a , $b , $c ) ); Você pode pensar: "Bom, se $a++ + $b resultou em 3 e $a vale 2 e $b vale 1, então $3 menos o valor de $a que é 2 resultará em 1" Porém, como a operação onde o operador de incremento de sufixo tem preferência já terminou então significa que o escopo da operação já é outro, no caso a definição da variável $c é: Defina a variável $c com o valor da soma entra $a e $b, incremente $a e então subtraia do total o novo valor de $a, em partes: $c = $a + $b; //2 + 1 => 3 $a = $a + 1; //2 + 1 => 3 $c = $c - $a; //3 - 3 => 0 array(3) { [0]=> int(3) [1]=> int(1) [2]=> int(0) } []'s J. Neto
×
×
  • Criar Novo...