Arquivos da categoria: Notícias

Notícias gerais sobre PHP no DF.

NOVIDADES DO PHP 7

Olá pessoal, com a versão estável do PHP 7 lançada, muitas pessoas tem se perguntado se vale a pena mudar a versão ou se continuar na versão antiga ainda é a melhor opção. Com esse post irei mostrar algumas novidades que irão fazer você mudar imediatamente para a nova versão da linguagem!!! 😀

Performance

O principal ponto para você correr para a nova versão do PHP é pela sua performance. Quando você mudar a versão, sem alterar nenhuma linha de código, suas aplicações já vão ganhar um UP que vai de 25% à 70% apenas mudando a versão do PHP. Além disso a nova versão consegue responder aproximadamente o dobro de requisições por segundo em comparação à versão anterior.

Remoção de Itens Depreciados

Alguns itens que já estavão nessa condição por algum tempo foram removidos, dessa maneira algumas aplicações podem parar de funcionar corretamente caso ainda utilizem algum desses itens. Os itens removidos foram:

        As tags: <%, <%=, %>, < script language=”php”>;
        A extensão

ereg

        e com isso todas as funções da mesma (devendo utilizar a partir de agora a extensão

PCRE

        );
        A extensão

mysql

        e com isso todas as funções da mesma (devendo utilizar a partir de agora a extensão

mysqli

        ou

PDO

      );

Uniform Variable Syntax

Essa mudança veio para resolver diversas inconsistências ao resolver expressões “variáveis-variáveis”. Vamos entender melhor analisando o código abaixo:

<?php
  class Dog {
    public $name = 'Rex';
    public $age = 1;
  }
  
  $dog = new Dog();
  $property = [
    'first' => 'name',
    'second' => 'age'
  ];
  echo "My dog name is ". $dog->$property['first'];

No PHP 5 a expressão $dog->$property[‘first’] é interpretada de uma forma incoerente com a interpretação padrão (esquerda para direita), pois ela é interpretada da seguinte forma: $dog->{$property[‘first’]}.

No PHP 7 a mesma expressão é interpretada da forma padrão (esquerda para direita) e fica da seguinte maneira: {$dog->$property}[‘first’] fazendo com que essa expressão não funcione no PHP 7, pois $property é um array e não pode ser convertido em uma String.

Mas com essa mudança outras expressões que nas versões anteriores eram inválidas agora passam a ser válidas, vamos ver alguns exemplos:

<?php
  class Dog {
    public static $name = 'Rex';
    public function getRelatives() { 
      return [ 
        'father' => function() {
          return 'Responsible old dog';
        },
        'mother' => function() {
          return 'Kind little dog';
        }
      ];
    }

    public function getWho($relative) {
      return $this->getRelatives()[$relative];
    }

    public function getNewDog() {
      return new Dog();
    }
  }

Com o PHP 7 podemos criar diversas associações aninhadas que não funcionam em versões anteriores como por exemplo:

<?php
  $dog = new Dog();
  echo $dog->getRelatives()['father']();
  echo $dog->getWho('mother')();
  $dog::getNewDog()::$name;

Switch com apenas um default

Nas versões anteriores do PHP podíamos definir diversas cláusulas default em um switch. Lógico que isso não fazia sentido pois apenas a última declarada era utilizada, mas não gerava nenhum erro nem alertas então era um problema difícil de se encontrar, porém agora no PHP 7 quando utilizamos mais de uma cláusula default em um switch o PHP retorna um Fatal Error.

Engine Exceptions

As novas exceptions foram introduzidas para facilitar o tratamento de erros nas aplicações. As Engine Exceptions substituem os Fatal Errors e os Recoverable Fatal Errors, fazendo com que agora possamos capturar essas exceções e tratá-las. As novas exceptions foram introduzidas nessa versão de uma forma para manter a compatibilidade com versões anteriores. Para incorporar as novas exceptions com um impacto mínimo em códigos de versões anteriores, a Hierarquia das Exceptions teve de sofrer algumas mudanças. Veja abaixo:

      Throwable interface

          Exception implements Throwable

              ErrorException extends Exception
              RuntimeException extends Exception
          Error implements Throwable

              TypeError extends Error
              ParseError extends Error
              AssertionError extends Error

Operador de Comparação Combinada (Spacheship Operator)

