Gerador de classes PHP baseado em tabelas MySQL

Programação PHP: Este pacote pode ser usado para gerar classes PHP capazes de armazenar e recuperar registros da tabela do banco de dados MySQL.

Icon

classbuilder-20080826.zip
2.76 KB 4660 downloads

Autor: Andy Honeycutt
País: Estados Unidos
Site: PHP Classes

Sobre

O pacote ClassBuilder.php reune neste único arquivo, um conjunto de classes que irão extrair as tabelas do seu banco de dados MySQL e, a partir disto, criar correspondentes classes PHP. Pode ser de grande ajuda para quem gosta de trabalhar com este modelo de Orientação a Objetos.

Cada classe PHP gerada possui métodos/funções get() e set(), além dos metodos Save() e Create(), que permite manipular os atributos (variáveis) individualmente, além claro, de poder salvar, incluir ou consultar direto no banco de dados de forma transparente, sem criar qualquer SQL.

Como funciona?

Em resumo a ideia é pegar uma tabela MySQL e criar uma classe PHP. Mas pra que serve isto? Bem, isto torna possível manipular um objeto da classe afetando direto os registros do banco de dados.

Exemplo

1 – Criando o banco de dados para simulação

Por exemplo, suponha que você tenha uma base de dados chamada “empresa” e uma tabela “cliente”, conforme criado abaixo:

empresa.sql

CREATE DATABASE `empresa` ;
 
CREATE TABLE `cliente` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 100 ) NOT NULL ,
`rg` VARCHAR( 30 ) NOT NULL ,
`dn` DATE NOT NULL,
`sexo` CHAR( 1 ) NOT NULL
) ENGINE = innodb;
 
INSERT INTO `empresa`.`cliente` VALUES (NULL , 'MARIA DA SILVA', '5467107621', '1980-10-07', 'F');
INSERT INTO `empresa`.`cliente` VALUES (NULL , 'GERALDO ASSIS', '4419080253', '1974-02-21', 'M');
INSERT INTO `empresa`.`cliente` VALUES (NULL , 'JULIO CEZAR', '1021029983', '1965-09-27', 'M');
INSERT INTO `empresa`.`cliente` VALUES (NULL , 'ANA DE CASTRO', '9287100986', '1950-12-15', 'F');
INSERT INTO `empresa`.`cliente` VALUES (NULL , 'SIMONE ABREU', '7126020109', '1992-05-30', 'F');

Visualizando pelo gerenciador de banco de dados, a tabela “Cliente” ficou assim:

db1

2 – Gerando a classe “cliente”

Antes de gerar a classe, abra o arquivo ClassBuilder.php e configure os dados da sua conexão com o banco de dados, logo no início do arquivo:

ClassBuilder.php | Parcial

...
$database_connection_information = "
define(DB_HOST,'127.0.0.1');
define(DB_USER,'root');
define(DB_PASS,'');
define(DB_BASE,'empresa');
";
...

Feito isto, rode pelo navegador o script ClassBuilder.php e vai ser gerado na tela o código fonte para a classe “cliente”. Não se assuste se parecer embolado! Para melhorar a visualização, clique com o botão direito do mouse e escolha a opção “Exibir código fonte” ou “Código fonte”.

Selecione somente a parte do script que diz respeito a classe “cliente”. Você então deve criar um arquivo de mesmo nome, no caso “cliente.php”, e colocar esse código fonte dentro e salvar. Vai ficar algo como mostrado a seguir:

cliente.php | Esta classe é gerada automaticamente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?php
/******************************************************************************
* Class for empresa.cliente
*******************************************************************************/
 
class cliente
{
	/**
	* @var int
	* Class Unique ID
	*/
	private $id;
 
	/**
	* @var string
	*/
	private $nome;
 
	/**
	* @var string
	*/
	private $rg;
 
	/**
	* @var int
	*/
	private $dn;
 
	/**
	* @var 
	*/
	private $sexo;
 
	public function __construct($id='')
	{
		$this->setid($id);
		$this->Load();
	}
 
	private function Load()
	{
		$dblink = null;
 
		try
		{
			$dblink = mysql_connect(DB_HOST,DB_USER,DB_PASS);
			mysql_select_db(DB_BASE,$dblink);
		}
		catch(Exception $ex)
		{
			echo "Could not connect to " . DB_HOST . ":" . DB_BASE . "\n";
			echo "Error: " . $ex->message;
			exit;
		}
		$query = "SELECT * FROM cliente WHERE `id`='{$this->getid()}'";
 
		$result = mysql_query($query,$dblink);
 
		while($row = mysql_fetch_assoc($result) )
			foreach($row as $key => $value)
			{
				$column_name = str_replace('-','_',$key);
				$this->{"set$column_name"}($value);
 
			}
		if(is_resource($dblink)) mysql_close($dblink);
	}
 
	public function Save()
	{
		$dblink = null;
 
		try
		{
			$dblink = mysql_connect(DB_HOST,DB_USER,DB_PASS);
			mysql_select_db(DB_BASE,$dblink);
		}
		catch(Exception $ex)
		{
			echo "Could not connect to " . DB_HOST . ":" . DB_BASE . "\n";
			echo "Error: " . $ex->message;
			exit;
		}
		$query = "UPDATE cliente SET 
						`nome` = '" . mysql_real_escape_string($this->getnome(),$dblink) . "',
						`rg` = '" . mysql_real_escape_string($this->getrg(),$dblink) . "',
						`dn` = '" . mysql_real_escape_string($this->getdn(),$dblink) . "',
						`sexo` = '" . mysql_real_escape_string($this->getsexo(),$dblink) . "' 
						WHERE `id`='{$this->getid()}'";
 
		mysql_query($query,$dblink);
 
		if(is_resource($dblink)) mysql_close($dblink);
	}
 
	public function Create()
	{
		$dblink = null;
 
		try
		{
			$dblink = mysql_connect(DB_HOST,DB_USER,DB_PASS);
			mysql_select_db(DB_BASE,$dblink);
		}
		catch(Exception $ex)
		{
			echo "Could not connect to " . DB_HOST . ":" . DB_BASE . "\n";
			echo "Error: " . $ex->message;
			exit;
		}
		$query ="INSERT INTO cliente (`nome`,`rg`,`dn`,`sexo`) VALUES ('" . mysql_real_escape_string($this->getnome(),$dblink) . "','" . mysql_real_escape_string($this->getrg(),$dblink) . "','" . mysql_real_escape_string($this->getdn(),$dblink) . "','" . mysql_real_escape_string($this->getsexo(),$dblink) . "');";
		mysql_query($query,$dblink);
 
		if(is_resource($dblink)) mysql_close($dblink);
	}
 
	public function setid($id='')
	{
		$this->id = $id;
		return true;
	}
 
	public function getid()
	{
		return $this->id;
	}
 
	public function setnome($nome='')
	{
		$this->nome = $nome;
		return true;
	}
 
	public function getnome()
	{
		return $this->nome;
	}
 
	public function setrg($rg='')
	{
		$this->rg = $rg;
		return true;
	}
 
	public function getrg()
	{
		return $this->rg;
	}
 
	public function setdn($dn='')
	{
		$this->dn = $dn;
		return true;
	}
 
	public function getdn()
	{
		return $this->dn;
	}
 
	public function setsexo($sexo='')
	{
		$this->sexo = $sexo;
		return true;
	}
 
	public function getsexo()
	{
		return $this->sexo;
	}
 
} // END class cliente
?>

3 – Testando

Vamos criar o arquivo “teste.php” e ver algumas possibilidades de uso. Para isto, iremos instanciar a classe “cliente”, criar objetos e manipulá-los:

teste.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
// *** Define os informações da conexão com o banco de dados
define(DB_HOST,'127.0.0.1');
define(DB_USER,'root');
define(DB_PASS,'');
define(DB_BASE,'empresa');
 
// *** Importa a classe
include_once "cliente.php";
 
// *** ******************************************************************************
// *** I - CONSULTAR - Para recuperar uma ou mais informações
// *** ******************************************************************************
 
# Neste caso, estamos buscando e exibindo os dados do cliente de ID = 1
$cliente = new cliente(1);
echo $cliente->getnome()."<br />";
echo $cliente->getrg()."<br />";
echo $cliente->getdn()."<br />";
echo $cliente->getsexo()."<br />";
 
/*
@obs: A saída será:
MARIA DA SILVA
5467107621
1980-10-07
F
*/
 
// *** ******************************************************************************
// *** II - ALTERAR - Para alterar uma ou mais informações
// *** ******************************************************************************
 
# Neste caso, estamos alterando os dados do cliente de ID = 2
$cliente = new cliente(2);
$cliente->setnome("GERALDO RODRIGUES");
$cliente->setrg("1111122222");
$cliente->Save();
 
/*
@obs: Isto irá afetar direto no banco:
O nome e a identidade passarão a ser respectivamente GERALDO RODRIGUES e 1111122222
*/
 
// *** ******************************************************************************
// *** III - INCLUIR - Para incluir uma ou mais informações
// *** ******************************************************************************
 
# Neste caso, estamos incluindo um novo registro 
$cliente = new cliente();
$cliente->setnome("TAYLOR LOPES");
$cliente->setrg("1234567890");
$cliente->setdn("1974-02-25");
$cliente->setsexo("M");
$cliente->Create();
 
?>

Visualizando pelo gerenciador de banco de dados, veja como ficou a tabela após as modificações:

db2

Conclusão

Com uma classe PHP gerada automaticamente pelo ClassBuilder.php você pode manipular diretamente o banco de dados apenas utilizando os metodos get() e set(). Veja que você não cria nenhuma SQL, pois elas já estão contidas na classe.

Não encontrei implementação para excluir um registro, mas isto pode ser adaptado. Lembro que apenas estou demonstrando o uso desta classe e não defendo ou não a sua conveniência. Cada um avalie sua necessidade e utilização.

Total de acessos: 12290

4 comentários sobre “Gerador de classes PHP baseado em tabelas MySQL

  1. sape disse:

    Saludos muy buen aporte, amigo me da un error, talvez me puedas ayudar:

    0); } public function isbool($bool) { $b = 1 * $bool; return ($b == 1 || $b == 0); } } /****************************************************************************** * Class for pruebas.items

  2. Olá, gostaria de saber como faço para fazer upload de foto como a classe que vc postou no blog, consegui cadastrar, editar e selecionar usando a classe “ClassBuilder.php”, coloquei um campo tipo file no form, mas não cadastra. agradeço a atenção.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *