terça-feira, 22 de outubro de 2013

Criar um ambiente para desenvolvimento Java com Ecllipse

Hoje vou explicar como montar um ambiente para desenvolvimento Java.
Primeiramente vamos baixar o JDK - Java Development Kit (Kit para desenvolvimento Java). Basta pesquisar no Google por JDK download.


No site da Oracle, na página de download do Java, é possível selecionar somente instalação do Java (seta verde) ou a opção Java + IDE Netbeans (seta azul).


Apesar da instalação com Netbeans ser mais fácil, preferi instalar somente o Java (seta verde) pois a IDE que pretendo utilizar será a ECLIPSE. Na nova página não devemos esquecer de selecionar a opção de aceite aos termos de uso e após selecionar a versão do Java de acordo com seu S.O. - Sistema Operacional, exemplo Windows x86 (32 bits) ou Windows x64 (64 bits).


Continua...



segunda-feira, 27 de maio de 2013

Salvando Objeto no Banco - Parte 2

Continuando o post anterior: Salvando Objeto do Banco de Dados. Agora utilizaremos um formulário que submeterá os valores dos campos. Estes valores serão salvos no banco.

Primeiro criamos um novo arquivo, este arquivo será do uma página web do php com o nome cadastro_pessoa.php, segue código abaixo:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"$gt;
        Cadastro Pessoa
    </head>
    
        
        
</html>

Após criarmos o formulário precisamos tratar o retorno do formulário, conforme o código a seguir:

<?php
        //tratar o retorno do formulário
        if($_SERVER['REQUEST_METHOD'] == 'POST')
        {
            if(isset($_POST['salvar']))
            {
                $nome = $_POST['nome'];
                $endereco = $_POST['endereco'];
                
                $p = new pessoa(null, $nome, $endereco);
                $p->salvar();
            }
        }
?>

Não devemos esquecer de incluir a classe pessoa.php no início do arquivo cadastro_pessoa.php, conforme:

<?php
    include 'pessoa.php';
?>

Segue exemplo completo do arquivo cadastro_pessoa.php:
<?php

    include 'pessoa.php';
?>

<html>
    
        
        Cadastro Pessoa
    
    <body>
        <?php
        //tratar o retorno do formulário
        if($_SERVER['REQUEST_METHOD'] == 'POST')
        {
            if(isset($_POST['salvar']))
            {
                $nome = $_POST['nome'];
                $endereco = $_POST['endereco'];
                
                $p = new pessoa(null, $nome, $endereco);
                $p->salvar();
            }
        }
        ?>
        <form name="CadPessoa" action="" method="post">
            
            
            
            
            
            
        </form>
    </body>
</html>

Segue video tutorial:


Até a próxima!

domingo, 19 de maio de 2013

Salvando objeto no banco de dados.

Neste post vou explicar como salvar os dados do objeto. Vou utilizar o projeto anterior, onde criamos anteriormente a classe conexao responsável por conectar no banco de dados. Agora vamos criar uma nova classe chamada pessoa, no projeto escola.

<?php
class pessoa {
    
}
?>

Os atributos da classe pessoa semente para aprendizagem será id, nome e endereco. A visibilidade destes atributos serão protected.

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}
?>

Os atributos da classe pessoa possuem visibilidade protected, significa que precisamos criar os métodos get e set, para facilitar criamos estes métodos primeiro.

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}

    //métodos
    
    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
?>

Com os métodos get e set criados, agora criamos o método construtor. Neste método eu devo definir seus atributos como nulo, isso será útil quando explicarei o método selecionar, num post futuro. Eu crio primeiro os métodos set e get para beneficiar do code complete do NetBeans, isso é verificado no vídeo que disponibilizo no post. Note que o método construtor eu devo utilizar os métodos set's para atribuir os valores dos atributos.

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}

    //métodos
    public function __construct($id = null, $nome = null, $endereco = null) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
?>

