terça-feira, dezembro 17, 2013

Restringindo a criação de atributo dinâmico em PHP

Muita gente não gosta de uma característica existente em PHP que permite a definição de atributos dinâmicos em objeto. Esta prática de fato frusta aos programadores menos experientes e aos veteranos causa, no mínimo, um pouco de trabalho para organizar a "casa".

Tal característica pode ser evitada se aplicado um pouco de organização. A organização referida trata-se na verdade em criar uma hierarquia de classes com uma super classe base e tomar o cuidado, por assim dizer, de todos os demais objetos descendam de uma classe filha da classe base.

Mas Augusto, você está propondo que seja criando uma super classe para todo um sistema? Exatamente!

Muitos programadores, principalmente PHPs, se assustam com esta idéia. Pior, por vezes não conseguem visualizar como fazer ou vislumbrar os benefícios desse tipo de abordagem. Mas isto ficará para um post futuro, por hora, vamos nos concentrarmos no assunto de hoje: Restringir a definição de atributos dinâmicos.

Restringir a criação de atributos dinâmicos pode ser feito com o uso do método __set (documentação). Este método recebe exatamente dois parâmetros e é executado sempre que uma tentativa de atribuir um valor qualquer a um atributo do objeto for realizada.

O fragmento de código abaixo demonstra a atribuição dinâmica.

# definição da classe Foo
class Foo {}

# instancia de Foo
$foo = new Foo;

# atributo dinâmico 
$foo->bar = 'value';

var_dump($foo);

// saída: object(Foo)#1 (1) { ["bar"]=> string(5) "value" } 

Agora apliquemos a restrição da definição dinâmica.

# definição da classe Foo
class Foo {
    public function __set ($name, $args)
    {
       return;
    }
}

# instancia de Foo
$foo = new Foo;

# atributo dinâmico 
$foo->bar = 'value';

var_dump($foo);

// saída: object(Foo)#1 (0) { }


Note que no segundo fragmento de código o atributo bar não foi criado, ao contrário do primeiro.

Como pode ser observado, definir o método __set para cada classe torna o trabalho inviável e é nesse ponto que entra o uso da hierarquia mencionada  acima.

abstract class Base
{
    public function __set ($name, $args)
    {
       return;
    }
}

# definição da classe Foo
class Foo extends Base
{
}

# instancia de Foo
$foo = new Foo;

# atributo dinâmico
$foo->attr = 'value';

var_dump($foo);

// Saída: object(Foo)#1 (0) { }

Com isso qualquer objeto oriundo de uma classe filha de Base não permitirá a definição de um atributo que não tenha sido explicitamente definido na classe referente ao objeto.

terça-feira, maio 11, 2010

Fotos Ensol

Conforme prometido, estou disponibilizando todas as [fotos] que tirei no Ensol.

quinta-feira, maio 06, 2010

1º dia Ensol 4ª edição


A primeira edição do PHP-NE verdadeiramente abriu a 4ª edição do ENSOL, realizado em Ponta do Seixas na Paraíba[1], falar que este lugar é bonito chega ser um pleonasmo, poís bem, chegamos ao evento as 9.45hs( Bruno “Porkaria”, Ricardo[2] e Eu ) e fomos em busca de informações sobre credenciamento, local de palestra, etc,. No ínicio foi um pouco truncado, mas logo tudo se resolveu e fomos para o local.
A palestra foi iniciada com certa de 20 ou 30 congrecistas, devido ao atraso no redenciamento ocasionado pelo sistema ou a falha do mesmo, o Ricardo fez a abertura do PHP-NE e em seguida o Porkaria falou um pouco e logo depois me passou a palavra.
Falei exatos 55mins sobre XDebug no eclipse(XDebug e Eclipse) para uma platéia[3] extremamente atenta ao que eu falava algumas interações no decorrer da palestra e ao final algumas dúvidas, normal.
Após o almoço veio abetura oficial do evento onde estavam presentes ninguém mais ningém menos do que Jon "maddog" Hall falando sobre o projeto “Cauã” e na platéia, ao meu lado Rasmus concentrado em seu notebook, acho que no twitter.
Após a abertura oficial do ENSOL fomos para 3ª palesra do PHP-NE que abordou noSQL e depois a 4ª e última palestra sobre Drupal, aos 45mins do Rasmus entra no auditório e senta ali no quanto tranquilamente e começa assistir a palestra sobre o Drupal. Finalizada a apresentação fizemos um breve encerramento e todos os presentes fomos tirar fotos ao lado do criado do PHP, bom demais!
E fomos para o PHPinga acompanhado de Rasmus Lerdorf[4].


