19 de maio

19 05 2008

Hoje é um dia muito importante, pelomenos para hindus, budistas, devótos das região da Índia e outros espalhados pelo mundo.
Neste dia nascia Krishana a mais de 5000 anos atraz, nascia também Buda a pouco mais de 2500 anos atraz e mais recentemente () Babá. Ambos nasceram no mesmo dia, hora, segundo e local.





Filmes do Fim de Semana

19 05 2008

Esse fds além do lost, assisti dois outros filmes, nenhuma bomba, filmes bons que recomendo =)

Onde os fracos não tem vez (No Country for Old Men )

Vencedor de 4 oscar, filme muito loco. Conta de inicio histórias diferentes que chegam a se cruzar na medida que o filme avaça, e avança mesmo, quaze duas horas de filme, chega uma parte que eu estava meio perdido ja :P. Mas o filme é bom, muito louco, estilo diferente, doidera mesmo, então la vai minha sinópsi =)

De inicio ja conhecemos o pscicopata psicótico :),  Anton Chigurh (Javier Bardem), camarada cabuloso mesmo hehehe. Ai tem o cherife que não gosta muito de usar armas, Ed Tom Bell (Tommy Lee Jones), que vai investigar uma chacina de traficantes mexicanos e corre atraz de Anton para prende-lo antes que ele mate Llewelyn Moss ( Josh Brolin ), esse ultimo encontra uma boa grana que estava com os mexicanos.. Filme muito loco, vale a pena :P

Elenco: 9
Música: 9
Estilo do filme: 10
Diversão: 5

NOTA 8,25

Os infiltrados (The Departed)

Filme ja não tao novo assim, mas muito bom. Excelente elenco, a idéia ja é meio manjada e faz vc imaginar como será o final, eu não acertei foi diferente que pensei ehehhe, la vai a “sinópiçi”

Ja começa com o chefão Frank Costello (Jack Nicholson ), ajudando um mulequinho que cresce e vira seu braço direito no crime, Colin Sullivan (Matt Damon ), o mulequinho, entra para a academia de policia e vira inspetor e informante de Frank. O mesmo acontece com Billy Costigan (Leonardo DiCaprio ), mas em outra ordem, ele um policial que se infiltra na gangue de Frank. Tiro e cabeças estouradas para todos os lados.. Jack Nicholson muito bom, garantia de filme bom =)..





Frase do dia..

12 05 2008

“Só quem teve um cão sabe o que é ser amado.”
Friedrich Nietzsche

Concordo em partes com Nietzsche, o amor de um cãozinho é o mais puro e verdadeiro possivel. Mesmo se um dia vc de mau humor brigue ou até bata em seu cão, depois ele vem te lambendo como se nada tivesse acontecido. Acredito que isso sirva para qualquer animal de estimação. Infelizmente por enquanto só tenho contanto com cachorros, mas um dia se Deus quiser vou ter uma fazendinha cheio de vaca, boi, cavalo, porco tudo de estimação ehehheheeh. Porque somos todos iguais :P





Frase do dia

28 04 2008

“Nada beneficiará tanto a saúde humana e aumentará as chances de sobrevivência da vida na terra quanto a evolução para uma dieta vegetariana. A ordem de vida vegetariana, por seus efeitos físicos, influenciará o temperamento dos homens de uma tal maneira que melhorará em muito o destino da humanidade.”
(Albert Einstein)

SAÚDE + INTELIGÊNCIA = VEGETARIANISMO





Filmes do fim de semana

28 04 2008

Vou aproveitar esse blog para escrever sobre uns filmes que assisti. Esse fim de semana assisti três filmes.

O Orfanato

Filme Espanhol de suspense, assistivel até, digamos que valeu os R$24,00 pago no cinema (12×2, não sei o custo deles mas é muito R$12, estudando é R$6,00). Filme de +-1:40hr, no meio do filme fica meio monótono da vontade de ir embora. Mas o final compença, muito bem bolado o final do filme.

É a história de um orfanato onde tinha 7 crianças, uma delas, Laura foi adotada e anos depois veio morar com seu marido e um filho (adotado) no lugar onde era o orfanato. Seu filho com 6 amigos imaginários, some durante sua festa de aniversário, dai começa a paranóia de Laura ir atraz do filho, fantasmas, barulhos, etc.. e vai descobrindo oque aconteceu com as crianças amiguinhas dela na infância.

Nota do filme (0 a 10): 3 + 5 (do final) = 8

O Quarto

Bom, não sei nem por onde começar. Tem a capa meio assustadora, fundo escuro, com uma janela cabulosa e uma mão ensaguentada. O filme tem uns flahsback rapidos em preto e branco soh mostrando os tons vermelhos, umas tiradas de camera muito locas e o melhor (tenque ter algo bom) o som bem cabuloso. Tanto que em uma parte a mulherzinha subindo a escada e aquele som sinistro de piano ao fundo, quando ela chega ao quarto, o pai dela tocando a musica no piano, isso foi muito divertido. Se você tem problemas na familia assista esse filme, “de duas uma”, ou você ve que tem familias piores que a sua, ou a sua pode piorar. Esse é um dos filmes se vc quer sacanear um amigo seu, manda ele ir locar esse filme, ele vai fica puto com você. “Ei mano, quer curtir um fim de semana com filme de suspense do lado da sua gatinha, pega O quarto na locadora”. Na minha “sinopse” eu vou contar tudo, pois nem achei o site oficial do filme pra postar aqui.

A história é de uma familia, Pai, Mãe, Filha mais velha, filho mais novo, amiguinho do filho, e filho mais velho com sindrome de down. Resumidão… Tudo mundo chinga um ao outro, dai a filha fica gravida e ninguem sabe quem é o pai, e só ela cuida do filho com a sindrome que esta de cadeira de rodas pq caiu da escada, dai uma hora num almoço. O pai com toda “delicadesa” dele “elogiando” a familia daquele geito, ai o amigo do filho sobe la pros quarto e acha uma porta cabulosa e entra nela e some, dai vai o filho e tambem some, dai fica todos na paranoia, dai a mae dexa uma carta dizendo q o pai nao é o pai de verdade e tambem some na porta, dai o pai fica doidao e tanta mata o cara, dai a filha nao dexa e entra na porta tbm e descobre qm faz tudo eh seu irmao mais velho deficiente. Dai e um flashback vimos que ela da pra ele e o filho é dele. Dai vira uma paranoia total, e no fim volta tdo mundo na mesa jantando, e era tdo imaginação do cara (deficiente). Nossa cansei soh de lembra do filme, orçamento de U$100.000 no máximo soh foi filmado dentro da casa.

Nota do filme (0 a 10): 1 (som do piano) + 1 (das cameras locas) +1 (da capa) = 3

A volta do todo poderoso

Não é tão divertido quanto o primeiro, mas é legalzinho, assitivél totalmente. Morgan Freeman é um excelente ator, todos filmes dele são recomendados.

Evan Baxter, um ancôra (hummm) que virou depudato e foi morar com a familia num bairro, vila, seila, de ricão.. Dai Deus aparece para ele e pede para construir uma arca por que vai haver um diluviu, dai os animais vao atraz dele, algumas cenas engraçadas, mostra as falcatruas la com os fpds politicos dos EUA, e umonte de outras coisas que não vou falar, é melhor assistir =).

Nota do filme (0 a 10): 7





“Uma palavra, que te alimenta mais que uma refeição diária”

25 04 2008

Ontem a noite aconteceu uma coisa interessante. Mês passado terminei de ler o livro O Monge e o Executivo (James C. Hunter), em uma parte do livro, não lembro se foi a enfermeia ou a treinadora, citou um trecho de um livro sobre uma tal de Conta Bancária Pessoal, ela dizia que nossa auto estima era como uma conta bancária, sempre que recebemos elogios nosso saldo aumenta, quando recebemos críticas (ou pior) ele abaixa e se ficarmos no vermelho, ai o bixo pega (ehehehe). Ontem comecei a ler um livro, que tinha ganho da minha mãe em 2004 (sim, eu não tinha o hábito da leitura, é a segunda coisa das duas que me arrempendo nessa vida, de não ter esse hábito), e no capítulo 2, dizia algo sobre Conta Bancária, comecei a ler e lembrei do Monge e o Executivo. Era o livro que a moça la tinha descrito, Você Pode (Paul Hanna). Quando vi isso, parei com a leitura e pensei: “Porra, preciso elogiar mais as pessoas, sorrir mais para elas. Se eu fizer isso será beneficio para quem estou elogiando e para mim também”.
Veio na lembrança também um trecho de uma letra de rap (SNJ - Se tu lutas tu conquistas) que diz o seguinte: “Uma palavra, que te alimenta mais que uma refeição diária”.

