PHP 5.3 parte VI: Outras melhorias

Posted on janeiro 10, 2010. Filed under: PHP | Tags:, |

Neste último artigo da série vamos abordar algumas melhorias pequenas incluídas na versão 5.3 do PHP. Nos artigos anteriores já abordamos os principais recursos incluídos, como, por exemplo, Namespaces, Static Late Binding, Lambda e Closures, Arquivos Phar e mysqlnd. Espero que tenham aproveitado e se diertido com os conhecimentos expressados nessa série. Implementem, testem, aprendam e boa sorte em seus projetos.

Linha de comando.

No php 5.3 a interface de linha de comando, conhecida como CLI (Command Line Interface), teve algumas melhorias. A principal melhoria foi a função getopt que se tornou independente de plataforma. Ou seja, agora funciona também no Windows.

Ainda na função getopt, agora é possível especificar parâmetros no script php, pela linha de comando, usando o caractere de atribuição “=”. Veja o exemplo abaixo:

Arquivo teste_opt.php:
<?php
$options = getopt("i:");
var_dump ($options);

# php teste_opt.php -i="valor teste123"

array(1) {
  ["i"]=>
  string(14) "valor teste123"
}

Veja que chamamos o script php passando o parâmetro -i com um determinado valor, usando o caractere de atribuição “=”.Poderiamos ter usado da seguinte forma também: -i “valor teste123”.

Também é possível que o valor de um parâmetro passado pela linha de comando seja opcional. Para isso devemos utilizar a sequência :: após o nome do parâmetro. Veja o exemplo abaixo:

Arquivo testes_opt.php:
<?php
$options = getopt("i::");
var_dump ($options);

Veja que passamos a sequencia :: após o nome do parâmetro i

# php teste_opt.php -i

array(1) {
  ["i"]=>
  bool(false)
}

# php teste_opt.php -i "valor teste123"

array(1) {
  ["i"]=>
  string(14) "valor teste123"
}

Criamos os dois exemplos acima demonstrando que o valor para o parâmetro i pode ser opcional.

Novos Error Levels

Na versão 5.3 do PHP finalmente E_STRICT faz parte de E_ALL. Agora E_ALL compõe todos errors levels. Nas versões anteriores E_STRICT era um error level separado de E_ALL.

Foram criados dois novos levels: E_DEPREACTED e E_USER_DEPRECATED. E_DEPRECATED alerta sobre funções e recursos que serão descontinuados em versões futuras do PHP, no caso a versão 6 do php. E_USER_DEPRECATED tem a intenção de indicar recursos que serão descontinuados relacionados ao código do usuário.

Algumas fuções que serão descontinuadas em versões futuras: ereg, ereg_replace, split, session_register, session_unregister, etc. Para uma lista completa acesse: http://www.php.net/manual/pt_BR/migration53.deprecated.php

O exemplo abaixo demonstra a utilzação de uma função que será descontinuada da versão 6 do php. Veja o retorno obtido após a execução do script.

c:\php5\error\teste.php:
<?php

echo ereg("[0-9]", "d0uglas");

Resultado:

Deprecated: Function ereg() is deprecated in C:\php5\error\teste.php on line 3
1

__callstatic

__callstatic é um método mágico incluso na versão 5.3. Sua função é tratar chamadas para métodos estáticos inexistentes na classe. Quando você fizer uma chamada para um método estático em uma classe onde o método não existe o php irá procurar pela existência de um método mágico chamado __callstatic, passando como parâmetro o nome do método e os argumentos passados caso haja algum. Esse método é semelhante a outros médotos mágicos como __call, __set, __get.

Veja o exemplo abaixo onde demonstramos a utilização do método estático. Estamos fazendo a chamada para dois métodos estáticos. O primeiro, printText(), existe na classe StaticClass e portanto é executado normalmente. Já a chamada para o segundo método, createUser(), não existe na classe StaticClass, portanto será chamado o método __callstatic passando os devidos parâmetros.

<?php

class StaticClass {
   public static function printText() {
     var_dump("PrintText static function called");
   }

   static function __callstatic($methodname, $args) {
     var_dump($methodname);
     var_dump($args);
   }
}

StaticClass::printText();
StaticClass::createUser("Elizandra");

Segue a saída do script anterior:

string(32) "PrintText static function called"
string(10) "createUser"
array(1) {
  [0]=>
  string(9) "Elizandra"
}

Chamadas variáveis estáticas

Agora é possível fazer chamadas estáticas onde o nome do método esta contido em uma variável. Já podiamos fazer isso com variável variáveis e chamada de método variável. Agora pode utilizar esse conceito em métodos estáticos.

Veja a utilização no exemplo abaixo: (Estamos aproveitando a classe utilizada como exemplo no tópico anterior).

<?php
$class_name = "StaticClass";
$static_method_name = "printText";
$class_name::$static_method_name();

Segue a saída do script anterior:

string(32) "PrintText static function called"

Veja como ficou a chamada para nosso método estático usando variável no nome: $class_name::$static_method_name();

Novas funções

Duas novas funções inclusas foram array_replace e array_replace_recursive.
A função array_replace irá atualizar os dados do primeiro array de acordo com os dados dos arrays seguintes. Se uma chave do primeiro array existe no segundo, o valor da chave no primeiro array será atualizado. Caso exista a chave somente no segundo array e não no primeiro, será criado um novo elemento no primeiro array.

A função array_replace_recursive atualiza os elementos da primeira array procurando nos arrays de forma recursiva.

Novos recursos SPL

SPL significa Standard PHP Library. É uma coleção de interfaces e classes com o objetivo de resolver problemas padrões e implementar de uma forma eficiente o acesso à dados de classes e intefaces.

Segue abaixo as classes SPL inclusas no php 5.3:

  • SplFixedArray
  • SplStack
  • SplQueue
  • SplHeap
  • SplMinHeap
  • SplMaxHeap
  • SplPriorityQueue

Segue abaixo links onde vocês poderão encontrar mais informações sobre as classes SPLs incluídas na versão 5.3 do php.

http://www.php.net/manual/en/class.splstack.php
http://www.slideshare.net/tobias382/new-spl-features-in-php-53

Make a Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Uma resposta to “PHP 5.3 parte VI: Outras melhorias”

RSS Feed for Pasqua Tecnologia Comments RSS Feed


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: