O documento descreve as principais novidades do PHP 5.3 em 3 frases ou menos:
PHP 5.3 introduz novos recursos como namespaces, closures, late static binding e o garbage collector para melhorar o manuseio de objetos, além de novas estruturas de dados SPL e o formato PHAR para empacotamento de aplicações. O documento também menciona melhorias de desempenho e correção de bugs.
O shell é o prompt da linha de comando do Unix e do Linux, que recebe e executa comandos digitados pelo usuário. Na linha de comando, podemos utilizar diversos comandos um após o outro. Se colocarmos diversas linhas de comandos em um arquivo texto, teremos um script em shell ou, um Shell Script. Além de comandos, um Shell Script pode conter todas as estruturas de uma linguagem de programação, como if, for, while, variáveis e funções.
Nesse minicurso veremos como automatizar tarefas usando Shell Script e conheceremos um pouco mais sobre alguns dos comandos mais úteis para serem utilizados tanto nos scripts quanto diretamente pela linha de comando. Além disso, veremos como customizar a inicialização do seu shell, como utilizar variáveis ambiente, criar seus próprios comandos e como criar um autocompletar para seus eles.
Se você não usa geradores, está deixando de aproveitar um recurso poderoso de Python. Partimos do pattern Iterator e mostramos seus usos práticos e suporte nativo na linguagem, incluindo funções e expressões geradoras, que permitem lidar com massas de dados muito grandes de modo eficiente e com baixo consumo de memória. Ao final, mostramos o uso prático de funções geradoras em uma ferramenta de conversão de bancos de dados.
Talk que aborda alguns pontos da programação como SOLID, STUPID, clean code, object calisthenics, composer e algumas dicas pessoais.
Feita para o flisol 2017.
Design de código: princípios e práticas para ter um código sustentávelAndrews Medina
Escrever código é algo fácil o difícil é manter seu código limpo, legível por muito tempo sem transformá-lo em um código legado. Irei abordar várias práticas, princípios e padrões que nos ajudam a escrever e manter o código limpo.
Ao infinito e além com PHP memcached e GearmanElton Minetto
São apresentados o Gearman e o Memcached. O Gearman é um framework genérico para gerenciar filas de tarefas de forma que possam ser executadas em paralelo, com balanceamento de carga e acessíveis a múltiplas linguagens de programação. O Memcached é um sistema distribuído e de alta performance para fazer cache de objetos em memória RAM. São de extrema utilidade em sites e aplicativos com grande carga de processamento e necessidades de escalabilidade.
O shell é o prompt da linha de comando do Unix e do Linux, que recebe e executa comandos digitados pelo usuário. Na linha de comando, podemos utilizar diversos comandos um após o outro. Se colocarmos diversas linhas de comandos em um arquivo texto, teremos um script em shell ou, um Shell Script. Além de comandos, um Shell Script pode conter todas as estruturas de uma linguagem de programação, como if, for, while, variáveis e funções.
Nesse minicurso veremos como automatizar tarefas usando Shell Script e conheceremos um pouco mais sobre alguns dos comandos mais úteis para serem utilizados tanto nos scripts quanto diretamente pela linha de comando. Além disso, veremos como customizar a inicialização do seu shell, como utilizar variáveis ambiente, criar seus próprios comandos e como criar um autocompletar para seus eles.
Se você não usa geradores, está deixando de aproveitar um recurso poderoso de Python. Partimos do pattern Iterator e mostramos seus usos práticos e suporte nativo na linguagem, incluindo funções e expressões geradoras, que permitem lidar com massas de dados muito grandes de modo eficiente e com baixo consumo de memória. Ao final, mostramos o uso prático de funções geradoras em uma ferramenta de conversão de bancos de dados.
Talk que aborda alguns pontos da programação como SOLID, STUPID, clean code, object calisthenics, composer e algumas dicas pessoais.
Feita para o flisol 2017.
Design de código: princípios e práticas para ter um código sustentávelAndrews Medina
Escrever código é algo fácil o difícil é manter seu código limpo, legível por muito tempo sem transformá-lo em um código legado. Irei abordar várias práticas, princípios e padrões que nos ajudam a escrever e manter o código limpo.
Ao infinito e além com PHP memcached e GearmanElton Minetto
São apresentados o Gearman e o Memcached. O Gearman é um framework genérico para gerenciar filas de tarefas de forma que possam ser executadas em paralelo, com balanceamento de carga e acessíveis a múltiplas linguagens de programação. O Memcached é um sistema distribuído e de alta performance para fazer cache de objetos em memória RAM. São de extrema utilidade em sites e aplicativos com grande carga de processamento e necessidades de escalabilidade.
Além do suporte à orientação a objetos o PHP 5 conta com uma série de funcionalidades e bibliotecas nativas que facilitam e otimizam o desenvolvimento de aplicações de médio e grande porte. Porém, às vesperas do lançamento da versão 5.3 do PHP, muitos profissionais ainda desconhecem as grandes vantagens dos releases 5.x da linguagem e, muitas vezes, mantém seus códigos estruturados para a versão 4.x.
Lightning talk apresentada no MeetUp PHPRS subseção Canela/Gramado no dia 26/11/2016 - hotel Klein Ville de Canela (RS):
http://www.meetup.com/pt-BR/PHP-RS/events/234978772/
Link dos slides: https://viniciuscampitelli.com/slides/php-fora-da-web
O PHP foi inicialmente feito para a Web, mas também podemos utilizá-lo para criar CLI scripts e até mesmo daemons. É lógico que existem linguagens focadas para isso, mas em alguns cenários podemos aproveitar os códigos PHP já existentes no backend e também a experiência dos programadores da equipe. Iremos ver como lidar com argumentos para scripts e roteá-los para comandos, como criar mecanismos de controle e execução de processos externos e em background e ter códigos que sejam reaproveitáveis entre ambientes.
Guilherme Blanco, Lead Architect da Carmigo, fez a palestra "Keynote: PHP-7", no PHP Experience 2016.
O iMasters PHP Experience 2016 aconteceu nos dias 21 e 22 de Março de 2015, no Hotel Tivoli em São Paulo-SP
http://phpexperience2016.imasters.com.br/
Bash, o poder da linha de comando! - Tchelinux.org 2017Sandro Custodio
Palestra sobre Bash no Tchelinux.org, evento de Bagé em 26/08/2017. Com conhecimento de SysyAdmin o palestrante introduziu a platéia no na primeira hora. Depois deste slides houve demostração prática de 1h, dando tempo apenas para o mínimo até chegar na cron (agendamento/automação) de um script).
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
Sabe aquele arquivo com 5000000 linhas e que você tem que acender umas velas pra abrir ele? Então, aqui te daremos as armas corretas para exterminá-lo e para NUNCA MAIS criar monstros como ele!
Introdução a Linguagem de Programação RubyDiego Rubin
Apresentação utilizada em palestra na ETEC Prof. Armando Bayeux da Silva em 2008 e na Semana de Estudos do curso de Sistemas de Informação na faculdade Asser de Rio Claro em 2009.
Palestra apresentada por mim, Felipe Ribeiro, na PHP Conference Brasil 2009 mostrando os novos recursos do PHP 5.3 no que diz respeito a estruturas de dados
Software livre e padrões abertos no desenvolvimento WebFelipe Ribeiro
Palestra apresentada no Software Freedom Day 2009 em Campina Grande - PB sobre a importância do uso de padrões abertos e o PHP como uma solução de software livre para desenvolvimento Web
Palestra dada por mim (Felipe Ribeiro) no CONAPHP 2008 - Congresso Nacional de PHP que ocorreu em São Paulo nos dias 18 e 19 de Outubro dentro do CONISLI 2008
4. 1993
<HTML>
<HEAD>
<TITLE>My Personal Home Page</TITLE>
</HEAD>
<BODY>
This is my cool page<P>
And look at my counter<P>
<IMG SRC="/cgi-bin/counter.pl">
</BODY>
</HTML>
Saturday, October 31, 2009
5. PHP/FI
<!--getenv HTTP_USER_AGENT-->
<!--ifsubstr $exec_result Mozilla-->
Hey, you are using Netscape!<p>
<!--endif-->
<!--sql database select * from table where
user='$username'-->
<!--ifless $numentries 1-->
Sorry, that record does not exist<p>
<!--endif exit-->
Welcome <!--$user-->!<p>
You have <!--$index:0--> credits left in your
account.<p>
<!--include /text/footer.html-->
Saturday, October 31, 2009
6. PHP/FI
• PHP/FI = Personal Home Page/Forms Interpreter
• Um conjunto de bibliotecas C/Perl e uma
linguagem de template que interagia com elas
• GPL
• Estimava-se que estava presente em 1% dos
domínios existentes em 1997
Saturday, October 31, 2009
8. PHP 3
• PHP = PHP Hypertext Preprocessor
• Rasmus Lerdorf, Andi Gutmans e Zeev Suraski
• Extensível, suporte a vários SGBDs, servidores
Web e protocolos.
• Sintaxe mais poderosa
• Estima-se que estava presente em 10% dos
domínios em 1998
Saturday, October 31, 2009
9. PHP 4
• Core completamente reescrito por Andi Gutmans
e Zeev Suraski (Zend Engine) visando:
• Melhor performance
• Melhor modularização
• Suporte a sessões, “superglobais” $_GET,
$_POST, $_SESSION e etc...
• Estima-se que em 2004 estava presente em mais
de 20% dos domínios existentes
Saturday, October 31, 2009
10. PHP 5
<?php
class SimpleClass {
private $attribute;
public function foo($bar) {
echo $this->attribute * $bar;
}
}
class ExtendedClass extends SimpleClass {
public function foo($bar) {
try {
do_something();
} catch(FooBarException $e) {
die($e->getMessage());
}
parent::foo($bar);
}
}
$o = new ExtendedClass;
$o->foo();
?>
Saturday, October 31, 2009
11. PHP 5
• Zend Engine II com novo modelo de objetos
• Interfaces
• Exceções
• Níveis de visibilidade (public, private, protected)
• SPL
• Tratamento de XML
• 5.1 - Melhorias de performance
• 5.2 - Extensão “filter” habilitada por padrão
Saturday, October 31, 2009
18. Lambdas e Closures
function getSomador($x) {
return function ($y) use ($x) {
return $x + $y;
};
}
$somador = getSomador(10);
echo $somador(5); //15
echo $somador(32); //42
Saturday, October 31, 2009
19. Lambdas e Closures
• Permitem a criação de funções mais flexíveis
• Closure é uma lambda que tem variáveis obtidas
do escopo em que foi declarada.
• Não é novidade do PHP.
• Ruby, Python, Javascript, entre outras
linguagens, já têm esse recurso.
• http://php.net/closures
Saturday, October 31, 2009
21. Namespaces
Como declarar?
<?php
namespace YahooNews;
class Dir {
...
}
?>
Saturday, October 31, 2009
22. Namespaces
Como usar?
<?php
// usando diretamente
$foo = new YahooNewsDir();
// importando o namespace
use YahooNews;
$foo = new NewsDir();
// renomeando a classe
use YahooNewsDir as YND;
$foo = new YND();
?>
Saturday, October 31, 2009
23. Namespaces
<?php
// FooBar.php
namespace FooBar;
class Baz {
function __construct() {
echo get_called_class();
}
}
?>
Saturday, October 31, 2009
24. Namespaces
<?php
require './FooBar.php';
use FooBar as FB;
$a = new FBBaz(); // FooBarBaz
?>
Saturday, October 31, 2009
25. Namespaces
• O (polêmico) separador (backslash)
• A primeira escolha foi o ::, mas geraria confusão
com o atual uso para chamadas estáticas...
• A escolha:
• Critérios
• type-ability
• typo-vulnerability
• parse-ability
• IDE compatibility
• number of chars
Saturday, October 31, 2009
26. Namespaces
http://php.net/namespaces
Saturday, October 31, 2009
27. Late static
binding
Saturday, October 31, 2009
28. Late static binding
<?php
abstract class ActiveRecord {
public function save() {
$sql = "INSERT INTO ". self::TABLE. "...";
}
...
}
class Post extends ActiveRecord {
const TABLE = 'posts';
...
}
$p = new Post();
...
$p->save();
Saturday, October 31, 2009
29. Late static binding
<?php
abstract class ActiveRecord {
public function save() {
$sql = "INSERT INTO ". self::TABLE. "...";
}
...
}
class Post extends ActiveRecord {
A !
const TABLE = 'posts';
IO N
...
N C
FU
}
O
NÃ
$p = new Post();
...
$p->save();
Saturday, October 31, 2009
30. Late static binding
<?php
abstract class ActiveRecord {
public function save() {
$sql = "INSERT INTO ". static::TABLE. "...";
}
...
}
class Post extends ActiveRecord {
const TABLE = 'posts';
...
}
$p = new Post();
...
$p->save(); // FUNCIONA
Saturday, October 31, 2009
31. Late static binding
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
self::who(); // PHP < 5.3 - Output: A
static::who(); // LSB - Output: The class that
extends and is called
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // AB
?>
Saturday, October 31, 2009
32. Late static binding
• Late Static Binding permite referenciar a classe
chamada, no contexto de herança estática.
• http://php.net/lsb
Saturday, October 31, 2009
34. Garbage Collector
• O garbage collector do PHP funciona por
contagem de referências
• Quando o número de referências para um objeto
é zero, ele é removido da memória.
• Isso era um problema para casos de referências
circulares
• O Garbage Collector do PHP 5.3 trata esses
casos
Saturday, October 31, 2009
35. Garbage Collector
class Parent
{
public function __construct()
{
$this->child = new Child($this);
}
}
class Child
{
public function __construct( Parent $parent )
{
$this->parent = $parent;
}
}
Saturday, October 31, 2009
36. MINISTÉRIO DA SAÚDE
ADVERTE
Os próximos slides são contra-
indicados para gestantes,
pessoas com mais de 65 anos
ou com problemas de coração.
Saturday, October 31, 2009
43. SPL Datastructures
• Nas versões anteriores, toda coleção era tratada
como um Array.
• O Array do PHP funciona como uma tabela
hash, que associa chaves e valores, onde as
chaves podem ser nºs inteiros (sequenciais ou
não) ou strings.
• O Array tem tamanho dinâmico e é ajustado de
acordo com a demanda
• Algumas funções permitiam simular pilhas
(array_push e array_pop) e filas (array_shift e
array_unshift) com Arrays
Saturday, October 31, 2009
44. SPL Datastructures
• SPLDoublyLinkedList
• Adição, remoção, acesso à cabeça e à cauda
em O(1)
• Usado na implementação de:
• SPLStack
• LIFO
• SPLQueue
• FIFO
Saturday, October 31, 2009
46. SPL Datastructures
• SPLFixedArray
• Diferenças do array convencional:
• Os índices precisam ser inteiros e
sequenciais
• O tamanho é estático
• Isso traz ganhos de performance, pois facilita a
alocação de memória, iteração e o “seek”.
• SPLObjectStorage
• Mapa (key-value)
• Pode servir também como um Set de objetos
(chaves sem valor)
Saturday, October 31, 2009
48. PHAR
• PHAR é para o PHP o que JAR é para o Java
• PHAR pode transformar vários arquivos em um só
• Facilita a distribuição e execução de aplicações
como um único arquivo
• PHAR “entende” os formatos ZIP, TAR e PHAR
• Pode ser manipulado através do Stream Wrapper
phar://
• Você pode manipular os arquivos da mesma
maneira que faz diretamente no sistema de
arquivos de maneira transparente
Saturday, October 31, 2009
49. PHAR
Existem várias maneiras de se usar um PHAR
Executando em php-cli
$ php aplicacao.phar
<?php
include 'biblioteca.phar';
include 'phar://biblioteca2.phar/
arquivo.php';
?>
Saturday, October 31, 2009
50. PHAR
<?php
//Criando um PHAR
$phar = new Phar('pacote.phar');
//Cria um arquivo hello.txt dentro do PHAR com o
conteúdo atribuído
$phar['hello.txt'] = "Hello World";
//Lendo um PHAR
echo file_get_contents('phar://pacote.phar/
hello.txt');
?>
Saturday, October 31, 2009
51. PHAR
• Todo PHAR deve conter três (ou quatro) seções
1. Um stub
2. Um manifest descrevendo o conteúdo
3. Os arquivos propriamente ditos
4. [opcional] uma assinatura de verificação de
integridade do PHAR
Saturday, October 31, 2009
53. Outras coisinhas
• Suporte em Windows foi melhorado
• Adicionado o nível de erro E_DEPRECATED
• SPL não pode mais ser desabilitado
• Pyrus, o novo instalador do PEAR
• NOWDOC
• Operador ?:
• __callStatic()
• Constante __DIR__
• Bugfixes, bugfixes e bugfixes
Saturday, October 31, 2009
54. NOWDOC
<?php
$nome = "Felipe";
$heredoc = <<<TEXTO
Meu nome é $nome
TEXTO;
echo $heredoc; // Meu nome é Felipe
$nowdoc = <<<'TEXTO'
Meu nome é $nome
TEXTO;
echo $nowdoc; // Meu nome é $nome
Saturday, October 31, 2009
55. NOWDOC
• NOWDOC está para HEREDOC assim como aspa
simples está para aspas duplas
• Variáveis não são avaliadas dentro da expressão
Saturday, October 31, 2009
57. __callStatic()
• __call() trata chamadas de métodos de instância
que não foram explicitamente declarados
• __callStatic() é o equivalente para chamadas
estáticas
Saturday, October 31, 2009
58. __DIR__
• includes dentro de includes podem ser um
problema se você usa path relativo
• para se saber o path absoluto do arquivo atual, de
maneira dinâmica, usava-se dirname(__FILE__)
• para evitar essa chamada de função, PHP5.3 já
traz essa informação na constante __DIR__
Saturday, October 31, 2009
62. Conclusões
• A “concorrência” fez muito bem ao PHP, pois
deixou a sua comunidade mais exigente
• As mudanças do PHP 5.3 continuam fazendo jus
ao “PHP way”: nem sempre bonito, mas sempre
prático e eficiente.
• PHP ainda paga caro pelas más escolhas do
passado
Saturday, October 31, 2009
63. Conclusões
• PHP 5.3 provocará, logo logo, uma nova leva de
versões de frameworks (incompatíveis com as
anteriores)
• Zend Framework 2.0 usará namespaces ao
invés da convenção atual
• Symfony 2.0, Cake 2.0,...
Saturday, October 31, 2009