O operador spacheship( <=> ) foi introduzido para nos ajudar a fazer comparações mais concisas. Veja a expressão abaixo:

<?php
  $a <=> $b

A expressão acima pode nos retornar três resultados diferentes, dependendo do valor das variáveis:

        Retorna

-1

        se

$a

        for menor que

$b

        ;
        Retorna

0

        se

$a

        e

$b

        forem iguais;
        Retorna

1

        se

$a

        for maior que

$b

      ;

Null Coalesce Operator (??)

Esse novo operador veio para diminuir o esforço que gastamos quando nos deparamos com a situação que temos que verificar se determinado valor existe antes de usá-lo. Nas versões anteriores do PHP utilizamos a seguinte maneira:

<?php
  $a = isset($b) ? $b : "default";

No PHP 7 utilizando o novo operador, podemos fazer apenas assim:

<?php
  $a = $b ?? "default";

Scalar Type Hints

Agora podemos finalmente utilizar strings, booleans, integers e floats como Type Hints para nossas funções e métodos. Por padrão os type hints não são restritivos, então se você passar uma string para um parâmetro integer ele vai apenas fazer a conversão sem gerar nenhum erro ou alerta. Porém é possível ativar um Modo Restrito que irá gerar erros quando um tipo diferente do declarado for passado como parâmetro. Vamos entender melhor verificando o código abaixo:

<?php
  function squareNumber(int $number) {
    return $number * $number;
  }

  $a = squareNumber("4");
  var_dump($a);

O código acima não irá gerar nenhum erro ou alerta, pois o Modo Restrito não está ativado, dessa forma quando passamos o valor “4” para nosso método, ele converte o valor para um integer. Caso você queira restringir para que apenas integers possam ser passados para a função squareNumber devemos colocar uma diretiva na primeira linha de nosso script como mostra o exemplo abaixo:

<?php
  declare(strict_types = 1);

  function squareNumber(int $number) {
    return $number * $number;
  }

  $a = squareNumber("4");
  var_dump($a);

Com o Modo Restrito ativado esse código iria gerar um Fatal Error com a seguinte mensagem: Fatal error: Uncaught TypeError: Argument 1 passed to squareNumber() must be of the type integer, string given..

Return Type Hints

Além de podermos declarar os tipos de nossos parâmetros, agora também podemos definir o tipo do retorno de nossos métodos e funções. Igual aos Scalar Type Hints, caso o Modo Restrito não esteja ativado, o valor será convertido automaticamente para o tipo definido no Return Type Hint. Vejamos o exemplo abaixo:

<?php
  function testReturn() : bool {
    return 1;
  }

  var_dump(testReturn());

No código acima o valor do retorno será convertido automaticamente para um boolean. Caso o Modo Restrito esteja ativado o código acima iria produzir um Fatal Error com a seguinte mensagem: Fatal error: Uncaught TypeError: Return value of testReturn() must be of the type boolean, integer returned..

Observações importantes

Lembre-se que os erros descritos em Scalar Type Hints e Return Type Hints podem ser tratados com blocos try/catch e também é muito importante lembrar que você pode utilizar outros tipos em seus métodos e funções, por exemplo objetos, etc.

Conclusão

Espero que esse artigo possa dar uma base nas novidades que o PHP 7 trouxe para nós desenvolvedores e que vocês continuem estudando e aprofundando mais nos estudos da linguagem.

Um grande abraço a todos!!! Espero que o artigo possa ajudar a melhorar seus conhecimentos!!! Até a próxima!!!

BRASíLIA TESTFEST 2010

Caro amigos,

É com muita satisfação que eu anuncio que este ano teremos o primeiro testfest da capital.

Aos que não conhecem, o testfest são eventos espalhados pelo mundo que visam aumentar a cobertura da suite de testes do PHP. E esse ano, sediaremos uma versão brasiliense do evento.

Será dia 28 de agosto de 2010, na Universidade Católica de Brasília, Taguatinga (pistão sul) – Bloco M.  A partir das 9hrs.

Gostaria de convidar todos os entusiastas para colaborar do desenvolvimento do PHP. Teremos uma palestra sobre o que são os testes, qual a importância e como escrever testes.

Também aproveitaremos o evento para arrecadar donativos para a comunidade menos favorecida. Por isso solicitamos que os participantes doem agasalhos ou cobertores.

No mais, estamos contando com a presença de todos.

Mais informações em : http://www.brasiliatestfest.com.br

ps.: É necessário saber programar (básico) em PHP. Não é necessário conhecimento avançado.

GRUPO DE ESTUDOS PARA CERTIFICAçãO ZEND FRAMEWORK PARTE II

Caros(as),
Na continuidade do grupo de estudos para certificação Zend Framework definimos algumas datas e cronograma para iniciar os estudos.

Entramos em contato com a ETTBrasil, representante oficial da Zend, e a X25 para viabilizar essa iniciativa de ampliar o número de profissionais certificados no Zend Framework no Brasil. E com eles conseguimos desconto na compra do vouche e laboratório para os encontros. Então agora é hora de colocar a mão na massa.

Os passos

  1. Definição de participantes – Buscar as pessoas interessadas na certificação do Zend Framework;
  2. Definição de conteúdos por participantes – Cada participante ficará responsável por um ou mais tópicos de estudo, e este deverá gerar material de apoio e apresentar o(s) componente(s) para o grupo no dia do encontro;
  3. Envio de material – Como descrito acima cada participante ficará responsável por tópico(s)  e este deverá enviar para o grupo o material do conteúdo definido para o próximo encontro, vide cronograma de estudos;
  4. Compra do vouche –  O vouche será o passaporte de entrada para o grupo de estudos;
  5. Estudar muito – Como falado no post anterior o(a) participante deverá estudar sozinho(a) e os encontros servirão para esclarecimento de dúvidas e troca de conhecimentos;
  6. Fazer a prova – A ideia é marcar a prova de todos(as) para o mesmo dia, no intuito de que todos(as) se ajudem e apoiem tanto o estudo quanto o fazer a prova.

Referências
ZF 1.5.3 -> http://framework.zend.com/releases/ZendFramework-1.5.3/ZendFramework-1.5.3.zip
Manual -> http://framework.zend.com/releases/ZendFramework-1.5.3/ZendFramework-1.5.3-manual-en.zip

Agenda
27/05/2010 – Definição de participantes
28/05/2010 – Definição de conteúdos por participantes
08/06/2010 – Envio de material do 1º encontro de estudo
08/06/2010 – Compra do vouche
12/06/2010 – 1º Encontro de estudo
19/06/2010 – 2º Encontro de estudo
26/06/2010 – 3º Encontro de estudo
03/07/2010 – 4º Encontro de estudo
10/07/2010 – 5º Encontro de estudo
17/07/2010 – 6º Encontro de estudo
24/07/2010 – 7º Encontro de estudo
31/07/2010 – 8º Encontro de estudo
04/08/2010 – Prova

Cronograma de estudos

1º Encontro
Authentication and Access

* Zend_Acl
* Zend_Auth
* Zend_Auth Adapters
Coding Standards
* Coding conventions
* Zend_Loader
Database
* Zend_Db
* Zend_Db_Statement
* Zend_Db_Table
* Zend_Db_Profiler
* Zend_Db_Select
* Table Data Gateway Pattern
* Row Data Gateway Pattern
2º Encontro
Diagnosis and Maintainability
* Zend_Debug
* Zend_Log
Filtering and Validation
* Filtering Chains
* Custom Filters
* Standard Validation Classes
* Validator Chains
* Custom Validators
Forms
* Zend_Form
* Validation/Filtering
* Decorators
* Elements
* Forms
* Display Groups & Sub Forms
* Configuration
* Internationalization
3° Encontro
Infrastructure
* Zend_Config
* Zend_Session
* Zend_Registry
* Zend_Loader
Internationalization
* Zend_Date
* Zend_Translate
* Zend_Locale
* Zend_Currency
* Zend_View_Helper_ Translate
* Internationalization Performance
4º Encontro
Mail
* Constructing
* Storage
* Message retrieval
* Storage providers
* Message sending
MVC
* Components
* Pattern Basics
* Bootstrap
* Zend_Controller
* Zend_Layout
5º Encontro
Performance
* Zend_Cache
* Script inclusion
* Optimization
* Zend_Memory
Security
* Cross Site Request Forgery
* Secure Authentication
* Escaping for output
* Cross Site Scripting
* Security Best Practices
6º Encontro
Web Services
* XML-RPC Client
* XML-RPC Server
* REST Client
* REST Server
* Zend_Service Web Services
search
* Zend_Search_Lucene
* Indexing
* Querying
* Performance