Agora crio o método salvar, este método será responsável por salvar os valores dos atributos definidos no objeto que eu instanciar. No método salvar precisamos instanciar um objeto da classe conexao que será responsável pela conexão ao banco. Com objeto da classe conexao criado, devemos chamar o método conectar. Este método irá chamar outros métodos que foram herdados da classe MySQLI, são eles:

  • stmt_init() - Inicializa uma declaração e retorna um objeto para uso com prepare();
  • prepare() - responsável para preparar o comando que será enviado para o SGBD;
  • bind_param() - responsável por substituir os ? (pontos de interrogação) do método prepare() pelos valores, também devemos definir os tipos de dados que serão substituídos;
  • execute() - enviar o comando para execução no SGBD;
  • close() - fechar a conexão com o banco. 

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}

    //métodos
    public function __construct($id = null, $nome = null, $endereco = null) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }

    public function salvar()
    {
        $con = new conexao('127.0.0.1', 'root', '', 'bdEscola');
        $con->conectar();
        
        $con->stmt_init();
        $stmt = $con->prepare('insert into tbpessoa(nome, endereco) values(?, ?)');
        $stmt->bind_param('ss', $this->getNome(), $this->getEndereco());
        if($stmt->execute())
            echo 'Registro salvo!';
        else
            echo 'Impossível salvar registro!';
        $con->close();
    }

?>

Agora para testar vamos incluir no início antes da declaração da classe pessoa o arquivo conexao. Isso é necessário pois vamos utilizar um objeto conexao, para conectar ao banco.
<?php
include 'conexao.php';
class pessoa {

Agora instanciamos um objeto da classe pessoa para realizar o teste. Agora basta abrir no navegar o endereço da classe pessoa no navegador.
$p = new pessoa(null, 'Gloria Pires', 'Av. Copacabana, 1054');
@$p->salvar();

?>
Bom pessoal, é isso, disponibilizo abaixo código completo da classe pessoa e vídeo. Bom estudo!

<?php
include 'conexao.php';
class pessoa {

    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
    
    //métodos
    function __construct($id = null, $nome = null, $endereco = null) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }
    
    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
    
    public function salvar()
    {
        $con = new conexao('127.0.0.1', 'root', '', 'bdEscola');
        $con->conectar();
        
        $con->stmt_init();
        $stmt = $con->prepare('insert into tbpessoa(nome, endereco) values(?, ?)');
        $stmt->bind_param('ss', $this->getNome(), $this->getEndereco());
        if($stmt->execute())
            echo 'Registro salvo!';
        else
            echo 'Impossível salvar registro!';
        $con->close();
    }
}

$p = new pessoa(null, 'Gloria Pires', 'Av. Copacabana, 1054');
@$p->salvar();

?>

Criando uma Classe de conexão com o Banco de Dados utilizando MySLQI

Hoje vou ensinar como criar uma classe de conexão com o banco de dados utilizando a classe MySQLI. Vamos criar um novo projeto no NetBeans chamado escola. Com o projeto criado, vamos agora criar uma classe chamada conexao (só para lembrar não colocamos acento, espaços e nenhum caractere especial no nome de nossa classe), essa classe vai herdar atributos e métodos da classe MySQLI.

<?php
class conexao extends mysqli {

}
?>

Esta classe possui os seguintes atributos: servidor, usuário, senha e banco. Esses atributos são obrigatórios para realizar uma conexão como o SGBD MiSQL. Nossa classe ficará assim:

<?php
class conexao extends mysqli {
    //atributos
    public $servidor;
    public $usuario;
    public $senha;
    public $banco;
}
?>

Como Classe conexao possui os atributos com visibilidade public, não precisamos criar os métodos get e set, isso significa que podemos atribuir valores diretamente em nossos atributos, então vamos criar o método construtor, logo abaixo dos nossos atributos.

<?php
class conexao extends mysqli {
    //atributos
    public $servidor;
    public $usuario;
    public $senha;
    public $banco;

    //métodos
    function __construct($servidor, $usuario, $senha, $banco) {
        $this->servidor = $servidor;
        $this->usuario = $usuario;
        $this->senha = $senha;
        $this->banco = $banco;
    }
}
?>

Mas nosso método construtor apenas irá atribuir os valores quando instanciarmos o objeto conexao, isso não estabelece a conexão com o SGBD. Para estabelecer a conexão, devemos criar um método conectar. O método conectar utiliza o construtor da classe pai, ou seja, o método construtor da classe MySQLI. Para chamar o método construtor da classe MySQLI utilizamos o comando parent.

<?php
class conexao extends mysqli {
    //atributos
    public $servidor;
    public $usuario;
    public $senha;
    public $banco;

    //métodos
    function __construct($servidor, $usuario, $senha, $banco) {
        $this->servidor = $servidor;
        $this->usuario = $usuario;
        $this->senha = $senha;
        $this->banco = $banco;
    }

    public function conectar()
    {
        parent::__construct($this->servidor, $this->usuario, $this->senha, $this->banco);
    }
}
?>

Nosso método conectar já possibilita a conexão com o SGBD, mas caso aconteça algum erro? As boas práticas de programação exigem que os erros de tratados na aplicação, isso chama-se tratamento de Exceções. Somente para lembrar, já expliquei tratamentos de exceções na postagem Introdução a Orientação a Objetos no PHP - parte 3 .

<?php
class conexao extends mysqli {
    //atributos
    public $servidor;
    public $usuario;
    public $senha;
    public $banco;

    //métodos
    function __construct($servidor, $usuario, $senha, $banco) {
        $this->servidor = $servidor;
        $this->usuario = $usuario;
        $this->senha = $senha;
        $this->banco = $banco;
    }

    public function conectar()
    {
        try
        {
            parent::__construct($this->servidor, $this->usuario, $this->senha, $this->banco);
            if(mysqli_connect_errno() != 0)
            {
                throw new Exception('Erro ao conectar!');
            }
        }
        catch(Exception $e)
        {
            echo $e->getMessage();
        }
    }
}
?>
Agora vamos testar nossa classe conexao, para isso, vamos instanciar um objeto conexao no mesmo arquivo PHP, depois do fechamento da última chave da classe conexao. Após instanciarmos essa classe, o nosso exemplo estará completo. Observação: na linha 36 colocamos o @ na frente da chamado do método conectar para não exibir as mensagens de alerta do MySQL.

<?php
class conexao extends mysqli {
    //atributos
    public $servidor;
    public $usuario;
    public $senha;
    public $banco;

    //métodos
    function __construct($servidor, $usuario, $senha, $banco) {
        $this->servidor = $servidor;
        $this->usuario = $usuario;
        $this->senha = $senha;
        $this->banco = $banco;
    }

    public function conectar()
    {
        try
        {
            parent::__construct($this->servidor, $this->usuario, $this->senha, $this->banco);
            if(mysqli_connect_errno() != 0)
            {
                throw new Exception('Erro ao conectar!');
            }
        }
        catch(Exception $e)
        {
            echo $e->getMessage();
        }
    }
}

    //testar a conexão
    $con = new conexao('127.0.0.1', 'root', '', 'bdEscol');
    @$con->conectar();
?>
Disponibilizo o vídeo referente a esta aula. Qualquer dúvida ou comentário é só postar. Bom estudo!


segunda-feira, 8 de abril de 2013

Introdução a Orientação a Objetos no PHP - parte 5

Herança

Uma classe pode herdar atributos ou métodos de uma outra classe. Acrescenta-se após o nome da classe a palavra reservada extends seguida do nome da classe da classe da qual esta var herdar atributos e métodos. A classe que cede os atributos e métodos é chamada de superclasse e a classe que herdar os atributos e métodos recebe o nome de subclasse.

A subclasse pode utilizar os atributos e métodos existentes na superclasse, sobrescrever os métodos da superclasse ou criar outros atributos ou métodos.

O PHP procura primeiramente o método na subclasse. Caso o método não exista, ele será procurado na superclasse. Como toda regra existe sua exceção, os métodos definidos com a palavra reservada final, indicando que as subclasses não podem sobrescrever estes métodos, mas veremos isso somente mais a frente.

Para acessar os atributos e métodos da subclasse, devemos utilizar a palavra reservada parent seguida de ::  (dois pontos) exemplo: parent::setNome()


Como exemplo vamos criar a classe pai ou superclasse chamada pessoa, arquivo pessoa.php
<?php
/**
 * Description of pessoa
 *
 * @author aluno
 */
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
    
    //métodos
    function __construct($id, $nome, $endereco) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }
    
    public function __destruct() {
        echo "ID: " . $this->getId();
        echo "Nome: " . $this->getNome();
        echo "Endereço: " . $this->getEndereco();
    }

        
    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
}
?>

Depois criamos a classe filha ou subclasse chamada aluno, aluno.php.
<?php
/**
 * Description of aluno
 *
 * @author aluno
 */
include 'pessoa.php';


class aluno extends pessoa {
    //atributos
    protected $rm;
    protected $serie;
    protected $turma;
    
    //métodos
    public function __construct($id, $nome, $endereco, $rm, $serie, $turma) {
        parent::__construct($id, $nome, $endereco);
        $this->setRm($rm);
        $this->setSerie($serie);
        $this->setTurma($turma);
    }
    
    public function __destruct() {
        parent::__destruct();
        echo "RM: " . $this->getRm();
        echo "Série: " . $this->getSerie();
        echo "Turma: " . $this->getTurma();
    }

    
    public function getRm() {
        return $this->rm;
    }

    public function setRm($rm) {
        $this->rm = $rm;
    }

    public function getSerie() {
        return $this->serie;
    }

    public function setSerie($serie) {
        $this->serie = $serie;
    }

    public function getTurma() {
        return $this->turma;
    }

    public function setTurma($turma) {
        $this->turma = $turma;
    }
}
?>

E por último o formulário, arquivo cadastro.php


<?php 
    include 'aluno.php';
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro</title>
        <style type="text/css">
            label {display: block;}
        </style>
    </head>
    <body>
        <form name="fcadastro" action="<?php echo $_SERVER['PHP_SELF'];?>" method="get">
            <label for="id">ID </label>
            <input name="id" type="text" maxlength="5" size="5"/><br>
            <label for="nome">Nome </label>       
            <input name="nome" type="text" maxlength="50" size="50"/><br>
            <label for="endereco">Endereço </label>
            <input name="endereco" type="text" maxlength="50" size="50"/><br>
            <label for="rm">RM </label>
            <input name="rm" type="text" maxlength="5" size="5"/><br>
            <label for="serie">Série </label>
            <input name="serie" type="text" maxlength="10" size="10"/><br>
            <label for="turma">Turma </label>
            <input name="turma" type="text" maxlength="1" size="1"/><br>
            
            <input value="Salvar" type="submit"/>
        </form>
        
        <?php
        // put your code here
        if(!empty($_GET))
        {
            $id = $_GET['id'];
            $n = $_GET['nome'];
            $e = $_GET['endereco'];
            $rm = $_GET['rm'];
            $s = $_GET['serie'];
            $t = $_GET['turma'];
            
            $aluno = new aluno($id, $n, $e, $rm, $s, $t);
        
        }
        
        ?>
    </body>
</html>

Segue vídeoaula abaixo...


Até a próxima!

segunda-feira, 18 de março de 2013

Introdução a Orientação a Objetos no PHP - Parte 4

Construtor e Destrutor de Classes

O construtor  __construct(), é uma função definida na classe e que é executada sempre que o objeto é criado (isto é, sempre que a classe é instanciada). No PHP a função __construct() é implícita, ela esta subentendida quando usamos new(). A função __construct() pode ser construída de forma que aceite parâmetros na sua definição. 
    public function __construct($n = "", $i="")
    {
        $this->setNome($n);
        $this->t;setIdade($i);
    }
Isto é útil quando chamamos new() com parâmetros assim economizamos linhas de código pois não precisamos chamar os métodos set() para definir os valores dos atributos do objeto. Como no exemplo abaixo.
<?php
     if(!empty($_GET))
     {
         $n = $_GET['nome'];
         $i = $_GET['idade'];
         try 
         {
             $cliente = new Cliente($n, $i);
             //$cliente->setNome($nome);
             //$cliente->setIdade($idade);
             echo $cliente->getNome() . ", salvo com sucesso.";
             echo $cliente->getIdade() . " anos de idade.";
         }
         catch (Exception $e)
         {
             echo $e->getMessage();
         }
     }
?>
O destrutor da classe, a função __destruct() não recebe nenhum paràmetro, é executado sempre que o objeto for destruído, seja de forma explicita ou implicitamente (por exemplo, no final do script que utiliza a classe).
    public function __destruct() 
    {
        echo "O objeto " . $this->getNome() . " foi destruído.";
    }
Classes que estendem outras classes, ou seja, subclasses o construtor precisa ser chamado de forma explícita, mas sobre isso falarei mais adiante, nas aulas futuras. Disponibilizo o código completo da classe abaixo.
<?php
/**
 * Classe Cliente
 *
 * @author Luiz Carlos
 */
class Cliente {
    //Atributos
    public $nome;
    protected $idade;
    //Métodos
    
    public function __construct($n = "", $i = "")
    {
        $this->setNome($n);
        $this->setIdade($i);
    }

    public function __destruct() 
    {
        echo "O objeto " . $this->getNome() . " foi destruído.";
    }

    public function setNome($nome)
    {
        $this->nome = $nome;
    }
    
    public function setIdade($idade)
    {
        if($idade > 130)
        {
//            exit();
            throw new Exception("Idade inválida!");
        }
        else
        {
            $this->idade = $idade;
        }
    }

    public function getNome()
    {
        return $this->nome;
    }
    
    public function getIdade()
    {
        return $this->idade;
    }
}
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
        <title>Classe Cliente</title>
    </head>
    <body>
        <?php
            if(!empty($_GET))
            {
                $n = $_GET['nome'];
                $i = $_GET['idade'];
                try 
                {
                    $cliente = new Cliente($n, $i);
                    //$cliente->setNome($nome);
                    //$cliente->setIdade($idade);
                    echo $cliente->getNome() . ", salvo com sucesso.";
                    echo $cliente->getIdade() . " anos de idade.";
                }
                catch (Exception $e)
                {
                    echo $e->getMessage();
                }
            }
        ?>
        <form name="fcliente" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
            <label for="nome">Nome</label>
            <input name="nome" type="text" maxlength="30" size="30"/>
            <label for="idade">Idade</label>
            <input name="idade" type="text" maxlength="3" size="3" />
            <input value="Salvar" type="submit">
        </form>
    </body>        
</html>
Segue vídeo-aula...

Até a próxima!

quinta-feira, 7 de março de 2013

Introdução a Orientação a Objetos no PHP - parte 3

Ola! Nesta vídeo aula, vou explicar os motivos para não utilizar atributos públicos e mostrar a forma mais segura para trabalhar com objetos. Primeiro vamos alterar a visibilidade do atributo idade para protected.
class Cliente {
    //Atributos
    public $nome;
    protected $idade;
Agora vamos comentar os métodos e fazer a atribuição dos atributos de forma direta, o código deve ficar igual abaixo:
<?php
	if(!empty($_GET))
	{
		$nome = $_GET['nome'];
		$idade = $_GET['idade'];
        $cliente = new Cliente();
//                    $cliente->setNome($nome);
//                    $cliente->setIdade($idade);
//                    echo $cliente->getNome() . ", salvo com sucesso.<>";
//                    echo $cliente->getIdade() . " anos de idade.";
		$cliente->nome = $nome;
		$cliente->idade = $idade;
		echo $cliente->nome . ", salvo com sucesso<>";
		echo $cliente->idade . " anos é a idade do cliente!";
	}
?>
Salvando as alterações e acessando a página, nos é retornado um erro fatal como este:
Fatal error: Cannot access protected property Cliente::$idade in /opt/lampp/htdocs/php_oo/Cliente.php on line 58
Este erro diz que não podemos acessar a propriedade protegida do atributo idade do objeto Cliente, ou seja, não podemos acessar de forma direta o atributo, devemos utilizar os métodos para isso. Vamos realizar algumas alterações em nosso método setIdade, nosso método deve ficar como abaixo:
public function setIdade($idade)
{
	if($idade > 130)
	{
//            exit();
		throw new Exception("Idade inválida!");
	}
	else
	{
		$this->idade = $idade;
	}
}

Vamos alterar também o script PHP que trata o retorno do formulário, deve ficar assim:
<?php
	if(!empty($_GET))
	{
		$nome = $_GET['nome'];
		$idade = $_GET['idade'];
		$cliente = new Cliente();
		$cliente->setNome($nome);
		$cliente->setIdade($idade);
		echo $cliente->getNome() . ", salvo com sucesso.";
		echo $cliente->getIdade() . " anos de idade.";
	}
?>
Agora estamos utilizando um novo recurso em nosso código, o comando throw, ele dispara um erro fatal da classe Exception com a mensagem "Idade inválida!"
Fatal error: Uncaught exception 'Exception' with message 'Idade inválida!' in /opt/lampp/htdocs/php_oo/Cliente.php:22 Stack trace: #0 /opt/lampp/htdocs/php_oo/Cliente.php(54): Cliente->setIdade('132') #1 {main} thrown in /opt/lampp/htdocs/php_oo/Cliente.php on line 22
A mensagem acima informa que o erro foi pego (Uncaugth) e além da mensagem ele exibe qual o método ocasionou o erro Cliente->setIdade('132') e o número da linha que gerou o erro, no caso a linha 22. Para que o sistema não encerre com o erro fatal precisamos tratar esta exceção alterando o script que recebe o formulário. Ele ficará conforme abaixo:
<?php
	if(!empty($_GET))
	{
		$nome = $_GET['nome'];
		$idade = $_GET['idade'];
		try
		{
			$cliente = new Cliente();
			$cliente->setNome($nome);
			$cliente->setIdade($idade);
			echo $cliente->getNome() . ", salvo com sucesso. ";
			echo $cliente->getIdade() . " anos de idade.";
		}
		catch(Exception $e)
		{
			echo $e->getMessage();
		}
	}
?>
O comando try tentará executar o bloco, se um erro ocorrer o script passa para o segundo bloco catch (pegar). Lembre-se que a Exception é uma classe! Capturada a exceção pelo bloco catch, ele instancia um objeto da classe Exception chamado $e e executa seu método getMessage() que exibe a mensagem passada anteriormente pelo comando throw.
Segue o código completo do script utilizado no exemplo:
<?php
/**
 * Classe Cliente
 *
 * @author Luiz Carlos
 */
class Cliente {
    //Atributos
    public $nome;
    protected $idade;
    //Métodos
    public function setNome($nome)
    {
        $this->nome = $nome;
    }
    
    public function setIdade($idade)
    {
        if($idade > 130)
        {
            throw new Exception("Idade inválida!");
        }
        else
        {
            $this->idade = $idade;
        }
    }

    public function getNome()
    {
        return $this->nome;
    }
    
    public function getIdade()
    {
        return $this->idade;
    }
}
?>
<html>
    
        
        Classe Cliente
    
    <body>
<?php
	if(!empty($_GET))
	{
		$nome = $_GET['nome'];
		$idade = $_GET['idade'];
		try
		{
			$cliente = new Cliente();
			$cliente->setNome($nome);
			$cliente->setIdade($idade);
			echo $cliente->getNome() . ", salvo com sucesso.
";
			echo $cliente->getIdade() . " anos de idade.";
		}
		catch(Exception $e)
		{
			echo $e->getMessage();
		}
	}
?>
        
</body> </html>
Aproveito para convidar quem quiser se associar ao meu blog, será bem vindo!
Obrigado. Espero que esta aula ajude. Até a próxima!

segunda-feira, 4 de março de 2013

Introdução a Orientação a Objeto no PHP - parte 2

Nesta continuação da aula anterior exemplifico os motivos para não utilizar atributos públicos e atribuição de valores diretamente aos objetos.


Quando definimos um atributo público no caso de nossa classe Cliente, a qual possui um atributo nome com visibilidade public, devemos ficar atentos para que atribuição de valores indesejados não ocorra!
<?php
/**
 * Classe Cliente
 *
 * @author Luiz Carlos
 */
class Cliente {
    //Atributos
    public $nome;
}
?>
Vanmos comentar os métodos setNome e getNome da classe Cliente.
    //Métodos
//    public function setNome($nome)
//    {
//        $this->nome = $nome;
//    }
//   
//    public function getNome()
//    {
//        return $this->nome;
//    }
Podemos atribuir e recuperar valores acessando diretamente o objeto.
    if(!empty($_GET))
    {     
        $nome = $_GET['nome'];
        $cliente = new Cliente();
//        echo $cliente->nome . ", salvo com sucesso<>";
//        echo $cliente->idade . " anos é a idade do cliente!";
        $cliente->nome = $nome;
        echo $cliente->nome . ", salvo com sucesso!";
    }
Nosso script irá funcionar. Agora vamos adicionar um novo atributo idade.
class Cliente {
    //Atributos
    public $nome;
    public $idade;
}
No formulário adicione mais um label e um input para idade, o formulário deve ser igual a este:
<form name="fcliente" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
    <label for="nome">Nome</label>
    <input name="nome" type="text" maxlength="30" size="30"/>
    <label for="idade">Idade</label>
    <input name="idade" type="text" maxlength="3" size="3" />
    <input value="Salvar" type="submit">
</form>
Por último alteramos o nosso script responsável por tratar o formulário:
    if(!empty($_GET))
    {      
        $cliente = new Cliente();
        $nome = $_GET['nome'];
        $idade = $_GET['idade'];
//        echo $cliente->nome . ", salvo com sucesso<>";
//        echo $cliente->idade . " anos é a idade do cliente!";
        $cliente->nome = $nome;
        $cliente->idade = $idade;
        echo $cliente->nome . ", salvo com sucesso!<>";
        echo $cliente->idade . " é a idade no cliente!";
    }
Quando atribuímos valores diretamente ao atributo do objeto, qualquer valor pode ser aceito! Coisas estranhas e mensagens indesejadas como um cliente com 175 anos de idade, pode ocorrer! Para resolver esta anomalia, devemos usar métodos que tratam os dados antes de atribuir os valores aos objetos, como segue:
    public function setIdade($idade)
    {
        if($idade > 130)
        {
            exit();
        }
        else
        {
            $this->idade = $idade;
        }
    }
No método setIdade, testamos o parâmetro recebido executando a condicional if(se) for maior que 130, executa a função exit() do PHP, else (senão) grava o valor no atributo do objeto. Segue o código completo do exemplo...
<?php
/**
 * Classe Cliente
 *
 * @author Luiz Carlos
 */
class Cliente {
    //Atributos
    public $nome;
    protected $idade;
    //Métodos
    public function setNome($nome)
    {
        $this->nome = $nome;
    }
    
    public function setIdade($idade)
    {
        if($idade > 130)
        {
           exit();
        }
        else
        {
            $this->idade = $idade;
        }
    }

    public function getNome()
    {
        return $this->nome;
    }
    
    public function getIdade()
    {
        return $this->idade;
    }
}
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
        <title>Classe Cliente</title>
    </head>
    <body>
        <?php
            if(!empty($_GET))
            {
                $nome = $_GET['nome'];
                $idade = $_GET['idade'];
                $cliente = new Cliente();
                $cliente->setNome($nome);
                $cliente->setIdade($idade);
                echo $cliente->getNome() . ", salvo com sucesso.<>";
                echo $cliente->getIdade() . " anos de idade.";
            }
        ?>
        <form name="fcliente" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
            <label for="nome">Nome</label>
            <input name="nome" type="text" maxlength="30" size="30"/>
            <label for="idade">Idade</label>
            <input name="idade" type="text" maxlength="3" size="3" />
            <input value="Salvar" type="submit">
        </form>
    </body>        
</html>
Obrigado. Bom estudo!

quarta-feira, 27 de fevereiro de 2013

Introdução a Orientação a Objetos no PHP - parte 1

Esta a primeira parte da Introdução a Orientações a Objetos no PHP. Neste vídeo mostrarei como criar uma classe simples com apenas 1 atributo e 2 métodos, instanciar o objeto, definir e recuperar o valor do objeto.

A Orientação a Objetos (OO) é o desenvolvimento de uma estratégia em que os sistemas devem ser construídos baseados em uma coleção de componentes reusáveis conhecidos como objetos. Possuem basicamente duas características:

  • Objetos possuem dados (atributos);
  • Objetos manipulam dados e fazem coisas (métodos).

Classe
Uma classe é a abstração, um modelo a partir do qual os objetos podem ser criados, mostrando quais devem ser suas características (atributos) e quais devem ser suas funcionalidades (métodos)

Atributo
A coleção de atributos representa o que uma classe sabe (os dados que a classe possui). Na programação os atributos são as variáveis que definimos para a classe.

Método
Definem o que as classes sabem fazer, podem alterar os atributos e realizar funções inerentes a classe. Na programação podemos pensar em métodos como funções na classe.

Visibilidade de Atributos e Métodos
Os atributos e métodos de uma classe podem ser definidos como:

  • public (público), é acessível em qualquer lugar da classe, de suas subclasses, bem como em qualquer parte dos scripts que contém a classe;
  • protected (protegido), são visíveis pela classe que os criou e por suas subclasses (classes que herdam a classe principal), porém não são acessíveis fora deste contexto;
  • private (privado), são visíveis apenas na classe que os criou. Subclasses ou o script que contém a classe não podem acessar estes atributos e métodos de forma direta.


Objeto
É a entidade que desejamos generalizar (torná-la uma classe) e pode ser uma pessoa, um lugar, um evento, um conceito, um relatório, uma tela, enfim qualquer coisa do mundo real. Em relação a banco de dados, podemos enxergar um objeto como um dos registros de uma tabela.


Primeiramente criamos uma classe Cliente que terá uma atributo nome com a visibilidade public, como ilustra o trecho do código:
class Cliente {
    //Atributos
    public $nome;
}

Em seguida definimos dois métodos com visibilidade public. Um método chamado setNome, sua função é definir um valor para o atributo nome, e outro método chamado getNome, com a função de recuperar o valor de nome gravado no objeto.
//Métodos
public function setNome($nome)
{
    $this->nome = $nome;
}
    
public function getNome()
{
    return $this->nome;
}
Para simplificar colocamos nosso código html no mesmo arquivo Cliente.php, que consiste num formulário para salvar o nome do cliente, segue o código:

<html>
    <head>
        
        Classe Cliente
    </head>
    <body>
        
</body> </html>

E finalmente tratamos o retorno do formulário com o script PHP a seguir:
<?php
    if(!empty($_GET))
    {
        $nome = $_GET['nome'];
        $idade = $_GET['idade'];
        $cliente = new Cliente();
        $cliente->setNome($nome);
        echo $cliente->getNome() . ", salvo com sucesso.<>";
    }
?>
Segue o código completo do exemplo:
<?php
/**
 * Classe Cliente
 *
 * @author Luiz Carlos
 */
class Cliente {
    //Atributos
    public $nome;
    protected $idade;
    //Métodos
    public function setNome($nome)
    {
        $this->nome = $nome;
    }
    
    public function setIdade($idade)
    {
        if($idade > 130)
        {
            exit();
        }
        else
        {
            $this->idade = $idade;
        }
    }

    public function getNome()
    {
        return $this->nome;
    }
    
    public function getIdade()
    {
        return $this->idade;
    }
}
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
        <title>Classe Cliente</title>
    </head>
    <body>
        <?php
            if(!empty($_GET))
            {
                $nome = $_GET['nome'];
                $idade = $_GET['idade'];
    $cliente = new Cliente();
    $cliente->setNome($nome);
    $cliente->setIdade($idade);
    echo $cliente->getNome() . ", salvo com sucesso.<>";
    echo $cliente->getIdade() . " anos de idade.";
            }
        ?>
        <form name="fcliente" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
            <label for="nome">Nome</label>
            <input name="nome" type="text" maxlength="30" size="30"/>
            <label for="idade">Idade</label>
            <input name="idade" type="text" maxlength="3" size="3" />
            <input value="Salvar" type="submit">
        </form>
    </body>        
</html>
Até a próxima. Bom estudo!

Fonte:
Walaca Soares
PHP 5: Conceitos, Programação e Integração com Banco de Dados
6ª ed. revisada - São Paulo, Editora Érica, 2010

segunda-feira, 25 de fevereiro de 2013

Instalando no Netbeans no Linux Educacional 4.0

Boa dia!
Segue mais uma vídeo aula de série, para deixar nosso Linux Educacional 4.0 como um Ambiente de Desenvolvimento Web completo. Nesta vídeo aula demonstro como instalar o Netbeans 7.2.1, este será nosso IDE padrão para programar.


Obrigado.
Bom estudo!

sexta-feira, 22 de fevereiro de 2013

Instalando o Lampp no Linux Educacional 4.0

Nesta vídeo aula, auxilio na instalação do Lampp (conhecido como Xampp no S.O. Windows). Com isso avançamos mais um passo para deixar o S.O. Linux Educacional preparado para um ambiente de desenvolvimento web completo.


Bom estudo!

Instalando o JDK no Linux Educacional 4.0 parte 2

Pessoal, segue a segunda parte da vídeo aula. Nesta parte, concluído o processo de instalação, vamos criar o link simbólico para o novo JDK.


Bom estudo!

Instalando JDK 1.7.0_13 no Linux Educacional 4.0 parte 1

Olá a todos!

Fiquei um longo tempo afastado do Blog, mas como o curso Informatica para Internet da ETEC adotou o Linux Educacional 4.0 para ser o Sistema Operacional padrão, disponibilizo este primeiro vídeo de uma série de vídeos aula para criar um ambiente de desenvolvimento web completo.

 
Até o próximo!