sexta-feira, 4 de abril de 2008

Calculadora de salários

Primeiramente cuidado ao copiar os códigos aqui, essa pqp de blogger acha que é inteligente e fica mudando o que eu escrevo achando que é HTML, como não tem tag code, não tem como eu evitar alguns erros

Um bom profissional é aquele que sempre se atualiza, sabendo disto estou fazendo um curso de PHP, é verdade rsrs! Então já viu né exercicios bobinhos, dai resolvi postar aqui pra galera que quer aprender junto

Bom vamos a um exercício básico de aplicação do PHP que pode ser usada em um sistema de uma empresa, uma calculadora de salários. O exercício proposto no curso era apenas fazer uma calculadora com 3 condições de descontos, no entanto dei uma pequena incrementada, vamos ao que interessa:

Proponho que antes de ler as explicações abaixo leiam o código na imagem e tentem interpretar. Preste atenção pois quem não presta atenção se ferra...

Explicando:

Primeira condicional: formulário

if ($_POST["enviado"] == "sim") {
//conteudo
}

está condicional serve para verificar se o formulario foi enviado ou não, dessa forma podemos fazer com que a área de resultados apenas apareca quando solicitada

Varriavel salario

$salario = $_POST["salario"]; // Pega valor
str_replace(",", ".", $salario); // Substitui . por virgula

No PHP virgula é representada por pontos, logo poderá vir um ponto na string salario se vindo direto do banco de dados, ou mesmo o usuário pode cismar de digitar , invés de virgulas por isso uasamos a função str_replace ou seja "string_replace". A sintaxe é a seguinte

str_replace("[substituto]", "[caractere a ser substituido]", [varriavel ou string onde esta o tal caractere]);

Varriavel personalizado

$personalizado = $_POST["personalizado"]; // Serve para pegar se o desconto é personalzado ou não

Segunda condicional: salários

if ($salario < vtdesconto =" 4;" tkdesconto =" 5;" irdesconto =" 6;"> 401 and $salario <= 600) { // Multiplicadores de descontos dos que recebem até 600 $VtDesconto = 6; $TkDesconto = 7; $IrDesconto = 8; } elseif ($salario > 600) {
// Multiplicadores de descontos dos que recebem mais que 600
$VtDesconto = 8;
$TkDesconto = 9;
$IrDesconto = 11;
}

Essa condicional testa o valor do salário e aplica os mutiplicadores de cada um dos seus descontos:

Vt = Vale Tranporte
Tk - Ticket
Ir = Imposto

Porque os multiplicadores são estes valores? lembra da formula de porcetagem que vc aprendeu lá na quarta serie:

% = valor * porcentagem / 100

os mutiplicadores sao as porcetagens de cada condição

Como não existe salário (legalmente) abaixo de R$ 400,00 se o valor digitado for menor que 399 retorna erro.

Obs: lembra que eu falei pra prestar a atenção? se você leu até aqui é pq está prestando então vou te contar um segredo... tem um erro no código pronto e na imagem a condicional que retorna o erro esta abaixo das outras e assim não funciona, coloque a condicional de erro acima das outras.

Terceira condicional: Personalizado

Verifica se os valores foram personalizados e se sim muda os descontos para os que o usuario digitou:

if ($personalizado == "Calcular") {
// Multiplicadores de descontos personalizados
$VtDesconto = (int)$_POST["vtDesconto"];
$TkDesconto = (int)$_POST["tkDesconto"];
$IrDesconto = (int)$_POST["irDesconto"];
}

O (int) serve pra converter o valor em numero inteiro caso o usuário digite 1,3 o sistema entederá 1.

Condicional quarta: calculo

A condicinal verifica se os valores dos descontos realmente são numeros inteiros e efetua os calculos se nao retorna erro

if (is_integer($VtDesconto) and is_integer($TkDesconto) and is_integer($IrDesconto)) {
$vtDescontoValor = ($salario * $VtDesconto) / 100;
$tkDescontoValor = ($salario * $TkDesconto) / 100;
$irDescontoValor = ($salario * $IrDesconto) / 100;
} else {
print "Valor de desconto em formato inválido!";
}

Total do salário

$totalSalario = $salario - $vtDescontoValor - $tkDescontoValor - $irDescontoValor;

Não precisa explicar isso né?!

Agora é só imprimir

print "

Salário: R$ " . str_replace(".", ",", $salario) . "
";
print "Desconto de vale transporte: R$ " . str_replace(".", ",", $vtDescontoValor) . "
";
print "Desconto de ticket refeição: R$ " . str_replace(".", ",", $tkDescontoValor) . "
";
print "Desconto de Imposto de Renda: R$ " . str_replace(".", ",", $irDescontoValor) . "
";
print "
Total: R$ " . str_replace(".", ",", $totalSalario) . "

";

[ Download do código ]

domingo, 23 de março de 2008

PHP 5 - Orientação de objetos



