Olá pessoal segue a palestra ministrada no TDC 2011 sobre Integração Contínua e PHP.
How to automated PHP 5.3 compatibility
These days I needed to test an application, this application worked in PHP 5.2 and now I need to work in PHP 5.3. So I was looking for how can I test it using PHP Code Sniffer and I found PHP53Compatibility and used it to test my application.
So how can I use it???
- It’s so easy first you’ll install PHP_CodeSniffer
pear install PHP_CodeSniffer
- Download the latest release at http://github.com/wimg/PHP53Compat_CodeSniffer/downloads
- Rename PHP53Compat_CodeSniffer directory to PHP53Compatibility and copy to PHP53Compatibility directory to {your pear path}/PHP/CodeSniffer/Standards
I wrote an script that runs on each phpcs directory script and it’ll save to build folder. This script should be the root directory of your Project.
#!/bin/bash
path=`pwd`;
mkdir build;
for file in $(find $1 -type f -iname '*.php'); do
dirname=`dirname $file`;
dir=`echo ${dirname#*/}`;
scriptname=`basename "$file"`;
mkdir -p $path/build/$dir;
phpcs --standard=PHP53Compatibility $file > $path/build/$dir$scriptname.txt;
echo $scriptname;
done;
It’ll help you, but you need to check your application manually too.
I hope you enjoy.
Reference
http://techblog.wimgodden.be/tag/codesniffer/
https://github.com/wimg/PHP53Compat_CodeSniffer
http://pear.php.net/package/PHP_CodeSniffer
Zend Framework and Oracle XMLType
So few days ago I needed to insert Oracle XMLtype with Zend Framework. I used oracle adapter to wrote it in Zend Framework. I was looking for and I found on Chris Jones Blog.
Database
-- Table definition is: create table xwarehouses (warehouse_id number, warehouse_spec xmltype);
Insert with Zend Framework
<?php
class App_Xml extends Zend_Db_Table_Abstract
{
public function insertXML()
{
// XML data to be inserted
$xml =<<<EOF
<?xml version="1.0"?>
<Warehouse>
<WarehouseId>1</WarehouseId>
<WarehouseName>Southlake, Texas</WarehouseName>
<Building>Owned</Building>
<Area>25000</Area>
<Docks>2</Docks>
<DockType>Rear load</DockType>
<WaterAccess>true</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Street</Parking>
<VClearance>10</VClearance>
</Warehouse>
EOF;
$id = 1;
$stmt = $this->_db->prepare("insert into xwarehouses (warehouse_id, warehouse_spec)
values ({$id}, XMLType(:clob))");
$lob = oci_new_descriptor($this->getAdapter()->getConnection(), OCI_D_LOB);
$stmt->bindParam(':clob', $lob, OCI_B_CLOB, -1);
$lob->writeTemporary($xml);
$stmt->execute();
$lob->close();
}
}
Reference
Updating your pear on Ubuntu
It’s so easy to update your pear on Ubuntu with php 5.3.
If you have pear installed, before you should remove php-pear:
alberto@zx350:~$ sudo apt-get remove php-pear
From now we will install a new version of pear:
alberto@zx350:~$ wget http://pear.php.net/go-pear.phar
alberto@zx350:~$ sudo php go-pear.phar
When this message to show press Enter:
Below is a suggested file layout for your new PEAR installation. To change individual locations, type the number in front of the directory. Type ‘all’ to change all of them or simply press Enter to accept these locations.
1. Installation base ($prefix) : /usr
2. Temporary directory for processing : /tmp/pear/install
3. Temporary directory for downloads : /tmp/pear/install
4. Binaries directory : /usr/bin
5. PHP code directory ($php_dir) : /usr/share/php
6. Documentation directory : /usr/docs
7. Data directory : /usr/data
8. User-modifiable configuration files directory : /usr/cfg
9. Public Web Files directory : /usr/www
10. Tests directory : /usr/tests
11. Name of configuration file : /etc/pear.conf
1-11, ‘all’ or Enter to continue:
After we need install xdebug:
alberto@zx350:~$ sudo apt-get install php5-xdebug
So install of pear is very easy, for more information look http://pear.php.net/manual/en/installation.getting.php
How to install Oracle Database XE on Ubuntu
Hi Everyone,
Today we’ll install Oracle Database XE on Ubuntu, it’s very easy, so lets go.
First we have to download of Oracle Database XE in http://download.oracle.com/otn/linux/oracle10g/xe/10201/oracle-xe_10.2.0.1-1.0_i386.deb
After we have to install some libraries on Ubuntu.
alberto@zx350:~$ sudo apt-get update
Then
alberto@zx350:~$ sudo apt-get install libc6 libaio1
From now we can to install Oracle Database XE on Ubuntu.
alberto@zx350:~$ sudo dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb
If your ubuntu is 64bits use this command
alberto@zx350:~$ sudo dpkg -i --force-architecture oracle-xe- universal_10.2.0.1-1.0_i386.deb
Finally, we setup Oracle Database XE:
alberto@zx350:~$ sudo /etc/init.d/oracle-xe configure
View this page on a web browser at localhost:8080/apex . In this page you can manage your Oracle Database XE.
I hope you enjoy.
How to install PHP on Ubuntu
Hi,
Today I’ll teach you how to install PHP on ubuntu.
“PHP, which stands for PHP: Hypertext Preprocessor is a widely-used Open Source general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. Its syntax draws upon C, Java, and Perl, and is easy to learn. The main goal of the language is to allow web developers to write dynamically generated web pages quickly, but you can do much more with PHP” (On PHP website).
Let’s go to install:
alberto@zx350:~$ sudo apt-get update
Installing some extensions that I think important
alberto@zx350:~$ sudo apt-get install apache2 libapache2-mod-php5 php5 php5-mysql php5-mcrypt php5-gd php5-curl
The setup is ready, from now we’ll test the PHP.
Finally, we restart Apache2:
alberto@zx350:~$ sudo /etc/init.d/apache2 restart
Write a script test
alberto@zx350:~$ cd /var/www alberto@zx350:/var/www$ vi test.php
and insert the following line
<?php phpinfo(); ?>
View this page on a web browser at localhost/test.php . In this page you can to see all the extensions that were installed
I hope you enjoy.
Design Pattern
Padrões de Projeto são estruturas propostas para soluções de arquitetura de determinados problemas, de tal forma que você possa utilizar essa solução em vários outros projetos sem ter que refazê-lo. A seguir veremos os principais padrões de projeto.
Padrões de Criação
Os Padrões de Criação têm a finalidade de abstrair o processo de instanciação de objetos, tornando possível assim que um sistema fique independente de como suas partes são criadas, compostas e representadas. Isso significa dizer que estes padrões contribuem para que o software seja mais dependente da composição de suas partes-objetos do que da herança entre os mesmos.
Fazem parte desse padrão:
| Padrão | Finalidade |
| Abstract Factory | Fornecer um interface para criar famílias de objetos que se relacionem ou que sejam dependentes sem especificar a classe concreta dos mesmos. |
| Builder | Facilitar a criação de um objeto complexo de modo que este processo possa criar diferentes representações do objeto. |
| Factory Method | Fornecer uma interface para criar um objeto, mas deixar que as subclasses decidam que classe instanciar |
| Prototype | Especificar os tipos de objetos a serem criados via uma instância protótipo para que depois novos objetos sejam copiados a partir dele. |
| Singleton | Garantir que um objeto tenha uma única instância fornecendo um acesso global a esta instância. |
Padrões Estruturais
Objetos são obtidos de classes, que podem ser numericamente significativas e apresentar considerável complexidade de relacionamento entre elas. Padrões Estruturais apresentam organizações elegantes onde classes são combinadas para formar estruturas maiores. A idéia é oferecer combinações gerenciáveis de classes.
Fazem parte desse padrão:
| Padrão | Finalidade |
| Adapter | Converte a interface de uma classe em outra interface, esperada pelos clientes. |
| Bridge | Separar uma abstração da sua implementação, de modo que as duas possam trabalhar independentes. |
| Composite | Compor objetos em estruturas de árvore para separar a hierarquias todo-parte. |
| Decorator | Fornecer de forma dinâmica responsabilidades adicionais a objetos. |
| Facade | Fornecer uma interface unificada para um conjunto de interfaces em um subsistema. |
| Flyweight | Usar compartilhamento para suportar eficientemente grandes quantidades de objetos de granularidade fina de maneira eficiente. |
| Proxy | Fornece um substituto ou marcador de localização de outro objeto para controlar o acesso ao mesmo. |
Padrões Comportamentais
Padrões que se encaixam nessa categoria se preocupam basicamente com algoritmos e a atribuição de responsabilidade entre objetos, esse padrão não especifica apenas padrões de objetos e classes, mas também padrões de comunicação entre estes.
Fazem parte desse padrão:
| Padrão | Finalidade |
| Chain Of Responsibility | Evita o acoplamento do remetente de uma solicitação ao seu destinatário, dando mais de um objeto a chance de tratar a situação. |
| Command | Encapsula uma solicitação como um objeto, de forma que permita a parametrização com os clientes com diferentes solicitações, enfileire ou registre (log) solicitações dando suporte assim a operações que podem ser desfeitas. |
| Interpreter | Dada uma linguagem, define uma representação para sua gramática juntamente com um interpretador que usa a representação para interpretar as sentenças nesta linguagem. |
| Iterator | Fornece uma maneira de acessar seqüencialmente os elementos de um objeto agregado sem expor sua representação subjacente. |
| Mediator | Define um projeto que encapsula como um conjunto de objetos interage. |
| Memento | Sem violar a encapsulação, captura a externaliza um estado interno de um objeto, de modo que ele possa posteriormente ser restaurado para este estado. |
| Observer | Define uma dependência um para muitos entre objetos, de modo que quando um objeto muda de estado, todos os seus dependentes são automaticamente notificados e atualizados. |
| State | Permite que um objeto altere seu comportamento quando seu estado interno muda. |
| Strategy | Define uma família de algoritmos, encapsulando cada um deles para torná-los intercambiáveis. |
| Template Method | Define o esqueleto de um algoritmo em uma operação postergando a definição de alguns passos para subclasses. |
| Visitor | Representa uma operação a ser executada sobre os elementos da estrutura de um objeto, permitindo que seja possível definir uma nova operação sem mudar as classes dos elementos sobre os quais opera. |
Conclusão
Padrões de Projeto para serem empregados é necessário a existência de um problema, o projetista deve ter a habilidade para, dado determinado contexto, identificar a viabilidade ou não do emprego de um padrão, sendo que padrão não é, portanto, um remédio para todos os males, mas apenas um em particular.
Referências
- PHP Profissional
Melo, Alexandre Altair de
Nascimento, Mauricio G. F.
Ed. Novatec
- Padrões de Projeto – Introdução aos Padrões da “Gangue dos Quatro”
Lucena, Fábio Nogueira de