Então para finalizar este post vai uma dica:
De mais importância as atitudes positivas das pessoas ao seu redor, e sempre que possível elogie elas, nem que seje um simples e seco “é ficou melhor” (como diz o anselmo), muitas vezes para um serviço bem feito é muito mais valioso um elogio do que o valor monetário do mesmo.

Leitura para motivação:
James C. Hunter - O Monge e o Executivo
Paul Hanna - Você Pode!: Descubra o Caminho para Mudar e Vencer

Música para motivação:
SNJ - Se Tu Lutas Tu Conquistas





Persitência em PHP - I

18 04 2008

Persistência - s.f. Ato de persistir. / Qualidade do que dura.

Bom hoje vou falar de um assunto que particularmente entendo bem, pois fiz para meu trabalho de conclusão de curso, um framework de persistência web para PHP ( mais pra frente posso disponibilza-lo aqui). Vou escrever 3 artigos sobre esse assunto, que juntos nos trará um mini-framework para persistência de dados em PHP.

Introdução

Bom todo o sistema ou até mesmo web sites, necessitam armazer as informações inseridas neles, ou seja as informações deverão ser persistentes. Para isso sempre é utilizado um mecanismo de persistencia, que pode ser, um arquivo xml, texto, banco de dados orientado a objetos, banco de dados relacional, entre outros tipos possiveis de armazenar uma informação. O mais utilizado é o banco de dados relacional, que são bancos com varios padrões estabelecidos e anos de experiencia armazenando informações relacionalmente, além de terem sistemas que fazem a gerência das informações relacionais (SGBD - Sistema Gerenciador de Banco de Dados) de fabricantes, preços e objetivos diferentes. Um banco de dados relacional, como o nome já diz, armazena as informações relacionalmente dentro de tabelas. No caso um conjunto de registros ou informações de uma tabela podem estar relacionados com outros registros de outra tabela e assim por diante. Mas temos um problema ai, pois o banco de dados é relacional e a aplicação é orientada a objetos. Dois paradigmas diferentes, como tratar as informações entre esses dois caras? Ai que entra o framework de persistência.

Modelo Relacional x Modelo Orientado a Objetos

Se existe esse problema, então porque não utilizar um banco de dados orientado a objetos? Bom primeiro que o custo seria aumentado, pois eu nunca vi um desses ao vivo, mas sei que existe, então provavelmente arranjar pessoal para mexer com esse treco não deve ser tão facil. Segundo os bancos relacionais estão mais maduros que os OO. A orientação a objetos trabalha as informações como classes, atributos, métodos, etc… Enquanto os bancos de dados relacionais tratam as informações com tabelas, registros, indices, relacionamentos, etc… Então para que o programador trabalhe somente Orientado a objetos e o DBA (Administrador do banco de dados) cuide do banco relacional, é proposto um framework que ficará “no meio” desses dois cara (aplicação e banco), ele irá traduzir as informações OO para Relacional e Relacional para OO.

Classe de Conexão

Bom vamos para o que interessa, primeiramente vamo criar uma classe de conexão com o banco.
Descrição:
Como de praxe, vou utilizar o pattern Singleton para fazer a classe de conexão, onde somente existirá uma única instância da classe. Essa classe terá conexão com o banco MySQL (prometo postar uma classe com o PDO para vários bancos), e terá métodos para facilitar a manipulação das informações no banco (insert, delete, update).

conecta.php

