Um objeto é cheio de informação, cheio de atributos, variáveis, funções, faz isso, faz aquilo e se você for lembrar de fazer tudo ao criar cada coisa, ficaria louco.
Imagina que é o chefe de TI de uma grande empresa, cada pessoa que entra você tem que registrar nome, setor, salário, carga horária...não ia dar, ia ser muito trabalho manual, e programador é preguiçoso por natureza.
Existe um método, chamado método construtor, que ele já cria um objeto com diversas informações, automaticamente.
É o método construtor.
Método Construtor
O método construtor é um método como outro qualquer, a primeira diferença é que ele tem o nome da classe. Sempre.
Se sua classe for "Funcionario", seu método vai se chamar "Funcionario".
O método construtor tem a característica de sempre iniciar ao criarmos um objeto.
Sempre que instanciamos um objeto, o método construtor é inicializado.
Vai aparecer "Construtor invocado".
Agora vamos fazer com que este construtor sete a variável $nome da classe.
Para isso, ao instanciarmos o objeto $func, precisamos passar uma variável.
Depois, imprimimos a variável $nome do objeto para ver se o método construtor inicializou ela corretamente, veja:
Neste tutorial, vamos aprender algumas palavras-chaves que permitem que nosso escopo tenha um comportamento especial relativo a segurança dos dados contidos.
Escopo de Atributo Public
Você pode declarar seus atributos com a palavra chave public antes:
class Pessoa
{ public $nome;
}
Isso significa que ele pode ser acessado e alterado do lado de fora por qualquer pessoa ou entidade:
$alguem = new Pessoa();
$alguem->nome = "Neil Peart";
$name = $alguem->nome;
echo "Nome da pessoa: $name";
Escopo de Atributo Private
Esse só pode ser acessado de dentro da clase.
class Pessoa
{ private $nome;
}
Para definirmos um valor para esse atributo, temos que criar um método setter:
class Pessoa
{ private $nome;
public function setNome($name) { $this->nome = $name; }
}
Escopo de Atributo Protected
Assim como algumas funções querem que variáveis existam somente dentro de seu escopo, podemos querer o mesmo em classes.
Para isso, usamos a palavra-chave protected:
class Pessoa
{ protected $nome;
}
Porém, atributos do tipo protected estão disponíveis para serem acessados e modificados por classes herdadas, o que é uma características não existente no modo private.
Escopo de Atributo Final
Fazendo com que uma variável seja final, você previne que ela seja sobrecarregada por uma subclase, ou seja, que outra classe defina um atributo 'por cima' na hora da herança.
class Pessoa
{ final $nome;
}
Discutiremos esse assunto mais em detalhes adiante.
Escopo dos Métodos
Assim como atributos, métodos também possuem seus escopos de níveis de encapsulação.
O public, permite que você invoque ele de qualquer lugar do código, como já fizemos alguma vezes.
Já o privado é mais recluso, não pode ser invocado por subclasses ou objetos instanciados.
O protected pode ser invocado por suas subclasses e em qualquer lugar da classe, sem problemas.
Existe ainda um tipo especial, chamado de abstract.
Ele é declarado na classe pai, porém só é implementado nas classes filhas.
Por exemplo, a classe:
class Animal
{ abstrc som();
}
Só isso.
Então a classe filha, que vai herdar a classe pai (ainda vamos estudar), é que implementa essa classe.
Se for um leão, implementa um som.
Se for uma cobra, implementa outro som.
Por fim, o escopo final, que assim como no atributo, evita que ela seja sobrescrita por qualquer classe herdada. Ela é a implementação única e final daquele método.
Nunca é interessante deixar que nossos atributos e métodos fiquem 100% disponíveis e livres para qualquer um usar, acessar ou até mesmo alterar, isso pode ser uma falha e deixar brecha para hackers invadirem seus sistemas.
Então, para acessar e alterar alguns tipos de informações, usaremos alguns métodos especiais, chamados accessors ou mutators, cujo único objetivo é alterar ou acessar determinadas informações, mas sob o 'olhar' vigilante e sanguinário do vigia, digo, do objeto, para saber o que está acontecendo de fato ali.
As funções Get e Set
Set significa...setar, configurar, colocar...quando setamos uma variável, estamos impondo um valor nela.
O método setName($name) por exemplo, vai colocar o valor $name na variável $name do objeto.
Para não confundir as coisas, a variável do objeto é definida pro:
$this->name
E a variável que vem de fora por: $name
Então, um método setName() que seta um nome para a variável do objeto é:
public function setName($name) { $this->name = $name;
}
Get significa pegar, acessar...usamos ela para ter controle, pegar alguma informação de uma variável de um objeto, por exemplo, a getName(), retorna o valor da variável $name de um objeto:
public function getName() { return $this->name;
}
Note que mais uma vez usamos o $this que serve para se referir ao próprio objeto.
Classe Empregado
Então uma classe Empregado, onde pedimos o nome do usuário, setamos o nome dele e depois exibimos, ficaria:
<html><head><title>Apostila PHP Progressivo</title></head><body><formaction=aemethod="get">
Digite o nome do funcionario<inputtype="text"name="name"/><br/><inputtype="submit"name="submit"value="Testar"/></form><?php$nome = $_GET['name'];
classEmpregado {
private$name;
// GetpublicfunctiongetName() {
return$this->name;
}
// SetpublicfunctionsetName($name) {
$this->name = $name;
}
}
$func = new Empregado();
$func->setName($nome);
echo"Funcionário: ".$func->getName();
?></body></html>
Uso real de SET e GET
O uso mostrado de set e get, são apenas para enfatizar que você não deve deixar que acessem diretamente os dados de atributos.
O saldo bancário, por exemplo, é um atributo.
O método get para acessar esse atributo, só deve ocorrer depois do usuário fornecer a senha ou digital dele, provando ser ele o titular da conta, só então ele vai poder acessar o atributo, entende?
O mesmo jeito o método set.
Vamos supor que ele tenha mil na conta e queira setar um saque de 1200.
Não dá amigo.
Você precisa fazer uma verificação antes de permitir qualquer set. Pra depositar, ok, pode depositar o que for, agora pra sacar, tem regras, não é só sair sacando, a vida real não é assim? Pois é exatamente assim nos sistemas reais bancários, ok?
Relembre: use métodos para deixarem que acessem suas variáveis,seus sagrados atributos.
Não se preocupe com a quantidade de teoria dada neste início, vamos aprender tudo depois na prática.
Poli quer dizer várias, morfos maneira. Ou seja, polimorfismos quer dizer várias maneiras de fazer a mesma coisa, e essa é uma característica da orientação a objetos.
Imagine que a classe Automóvel tenha a função ligar().
Ora, a maneira de ligar um carro é diferente da maneira de ligar uma moto, que é diferente da maneira de ligar um triciclo e é diferente da maneira de ligar uma mobilete. Mas todos são automóveis, e todos ligam, e todos tem a função (que em orientação a objetos chamamos de métodos) ligar().
Então, ao executar o método ligar() de um carro ou de uma moto, ele vai ligar, pode ser de uma maneira ou outra, mas vai ligar.
Isso é polimorfismo, é a capacidade de fazer algo de maneiras diferentes.
Se você tem um objeto chamado "moto", para ligar ela, vai acionar o método: moto.ligar()
Se tem uma "BWM", vai chamar o mesmo método: BMW.ligar()
Porém, cada um deles funciona de uma maneira diferente, internamente, embora todos sejam automóveis.
Isso é a ideia básica por trás do polimorfismo. O importante é ligar o automóvel.
Herança em Orientação a objetos
Uma das características mais interessantes da orientação a objetos, é a da herança, que é a capacidade que uma classe tem de herdar informações de outras classes.
Vamos supor a classe Funcionario.
Ela define todos os funcionários de uma empresa.
O que todos funcionários tem em comum?
Ué, salário, horário de trabalho, tarefas a fazer...
Porém, cada funcionário, de cada setor, tem coisas especificas a fazer.
Os funcionários de TI, herdam as características da classe Funcionário: tem salário, horários a cumprir e tarefas a fazer dentro da empresa.
Os funcionários de entrega, também herdam algumas características, como salário, horários a cumprir, mas não ficam dentro da empresa, ficam fazendo entregas fora dela.
O presidente da empresa também é um funcionário, também vai herdar características gerais da classe Funcionário, como salário, mas vai viajar, vai passar dias fora, nem sempre vai estar na empresa.
O que queremos dizer com isso, é que algumas classes podem herdar informações e métodos de outras classes ditas superiores, assim evitamos escrever muito código.
Dizemos que a classe Funcionario é uma superclasse.
A classe TI é uma subclasse, assim como a Entregador é uma subclasse, pois herdam características da classe Funcionario.
Uma subclasse herda atributos e métodos de uma superclasse.
Com o uso da herança, você poupa escrever código ao escrever uma classe que difere de outra apenas em algumas detalhes menores e mais específicos.
Encapsulamento em Programação orientada a objetos
Até o momento, todo nosso código são ‘pedaços’ soltos, uma função aqui, um formulário ali, e as coisas meio que vão se encaixando.
Uma função, por exemplo, ela é do script inteiro, qualquer um pode ter acesso a ela e usar como bem entender, isso pode ser bom ou ruim.
Pode ser bom por facilitar a vida, já que ela deveria ser usada mesmo
Pode ser ruim porque algumas funções não deveriam ser usadas por algumas pessoas.
Por exemplo, a galera da TI não deveria ter acesso as funções da galera do setor da Tesouraria da empresa, concorda?
E é aí que vem o encapsulamento.
Quando criamos uma classe, definimos basicamente duas coisas dentro dela: informações (atributos) e ações (métodos) e estes são próprios. Somente os próprios objetos tem acesso a seus próprios atributos e métodos.
Se quiser que um objeto do setor de RH converse com um objeto do setor de TI, você vai ter que fazer um método específico em ambos os lados para que ocorra essa conversa.
Um objeto não faz ideia do que ocorre dentro de outro. É um mundo a parte. É o encapsulamento.
Por exemplo, os atributos e métodos do motor de um carro não são acessíveis pelo objeto ar-condicionado, assim esse não pode se meter naquele e ocasionar problema. É cada um no seu quadrado, entendeu?
O conceito mais importante, de longe, para você entender, é o de classe e o de objeto. E também é considera o mais difícil, pois a definição é muito técnica, muito abstrata, mas vamos tentar resolver isso depois com exemplo do mundo real.
Classes são, em suma, entidades, com suas características e conceitos próprios, como pessoas, veículos, lugares, coisas abstratas, genéricas.
Cada entidade é definida por um conjunto de características e comportamentos específicos daquela classe.
As classes é como se fossem uma 'receita' um 'template' de algo tangível, e esse tangível são os objetos.
Tudo ao seu redor é um objeto. Classes são apenas ideias, generalizações, conceitos, objeto é a parte tangível, existencial da classe.
Calma, você não vai precisar fumar um pra entender essa viagem toda, vamos partir para o mundo real e entender de fato o que são classes e objetos.
A Classe Pessoa
Pessoa é uma classe, é uma generalização.
Pessoa tem cabeça, tem coração, tem cérebro, tem membro, tem órgãos, tem nome...mas você não conhece nenhuma Pessoa.
"Como não, PHP Progressivo, ta louco de pedra, tio? Claro que conheço pessoas"
Não, amigo.
Você conhece sua mãe, seu pai, o João, a Maria.
Você conhece pessoas específicas.
Você não chega em ninguém e essa pessoa diz:
- Oi, sou pessoa. Tenho nome, e tenho emprego. Tchau.
Não, ela diz.
- Sou Maria, sou programadora Web e rica pra caramba.
Pessoa é uma classe, uma generalização, um conceito.
Os objetos é que são reais, a Maria é um objeto, você é um Objeto.
A classe reúne características que todos os objetos tem:
Todo objeto da classe Pessoa tem nome, tem RG, alguns tem profissão outros não, todos tem pais (embora alguns conheçam ou não)...a classe é uma 'receita' de criar objetos. Entendeu?
Vamos pra mais um exemplo?
A Classe Carro
Carro é um belo exemplo de classe.
Ele tem suas funções e características.
Ele serve para se locomover, para refrigerar o ar interno, para prover um somzinho interno, para buzinar, as suas várias partes cumprem cada uma de suas funções...e tem suas características, cada carro tem sua cor, tem seu número de porta, motorização, tipo de câmbio.
Mas você não chega numa concessionária:
- Olá, quero um carro
- Ok, aqui está um carro
- Obrigado, vou levar
- É seu, você comprou
- Vou dirigir meu carro
Não, carro é uma classe, é uma abstração.
Você compra objetos: você compra Gol, Celta, Uno, Civic, Corolla...esses são objetos da classe Carro.
São exemplos específicos.
Chamamos instâncias.
A instância Uno tem 2 ou 4 portas, motor 1.0, é bem básico, não tem muita coisa de fábrica.
Já a instância Corolla, também é um carro, possui motor 2.0 e é mais completo.
Mas todas as instâncias possuem coisas em comum:
Possuem portas
Possuem motor
Possuem cor
Possuem peças fazendo funções
Ou seja, classes são uma espécie de 'receitas' para fazer os objetos.
E aí, deu pra entender melhor ?
Notou que vivemos em um mundo de objetos?
União: $a + $b
O array $b é anexado ao final do array $a, menos os conflitos de chaves
Igualdade: $a == $b
Verdade se $a e $b contém os mesmos elementos
Identidade: $a === $b
TRUE se $a e $b contém os mesmos elementos e na mesma exata ordem
Desigualdade: $a != $b ou $a <> $b
TRUE se $a e $b não contém os mesmos elementos, ou seja, ao menos um difere
Não-identidade: $a !== $b
Verdadeiro caso $a e $b não contenham os mesmos elementos na mesma ordem
Funções de Adição e remoção de elementos em Arrays
Adiciona elementos ao final: array_push()
Sintaxe:
int array_push(array alvo , variáveis);
Seja o array: $carros=array("gol", "celta");
Se fizermos: array_push($carros, "civic", "corolla")
Vai ficar: $carros=array("gol", "celta", "civic", "corolla");
Adiciona elementos ao início: array_unshift()
Funciona igual ao array_push(), mas ao invés de adicionar ao final, adiciona no começo.
Seja o array: $carros=array("gol", "celta");
Se fizermos: array_unshift($carros, "civic", "corolla")
Vai ficar: $carros=array("civic", "corolla", "gol", "celta");
Retira o último elemento: array_pop()
Retira e retorna o último elemento do array.
Sintaxe:
variavel array_pop(array alvo);
Seja o array: $carros=array("gol", "celta");
Se fizermos: $carro = array_pop($carros)
Temos: $carro = "celta";
Retira o primeiro elemento: array_shift()
Funciona igual o array_pop(), mas ao invés de retirar o último elemento, retira o primeiro.
Se estiver usando arrays numéricos, todos vão 'descer' um degrau numérico.
Se for em arrays associativos, nada acontece.
Seja o array: $carros=array("gol", "celta");
Se fizermos: $carro = array_shift($carros)
Temos: $carro = "gol";
Localizando Elementos em um Array
Localizar se algo está no array: in_array()
Sintaxe:
boolean in_array(algo, $array);
Retorna TRUE se algo está no $array e FALSE caso não esteja.
Seja $carros=array("gol", "celta", "civic", "corolla");
Se fizermos:
in_array("civic", $carros) -> retorna verdadeiro
in_array("fox", $carros) -> retorna falso
Ele combina um array de que são serão as keys, o $key, com um que são os valores, o $value.
Seja:
$tipo=array('popular', 'sedan');
$modelo=array('gol', 'civic');
Se fizermos: $carros = array_combine($tipo, $modelo);
E dermos um print_r:
Array ( [popular] => gol [sedan] => civic )
Número aleatório de elementos: array)rand()
Sintaxe:
elementos array_rand($array, numero_aleatorio_elementos);
Ele pega um array e retorna um número aleatório de elementos.
Seja $carros=array("gol", "celta", "civic", "corolla");
Se fizermos:
$aleatorios = array_rand($carros, 2)
Aqui retornou: Array ( [0] => 0 [1] => 3 )
Ou seja, "gol" e "corolla", ele já dá a resposta em array associativo.
Embaralhar elementos: shuffle()
void shuffle(array input_array)
Simplesmente embaralha os elementos de um array.
Por exemplo, se tiver: $carros=array("gol", "celta", "civic", "corolla");
E fizer: shuffle($carros);
O resultado vai ser:
Array ( [0] => celta [1] => gol [2] => corolla [3] => civic )
Somando elementos: array_sum()
array_sum($array)
Retorna a soma de todos os items que forem somáveis, ou seja, que foram inteiros ou floats.
Seja:
$meuArray = array(21, "rush", 12);
E fizermos: $soma = array_suma($meuArray);
O resultado séra: $soma=33
Como se já não bastasse o número de laços (while, do while e for) existentes na linguagem, os criadores do PHP desenvolveram um especialmente para se usar com arrays, o foreach as.
Vamos pegar o array: $carros = array('gol', 'celta', 'fox', 'corolla', 'civic'); Para exibir esses carros usando foreach, fazemos:
O que ocorre é o seguinte...fazemos com que o array $car assuma o valor de cada elemento do array maior $carros. Assim, o laço foreach percorre todos os elementos do array $carros, onde podemos trabalhar da maneira que quisermos com cada item.
O Loop foreach as ... para arrays associativos
Embora não sejam estruturas enumeradas e logicamente organizadas, é possível usar o laço foreach com arrays associativos também. Vamos definir um array de chaves e valores da seguinte forma: $carros['popular'] = 'celta'; $carros['sedan'] = 'corolla'; $carros['premium'] = 'bmw'; $carros['suv'] = 'hr-v'; Para exibir da chave e cada valor, com foreach, um por linha, fazemos:
A variável $chave vai pegar o valor de cada key do array $carros e a variável $valor o value de cada elemento correspondente, assim podemos acessar e alterar esses elementos da maneira que quisermos. Note que é possível percorrer arrays gigantescos, medonhos e ir fazendo alterações, copiando, ou o que for, de uma maneira muito simples e totalmente automatizada com o laço foreach as...que inglês significa "para cada ... como..." Ou seja, "para cada elemento do array, trate como"...e o foreach vai sozinho pegando um por um, todos os elementos do array.
Muitas vezes, é necessário preencher um array com números, ordenados.
Por exemplo, criar um array de 100 elementos, para representar os funcionários de uma empresa e inicializar eles manualmente se torna uma tarefa enfadonha.
Imagina nas lojas virtuais que você vai criar, com milhares de produtos a venda?
A função range() é perfeita para se trabalhar com arrays e ela possui a seguinte sintaxe:
array range(int menor, int maior, int pulo);
Esse pulo, é opcional.
Mas é basicamente assim, você vai fornecer um valor mínimo (menor) e um máximo (maior) e ela te retorna um objeto do tipo array
Por exemplo, vamos criar um dado, um array que vai de 1 até 6:
$dado = range(1, 6);
Pronto, $dado já um objeto do tipo array com 6 elementos (de índices que vão de 0 até 5 - sempre se lembre, em computação se começa contando do 0 e não do 1).
Função range() com salto
Vamos supor que você queira um array com elementos de 1 até 100, mas de 2 em 2.
Ou seja, seus elementos vão ser: 1, 3, 5, 7, 9, ..., 99
Basta fazer: $meuArray = range(1, 100, 2);
Primeiro o ponto de partida, depois o ponto máximo que ele pode chegar e o salto que vai ficar dando como terceiro argumento.
Função range() para Letras
É possível usar a função range com letras também.
Para gerar o alfabeto minúsculo:
$alfaminusculo = range('a', 'z');
Para gerar o alfabeto maiúsculo:
$alfamaiusculo = range('A', 'Z');
E prontinho, automaticamente vai ter um array totalmente preenchido pronto para você usar, seja lá qual for sua necessidade, e acredite, várias vezes você vai precisar usar a range.
Porém, as vezes fica difícil trabalhar com números, é decorativo pois você precisa lembrar que número é associado a cada elemento e isso também deixa difícil para outros programadores darem manutenção em seu código.
E é aí que entram os arrays associativos, que não precisam de números para associar determinados items, você pode associar qualquer chave (key) para relacionar a qualquer valor (value).
Como criar um array associativo
Vamos supor que você foi contratado numa concessionária e vai precisar criar um array com os carros da sua loja, mas você vai usar arrays associativos. Nosso array é o $array.
Em vez de números, vamos dar nomes as keys:
$carros['popular'] = 'celta';
$carros['sedan'] = 'corolla';
$carros['premium'] = 'bmw';
$carros['suv'] = 'hr-v';
Pronto.
Quer se referir ao Celta, que é um carro popular? Acesse o item do array:
$carros['popular'];
Como imprimir arrays associativos
Vamos imprimir esse array:
print_r($carros);
O resultado é:
Array ( [popular] => celta [sedan] => corolla [premium] => bmw [suv] => hr-v )
Veja o motivo de ser associativo:
[popular] => celta
[sedan] => corolla
[premium] => bmw
[suv] => hr-v
Os nomes da esquerda são as keys e da direita os values.
Aí fica mais fácil entender essa 'associação' dos pares chave-valor.
Primeiro, vamos te ensinar como criar um array numericamente indexado, que são os mais comuns na maioria das linguagens de programação.
A sintaxe é:
$nome_variavel = array (elemento0, elemento1, elemento2, ...)
Ou seja, basta escolhermos o nome da variável, usar a palavra-chave array, abrir parêntesis e entre vírgulas fornecer os elementos de um array.
Vamos criar um array de carros:
$carros = array('gol', 'celta', 'fox', 'corolla', 'civic');
Uma outra maneira de inicializar um array seria:
$carros[]='gol';
$carros[]='celta';
$carros[]='fox';
$carros[]='corolla';
$carros[]='civic';
Note que tem um par de colchetes após o nome da variáveis, ela quer dizer que estamos lidando com um array, e não com uma variável escalar simples.
Cada vez que fazemos isso, estamos adicionando um elemento so array $carros.
Como Acessar Elementos de um Array
Para os programadores, a contagem começa do 0, sempre.
Assim, o primeiro elemento, é o elemento 0, e é o 'gol'.
Elemento 0 -> 'gol'
Elemento 1 -> 'celta'
...
Elemento 4 -> 'civic'
Para acessar o primeiro elemento, fazemos:
$carros[0] -> aqui está armazenada a string 'gol'
$carros[1] -> aqui está armazenada a string 'celta'
...
$carros[2] -> aqui está armazenada a string 'corolla'
Como Exibir Elementos de um Array
Imagina que tivéssemos a variável
$meuCarro='gol'
E você quisesse escrever em PHP: "Meu carro é um $meuCarro";
Você entenderia perfeitamente, não é verdade?
Aqui, com arrays, é a mesma coisa, a diferença é em vez de uma variável comum, a do array possui um colchete de um número associado.
Ficaria: "Meu carro é um $carros[0]"
Prontinho.
A diferença é que você tem um array com uma gama enorme de dados.
Como imprimir um Array: print_r
Existe uma função especial, a print_r() que serve para imprimir arrays de uma maneira mais bonita e organizada.
Teste: print_r($carros)
O resultado vai ser:
Array ( [0] => gol [1] => celta [2] => fox [3] => corolla [4] => civic )
Exercício de Array
Você foi contratado para ser um desenvolvedor web. Com seu salário, vai comprar uma BMW.
Adicione "BMW" ao array de carros e diga que possui uma BMW acessando o elemento do array.
Resposta:
$carros[] = 'BMW';
echo "Eu tenho uma $carros[5]";
Neste tutorial de nosso Curso de PHP, vamos dar uma introdução sobre o uso dos Arrays, falar o que são, para que servem, como e onde são usados, bem como criar alguns.
Até o momento, nossas variáveis serviam para armazenar uma coisa apenas de cada vez.
Uma número, uma string, um float...
As vezes, pedíamos 2, 3 até 5 informações ao usuário, até aí, ok.
Mas e se você for contratado para criar o sistema web de uma faculdade com mil alunos.
Vai criar mil variáveis?
Se cada aluno tiver 10 matérias? Vai criar 10 mil variáveis?
Assim não pode, assim não dá, e é aí que entram os arrays!
Arrays em PHP - O que é?
Veja os arrays como um conjunto ordenado de alguma coisa.
Por exemplo, uma sala de aula é um array de estudantes.
Uma concessionária, é um array de carros.
Pessoas na porta de uma boate, um array de clientes querendo entrar.
Arrays são um bloco de estruturas menores, parecidas entre si, que estão de alguma maneira ordenada, seja numericamente ou por uma chave (key).
Arrays em PHP - Onde são usados ?
Sabe aqueles pães de padaria, assim que saem de forma, todos grudados? São exemplos perfeitos de um array, onde cada pão é um elemento do array.
Então, em vez de trabalhar declarando mil variáveis na sua faculdade, você declara um array com mil elementos, onde cada elemento desse representa a nota de um aluno.
Imagine agora um sistema bancário, com milhões de clientes. Existe um array, onde cada cliente é um bloco desse array.
Um array pode conter um inteiro, um float, uma string, outro array (arrays multidimensionais), objetos de qualquer tipo...arrays são estruturas para se trabalhar com muita informação, de maneira rápida, fácil e organizada, como vamos ver.
Vamos ver como declarar e acessar os elementos de um array no próximo tutorial.
Quando o usuário digita algo via formulário, ele está introduzindo uma string.
Assim, ao invés de digitar o número 2112, ele está digitando a string:
"2112"
Então, para calcular o número de dígitos, temos que calcular tamanho de caracteres da string, e para isso usamos a função strlen() (string length):
function tamanho($n){
return strlen($n);
}
Número de dígitos de um número
E se ao invés de uma string for um número?
Simples, transforma em string.
Se $n for um número, transformamos ele em string assim:
$n = (string)$n
Ou assim:
$n .=""
Depois é só aplicar como argumento na função strlen.
7. Um número é dito perfeito quando ele é igual a soma de seus fatores. Por exemplo, os fatores de 6 são 1, 2 e 3 (ou seja, podemos dividir 6 por 1, por 2 e por 3) e 6=1+2+3, logo 6 é um número perfeito. Escreva uma função que recebe um inteiro e dizer se é perfeito ou não. Em outra função, peça um inteiro n e mostre todos os números perfeitos até n.
Como detectar números perfeitos
Vamos receber um número $n do usuário.
Dentro da função soma(), vamos ter uma variável chamada $divisores, que inicialmente é 0, ela vai receber a soma de todos os divisores.
Depois, com um laço, vamos dividir o número do usuário por 1, por 2, por 3...até por $n-1
Cada vez que for divisor, somamos esse números na $divisores.
Ao final da função, retornamos $divisores, que é a soma dos divisores.
Fora da função, verificamos se $n é igual ao retorno da função, se for, o número é dito perfeito:
Crie um script de um game. O PHP vai gerar um número entre 1 e 10, e você vai ficar tentando adivinhar que número foi esse. Se acertar, diz que acertou e mostra o número. Se errar, diz que errou, e mostra o número sorteado.
Jogo em PHP
Primeiro, começamos pedindo um número ao jogador, que vai ficar armazenado na variável $palpite. Depois, geramos um número aleatório entre 1 e 10 através da função rand() e armazenamos tal valor na variável $resposta. Agora é só comprar os valores de $palpite e $resposta. Se forem iguais, dizemos que acertou! Se forem diferentes, dizemos que errou e qual foi o número sorteado. Veja o código do jogo:
<html><head><title>Apostila PHP Progressivo</title></head><body><formaction=""method="get">
PHP gerou um número entre 1 e 10! Tente adivinhar!<br/>
Palpite:<inputtype="number"name="number"/><br/><inputtype="submit"name="submit"value="Calcular"/></form><?php$palpite = $_GET['number'];
$resposta = rand(1,10);
if($palpite==$resposta)
echo"Acertou miseravi! Era $resposta!";
elseecho"Errou! Era $resposta !";
?></body></html>
Você já viu aqueles captchas malucos ou sistemas que geram códigos para você confirmar no celular ou mesmo senhas aleatórias pra você?
Pois é, gerar valores aleatórios é algo muito importante mesmo no mundo da programação, e o lindo e maravilhoso PHP já possui uma função que faz tudo isso por nós, de maneira automática, é a função rand().
Dê um:
echo rand()
E fique atualizando a página.
Várias, várias vezes.
Vai ver que cada vez que atualiza, aparece um número diferente.
Esse número vai de 0 até getrandmax()
Aqui, esse getrandmax() deu 2147483647, e aí?
Gerando números aleatórios em um intervalo
A função rand() é tão versátil que você pode definir intervalos que você deseja gerar.
Por exemplo, para gerar 0 ou 1 para você brincar de par ou ímpar, faça:
rand(0,1)
Se você quiser simular lançamento de dados, faça:
rand(1,6)
Que ela vai gerar os números 1, 2, 3, 4, 5 e 6 aleatoriamente.
E se quiser um número quebrado? Entre 0.0 e 1.0?
Faça: rand(0,1)/10
Entendeu a lógica ?
Exercício: Criando um jogo em PHP
Crie um script de um game. O PHP vai gerar um número entre 1 e 10, e você vai ficar tentando adivinhar que número foi esse. Se acertar, diz que acertou e mostra o número. Se errar, diz que errou, e mostra o número sorteado. No próximo tutorial vamos te ensinar como fazer esse jogo em PHP. Como fazer um jogo em PHP
Neste tutorial de PHP, vamos aprender como fazer a conversão entre Celsius e Fahrenheit, e vice-versa, utilizando nossos conhecimentos de funções em PHP.
Escreva um script que pergunta ao usuário se ele deseja converter uma temperatura de grau Celsius para Fahrenheit ou vice-versa. Se ele digitar 1, é de Celsius para Farenheit, se digitar 2 é de Fahrenheit para Celsius, outro valor mostre uma mensagem de erro. Para cada conversão, chame a função correta.
Conversão Celsius e Fahrenheit
Vamos primeiro pedir a opção do usuário.
Se digitar 1, é porque ele vai digitar a temperatura em grau Celsius e quer Fahrenheit.
Se digitar 2, é porque ele vai digitar em Fahrenheit e quer a temperatura em Celsius,
No script PHP, tratamos essa opção.
Se ele escolher 1, chamamos a opção CtoF() e passamos o argumento $temperatura.
Se escolher 2, chamamos a função FtoC() e passamos o argumento $temperatura também.
Agora você pode até colocar seu site no ar, que faz essa conversão, pois está funcionando perfeita e maravilhosamente bem.
Você pode ir trabalhar numa estação de serviços meteorológicos e não vai mais precisar criar esse código de novo, pois já programou essa função, agora é só guardar esse script e usar quando quiser.
Pode guardar como "conversao.php" e prontinho, sempre que quiser usar é só dar um require_once "conversao.php" e fazer suas conversões a vontade
Escreva um script que pergunta ao usuário se ele deseja converter uma temperatura de grau Celsius para Farenheit ou vice-versa. Se ele digitar 1, é de Celsius para Farenheit, se digitar 2 é de Farenheit para Celsius, outro valor mostre uma mensagem de erro. Para cada conversão, chame a função correta. Conversão Celsius-Fahrenheit
Faça um programa, com uma função que necessite de três argumentos, e que forneça a soma desses três argumentos através de uma função. Seu script também deve fornecer a média dos três números, através de uma segunda função que chama a primeira.
Faça um programa que recebe três números do usuário, e identifica o maior através de uma função e o menor número através de outra função.
A probabilidade de dar um valor em um dado é 1/6 (uma em 6). Faça um script em PHP que simule 1 milhão de lançamentos de dados e mostre a frequência que deu para cada número.
A série de Fibonacci é uma sequência de números, cujos dois primeiros são 0 e 1. O termo seguinte da sequência é obtido somando os dois anteriores. Faça uma script em PHP que solicite um inteiro positivo ao usuário, n. Então uma função exibe todos os termos da sequência até o n-ésimo termo. Use recursividade.
Crie uma função que recebe um inteiro positivo e teste para saber se ele é primo ou não. Faça um script que recebe um inteiro n e mostra todos os primos, de 1 até n.
Um número é dito perfeito quando ele é igual a soma de seus fatores. Por exemplo, os fatores de 6 são 1, 2 e 3 (ou seja, podemos dividir 6 por 1, por 2 e por 3) e 6=1+2+3, logo 6 é um número perfeito. Escreva uma função que recebe um inteiro e dizer se é perfeito ou não. Em outra função, peça um inteiro n e mostre todos os números perfeitos até n. Números perfeitos em PHP
Faça um programa para imprimir:
1
2 2
3 3 3
.....
n n n n n n ... n
para um n informado pelo usuário. Use uma função que receba um valor n inteiro e imprima até a n-ésima linha
Faça um programa, com uma função que necessite de um argumento. A função retorna o valor de caractere ‘P’, se seu argumento for positivo, e ‘N’, se seu argumento for zero ou negativo.
Faça um programa com uma função chamada somaImposto. A função possui dois parâmetros formais: taxaImposto, que é a quantia de imposto sobre vendas expressa em porcentagem e custo, que é o custo de um item antes do imposto. A função “altera” o valor de custo para incluir o imposto sobre vendas.
Faça um programa que converta da notação de 24 horas para a notação de 12 horas. Por exemplo, o programa deve converter 14:25 em 2:25 P.M. A entrada é dada em dois inteiros. Deve haver pelo menos duas funções: uma para fazer a conversão e uma para a saída. Registre a informação A.M./P.M. como um valor ‘A’ para A.M. e ‘P’ para P.M. Assim, a função para efetuar as conversões terá um parâmetro formal para registrar se é A.M. ou P.M. Inclua um loop que permita que o usuário repita esse cálculo para novos valores de entrada todas as vezes que desejar.
Faça uma função que informe a quantidade de dígitos de um determinado número inteiro informado. Quantos dígitos tem um número
"Para entender recursividade, tem que saber recursividade".
Ao final deste tutorial de nossa apostila de PHP, vamos entender essa piadinha interna entre programadores.
Uma função recursiva é nada mais nada menos que uma função que invoca...ela mesma.
Sim, isso mesmo, é uma função que chama ela mesma.
Obviamente se for só o código da função chamando ela mesmo, essa de dentro também vai chamar ela mesma, que vai chamar de novo ela mesma...e você criou um vírus, que vai consumir toda memória ram do computador (você pode upar esse código para seu servidor web e pegar seus amigos).
Para isso, deve necessariamente haver uma condição em que as funções para de se invocar.
É simplesmente um IF e ELSE.
Se atingir determinado valor de argumento, para de se invocar.
Senão, continua se invocando.
Vamos ver como calcular um somatório, um fatorial e a sequência de Fibonacci usando apenas recursividade.
Somatório com Recursão
Seja F(n) uma função que representa o somatório de um número n, ou seja, é a soma:
F(n) = 1 + 2 + 3 + 4 + ...+ (n-1) + n