Chegada ao Ensol
Ricardo, Bruno "Porkaria" e alguém tem de tirar a foto.
Palestra sobre XDebug no EclipsePDT

Augusto e Rasmus Lerdof.

PHPinga histórico.

Palestra ENSOL 2010 - Paraíba

A recepção dos Paraibanos ao 1º PHP-NE não poderia ser melhor, o auditório ficou completamente lotado para assitir minha palestra sobre XDebug e eclipsePDT.




Entrada da Estação Ciência no credenciamento



Palestra XDebug

quarta-feira, abril 14, 2010

Ensol - PHP e muito Sol

Salve galera,

Uma notícia para os amantes do PHP:

"De 6 a 9 de maio de 2010 na Estação Cabo Branco em João Pessoa, acontecerá o Ensol que conterá com a presença de ninguém mais ninguém menos que Rasmus Lerdorf".

continuando...

"O projeto Eclipse PDT é uma esforço da comunidade em manter uma verão gratuíta do eclipse capaz de desenvolver códigos PHP, porém, alguns dos recursos encontrado no Zend Studio, versão mantida pela Zend Tecnologia sob o eclipse, como um debugador interno não vem por padrão no PDT.


Visto a necessidade e utilidade de debugar o código ainda em seu ambiente de desenvolvimento, esta palestra tem por objetivo apresentar o Eclipse PDT e XDebug e integrá-los para que possam ser usados em conjuntos".

será com esta palestra que abrirei o ENSOL 2010.


até lá!

segunda-feira, novembro 09, 2009

Removendo .svn

De quando em vez tenho a necessidade de remover todos os diretórios de controle do svn, os famigerados ".svn", isso seria tarefa fácil se o projeto fosse pequeno, porém, alguns projetos chegam a gerar centenas desses.

Então a ideia é realiazar uma pesquisa num dados diretório em busca dos tais ".svn" e para cada ocorrência executar o "rm -rf" passando a ocorrência encontrada como argumento para xargs.

   $ find . -iname .svn | xargs rm -fr

 Note que foi usado '-iname' ao invés de '-name' para ignorar diferenciação entre maiscula e miniscula.

    find . -iname .svn: Encontra todos os diretórios ".svn"
    xargs rm -rf: O xargs é o programa que executa o que vier depois dele pra cada linha recebida como argumento.


Uma forma alternativa sem uso do xargs:

   $ find . -iname .svn -exec rm -rf {} \;


 Claro que você pode evitar a criação destes diretórios simplismente dando um:

    svn export DESTINO

Mas se eles já existirem fica a dica.
Outra coisa é que basta você trocar o nome do diretório que se deseja excluir e a dica é válida do mesmo jeito.

[]'

sábado, setembro 12, 2009

Mini-Curso PHP Pra Quem Sabe PHP, mas nem tanto.

salve a todos,
Sábado(12/09) foi realizado o primeiro(de uma sérias de cursos futuros) ministrado por mim, vimos nestes primeiro encontro a instalação no MS Windows do Apache2, PHP e a criação de um script básico para testar a instalação.

Com base no que foi visto, vamos dá continuidade nesta inciativa apoiada pela Faculdade Michelangelo de Brasília(local onde foi realizado o encontro) que prontamente cedeu seu laboratório para que o evento pudesse ser realizado.
Os kilos de alimentos arrecadados fora doados.

A todos os presentes, MEU MUITO OBRIGADO!!!