class Conecta {

// atributo static para o singletom
static private
$_instancia = null;

// variavel de conexão
private $_conexao = null;

// Construtor só é chamado quando não existir a instância
private function __construct(){

$_host = “localhost”;
$_database = “base”;
$_user = “usuario”;
$_password = “senha”;

$this->_conexao = mysql_connect($_host, $_user, $_password) or die(‘Não foi possível abrir uma conexão’ );
mysql_select_db($_database, $this->_conexao) or die(‘Base de dados nao encontrada.’);

}

// Método chamado para instânciar a classe
public static function getConexao() {

if (!self::$_instancia instanceof self) {
self::$_instancia = new self();
}
$con = self::$_instancia;
return $con;
}

// Fecha a conexão
public function close(){
if($this->_conexao)
mysql_close($this->_conexao);
}

/* Executa uma select
public function select($sql){

$resultado = mysql_query($sql,$this->_conexao);
// Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql ) no banco de dados: “ . mysql_error());
}
// Não existe erros
else{
// Recebe os resultados da consulta
while($row=mysql_fetch_assoc($resultado)) {
$retorno->result[] = $row;
}
// Recebe a quantidade de registros encontrados
$retorno->count= mysql_num_rows($resultado);
}
return $retorno;
}

// Executa a inserção no banco
public function
insert($sql){

$resultado = mysql_query($sql,$this->_conexao);
//Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql) no banco de dados: ” . mysql_error());
}else{
// Retorna o id cadastrado se foi executado com sucesso
// Retorna false se não foi possivel fazer a execução

return (mysql_insert_id()) ? mysql_insert_id() : false;
}
}

// Executa a alteração no banco
public function update($sql,$unicos=null){

$resultado = mysql_query($sql,$this->_conexao);
//Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql) no banco de dados: ” . mysql_error());
}
//Retorna 1 (true) se foi executado com sucesso
return $resultado;
}
}

// Executa a exclusão no banco
public function delete($sql,$unicos=null){
$resultado = mysql_query($sql,$this->_conexao);
//Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql) no banco de dados: ” . mysql_error());
}
//Retorna 1 (true) se foi executado com sucesso
return $resultado;
}

}

Para fazer executar esse camarada ai.

$conn = Conecta::getConexao();
$rs = $conn->select(“SELECT nome,telefone FROM dados WHERE cidade=’cascavel’”);
if($rs->count > 0){
foreach($rs->result as $v){
echo $v['nome'] . “-”. $v['telefone']. “<br>”;
}
}else{
echo “Não foi encontrado nenhum registro”;
}

A primeira parte é isso ai, próximo passo vou mostrar como criar as classes que serão manipuladas pela persistência. Qualquer coisa só entrar em contato =).

PS: SE ALGUEM TIVER UM TEMPLATE QUE FORMATE CÓDIGOS FONTES, POR FAVOR ME AVISEEEE.





Hash para validação de arquivos

11 04 2008

Saudações, hoje vou falar sobre uma questão muito importante sobre segurança e confiabilidade de informações, principalmente para arquivos que são gerenciados por um sistema web. Para intender melhor vamos imaginar a seguinte situação.

Seu sistema gerencia laudos de exames de sangue em pdf para pacientes de uma clinica. E um desses pacientes ta precisando de grana e inventa de burlar o laudo botando um positivo no seu exame de HIV para ver se consegue uma indenização milionária.

Bom é possivel colocar senha para a edição e visualização de um arquivo em PDF, mas todo nós sabemos que mesmo assim tem como burlar isso. Então para a clinica escapar dessa indenização e consecutivamente seu sistema continuar no mercado, o paciente terá que apresentar o PDF com o resultado falso positivo HIV, e tera que ser comparado o arquivo gerado pelo sistema com o do safado paciente. Para fazer isso, acredito eu que a melhor forma é comparar o Hash dos arquivos. Existem vários algoritmos de hash, o que vou utilizar aqui será o MD5. Para isso o PHP tem uma função pronta md5_file, neste exemplo vou fazer genérico para qualquer tipo de arquivo.

O que irá fazer

Vamos fazer um script para um gerenciador de arquivos, ou seja, será enviado varios tipos de arquivos, o sistema ira gerar um hash do mesmo e ira salvar em uma base para futuras comparações. Não vou entrar em detalhes como validar o arquivo enviado, restringir um tipo de dado, tamanho, etc. e nem sobre banco de dados, como armazenar as informações, existem varios tutoriais bons sobre isso, minha idéia é mostrar sobre hash.

Primeiro vamos receber o dowload, copia-lo e ver o hash.

$uploaddir = ‘local/’;
$uploadfile = $uploaddir . $_FILES['arquivo']['tmp_name'];
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile)) {
$hash = md5_file($uploadfile);
$sql = sprintf(”INSERT INTO arquivos ( arq_file, arq_hash) VALUES (’%s’,'%s’)”,$uploadfile,$hash);
} else {
echo “Arquivo não foi enviado”;
}

É muito interessante que tenha algum código unico para identificar o arquivo no sistema, pois irá facilitar uma busca para comparações.

Agora o trecho de código para comparar os arquivos. A idéia e ter duas entradas. Uma para identificar ou escolher o arquivo que esta no sistema e outra para enviar o arquivo que será comparado. Nesse exemplo vou usar o nome do arquivo para achar ele no sistema. O código a baixo está recebendo essas informações.
* A instancia $conexao é ficticia, utilize o seu método favorito para retornar uma SQL.

$hashSis = $conexao->select(”SELECT arq_hahs FROM arquivos WHERE arq_file=’”.$_POST['nome'].”‘”);
$hashArq =md5_file($_FILES['arquivo']['tmp_name']);
if($hashSis == $hashArq){
echo “Arquivos iguais”;
}else{
echo “Arquivos diferente”;
}

Esse tipo de válidação é, na minha opnião obrigatória para garantir a segurança das informações em sistemas que gerenciam documentos. Bom a principio é isso ai, qualquer dúvida só entrar em contato.





DomPDF

9 04 2008

Bom hoje vou falar do DomPDF, classe para gerar PDF com PHP5 a partir de um HTML. O problema que sua ultima atualização foi em 2006. Ela utiliza a biblioteca CPDF, que foi depreciada, talvez esse o motivo de não ter mais atualizações. Mas tirando isso é uma excelente classe, tem alguns errinhos com table e css. Muitos deles consegui contornar outros estou tentando corrigir ainda. Então vou dar umas dicas sobre essa classe e como trabalha com ela.

Como funciona

É passado um nome para o arquivo .pdf e um nome do arquivo .html, tambem pode ser passado o tipo do papel que por padrao ja é A4. Pode ser executado pela URL ou Terminal Linux.

URL
www.site.com/dompdf/dompdf.php?output_file=file.pdf&input_file=pdftemp/file.html&paper=a4
output_file = nome do arquivo .pdf
input_file = nome do arquivo .html
paper = tipo do papel

Terminal

$ php dompdf.php -f nomePDF dftemp/file.htmlp

dompdf.php [opções] arquivo.html

Opções:
-h Mostra a mensagem
-l Lista os tipos de papel
-p size Mostra os tipos de papeis ‘letter’, ‘A4′, ‘legal’, etc.
-o orientation Orientação do texto ‘portrait’ or ‘landscape’.Por padrão ‘portrait’.
-b path Seta o local para o arquivo .html.
-f file Nome do arquivo pdf [arquivoHTML].pdf.
-v verbose: mostra os erros caso ocorra.
-d very verbose: mostra os erros mais detalhadamente.

Dicas

Algumas dicas sobre essa classe. A primeira e mais importante, seu HTML tenque estar bem identado e sem nenhum erro, senão a classe não irá funcionar. Se esquecer de fechar uma tag que seje ja era, não vai funcionar.

Texto dentro de uma celula da tabela, não obedece seu limite e atravessa outra coluna.

Fiquei um bom tempo tentado resolver e consegui incluindo um width com uma div dentro da celula.

<table>
<tr>
<td>
<div style=’width:95%’> texto </div>
</td>
</tr>
</table>

Incluir contorno nas tabelas e celulas

Para que uma tabela possa ter um contorno é preciso atribuir o atributo CSS border-collapse:collapse;
Pode inserir como stilo na propria tabela, ou melhor ainda, uma classe ou atribuir direto na página HTML.


<style type=”text/css”>
table.collapse {
border-collapse: collapse;
border-spacing: 3px;
}
</script>

Inserir textos estáticos no PDF

É possivel inserir textos estáticos para os arquivos PDF, isso é muito util se vc quer colocar um cabecalho ou um rodapé em todos os PDFs gerados, ou até mesmo um texto indicando a páginação.
Então dentro do arquivo HTML coloque.


<script type=”text/php”>
if ( isset($pdf) ) {
// Configurações para ajustar o tamanho do texto, cores, e dimensões da area do arquivo
$font = Font_Metrics::get_font(”Helvetica”);
$size = 9;
$color = array(0,0,0);
$text_height = Font_Metrics::get_font_height($font,$size);
$foot = $pdf->open_object();
$w = $pdf->get_width();
$h = $pdf->get_height();
$pdf->close_object();
$pdf->add_object($font, “all”);
// Cria uma linha no rodapé
$y = $h - $text_height - 45;
$pdf->line(12, $y, $w - 16, $y, $color, 0.5);
// Insere um texto um pouco acima da linha do rodapé
$_texto = utf8_encode(”Texto Texto);
$w1 = Font_Metrics::get_text_width($_texto , $font, 7);
$y = $h - $text_height - 23;
$pdf->page_text($w / 2 - $w1 / 2, $y, $_texto , $font, 7, $color);
// Numero da pagina
$text = utf8_encode(”Página {PAGE_NUM} de {PAGE_COUNT} “) ;
$width = Font_Metrics::get_text_width(”Pagina 1 de 2″, $font, 6);
$y = $h - $text_height - 2;
$w = $w - 14;
$pdf->page_text($w - $width, $y, $text, $font, 6, $color);
}
</script>
<body> conteudo </body>

Incluindo uma nova fonte

Por padrão esta classe trabalha com a fonte Helvetica, no formato .afm. Mas para incluir uma nova fonte, só baixar o arquivo que tem nesse tutorial, e segui-lo não tem erro (Windows).
Depois de criar a fonte, tenque habilitar ela. Va no diretório dompdf/libs/fonts. Abra o arquivo dompdf_font_family_cache.dist. Este arquivo contem um vetor com as fontes que poderão ser trabalhadas ( a fonte que você criou terá que estar neste diretório ), veja se ja existe um idince referente a sua fonte, se estiver comentado descomente, senão crie um la.
* Um problema que tive foi com o itálico para a fonte Helvetica, estava parecendo negrito e italico, neste arquivo estava ‘italic’ => DOMPDF_FONT_DIR . ‘Helvetica-BoldOblique’, ou seja estava pegando a fonte errada. Foi só alterar para italic’ => DOMPDF_FONT_DIR . ‘Helvetica-Oblique’, e vualá.

Bom tomara que tenha ajudado alguém ai. Esta classe é muito boa, infelizmente foi descontinuada. Estou pensando em mete as cara e tentar atualizar ela, se tiver alguem afim de me acompanhar só entrar e contato :). Até a próxima.





Viva os objetos

8 04 2008

Nos primeiros anos da minha faculdade e quando estudava processamento de dados no 2º grau (Cobol na veia). Eu nem imaginava o que era a tal de programação orientada a objetos. Quando me falaram que esse treco era uma tendencia, eu fiquei meio assustado porque antigamente sentia dificuldade em mudar e aprender coisas novas.

Mas virei “omi”, botei as “cara” e resolvi aprender esse tal de objetos. Comecei mexendo com Java para me obrigar a programar OO. Dai passei para o PHP, foi uma maravilha, varias classes, métodos, atributos, carro liga, carro desliga, carro é do tipo automóvel e a moto também é. Mas ainda assim eu fazia muitas coisas estruturadas. Então aprendi um pouco sobre UML, opa ai o negócio ficou mais bunitinho. ‘Deseinhos’ antes de escrever uma linha de código, coisa fina. Meus código estruturados foram desaparencendo.

E também surgiu na minha vida os Padrões de Projetos (Designers Patterns). Também de inicio foi meio complicado de enteder que diabos era isso, na verdade eu achava que era um treco muito foda por isso não entendia. Mas é algo teóricamente simples, não tem segredos. Assim meus códigos foram evoluindos e prova disso foi exatamente hoje.

Tive que incluir um campo em uma tabela de um sistema, só que esta tabela é básicamente a principal do sistema, entao fiquei algumas horas pensando a melhor maneira de inserir esse campo, e não foi tão dificil assim, além de incluir na tabela fiz o mesmo no mapeamento, mexi em 3 métodos de classes diferentes e vuala, funcionando perfeitamente. Viva a orientação a objetos :)

Por isso vou contribuir com links interessantes sobre Orientação a Objetos:
unicamp: Bom tutorial sobre OO.
PHP Programando com Orientação a Objetos : Esse eu tenho e recomendo.
MundoOO : Tudo sobre Orientação a Objetos.