Olá pessoal depois de algum tempo volto a postar sobre de desenvolvimento, o motivo é simples a tão esperada orientação por objetos do PHP 5, o famoso PHP O.O. Você que é da área já deve ter ao menos ouvido falar ou visto em uma vaga de empregos qualquer: "ter noções de PHP O.O" - o engraçado é que a maioria do povo que fala isso é pra trabalhar com frameworks de PHP, como o Cake por exemplo, onde em minha vista ter noções de orientação de objetos não basta, pois afinal a idéia do frameworks é tornar seu trabalho mais rápido, isso não quer dizer que você tendo um nível baixo de conhecimento você vá conseguir manipula-lo de forma correta. Mas vamos ao Post...

Recentemente comecei meus estudos sobre Orientação de Objetos através do livro PHP 5 Objects, Patterns, Pratice de MATT ZANDSTRA. Bom na verdade este livro trata-se de uma abordagem mais avançada do uso de PHP Orientado a Objetos em equipe, planejamento de projetos e etc. Muito bom, recomendo sua leitura, no entanto se você e iniciante, ou sempre programou em PHP 4 sem usar classes (como foi no meu caso) terá de procurar informação na Internet sobre O.O e muitas vezes se deparará com tutoriais do tipo: "olha o código aí e se vira", bom isto funciona mas na verdade você não cria um base de conhecimento sobre o assunto ali monstrado. Por isto decidi escrever este pequeno tutorial, onde tentarei explicar um pouco sobre Orientação de Objetos.

Vamos iniciar dizendo o que são classes e por que usa-las

Classes e objetos

A melhor definição de classes é olhar elas como se fossem modelos, imagine um time de futebol, você cria um modelo de uniforme todos usam ele mas nem por isto todos são iguais, um dibla melhor, o outro marca melhor, o outro tem melhor chute e por ai vai. Vamos ilustrar isso como um modelo:

uniforme = azulchuteiras = brancasdible = Xchute = Ymarcacao = Z

Temos um modelo, todos os nossos jogadores terão o mesmo uniforme e chuteiras brancas, no entanto suas qualidades dible, chute e marcacao sao varriaveis PERTECENTES a cada jogador. Agora imagine: troque a plavra jogador por OBJETO e imagine que cada OBJETO vira especificando suas habilidades.

Imaginou? se sim você já entendeu 90% da Orientação por Objetos e também qual sua vantagem, afinal é simples: Você pode colocar seu jogador no modelo do seu time importando suas qualidades.

"OBJETO terá suas habilidades incluídas no modelo CLASSE."

Sintaxe de uma classe

Você sempre iniciará uma classe com a palavra class seguida de um nome que vocêe definir para a classe

class minhaclass {

}

Após iniciar a classe você vai declarar as varriáveis que serão usadas pela classe, incluindo as que vem de fora da classe.

class minhaclass {

var $chute;

}

As váriáveis podem ser publicas, protegidas ou privadas mais tarde veremos sobre isto, por enquanto use apenas public, desta forma ficaria assim:

class minhaclass {

public $chute;

}

As varriavéis publicas sãos as que podem ser acessadas de dentro ou de fora da classe, afinal elas são publicas

Após ter declarado as varriavéis você criará as funções da sua classe ou seja METODOS

O primeiro metodo a ser criado numa classe geralmente é o __construct usado para atribuir suas varriaveis.

class minhaclass {

public $chute;

function __construct ($chute) {

$this->chute = $chute;

}

}

Pronto agora sua varriavel está atribuida ou seja onde estiver escrito chute agora é o mesmo que $chute.

Esse $this-> que apareceu ai é uma varriavel padrão do PHP, pense nele como se fosse a varriavel $_POST só que invés de ['campo'] na frente tu coloca ->metodo.$this é o mesmo que o objeto que está chamando aquela classe ou seja $this no nosso exemplo é igual ao jogador:




$jogador->chute




sendo que chute é dinamico varia de jogador pra jogador, no final seria:




fulano->99 // 99 é o que ele teria de chute




Bom como neste primeiro exemplo a varrivel é public é só imprimir agora certo?




errado, antes de imprimir você deve iniciar o objeto, ou seja você deve agora criar o jogador:




$objeto_jogador = new minhaclass(99)




$objeto_jogador é uma varriavel qualquer, new minhaclass cria o jogador, 99 atribui 99 ao seu chute




dai a pergunta mas como 99 vai atribuir ao chute? e se tiver outra varriavel como o codigo vai saber qual que é qual?




Lembra da função mail por exemplo? como vc usa ela? mail($para, $assunto, $mensagem) não é?




Ele vai saber que 99 se refere ao chute pelo mesmo motivo que a mail sabe que o seu $para se refere ao email destinatario. Porque lá em cima vc colocou as varriaveis (parametros) nessa ordem ao constuir a função dentro da classe, lembra?




class minhaclass { public $chute; function __construct ($chute) { $this->chute = $chute; }




Agora podemos imprimir o a qualidade do jogador assim




echo "Chute".$objeto_jogador->chute.;




// $objeto_jogador->chute = objeto>metodo




Enfim agora vemos como ficou: