Mostrando postagens com marcador array. Mostrar todas as postagens
Mostrando postagens com marcador array. Mostrar todas as postagens
terça-feira, 30 de outubro de 2012
Arrays PHP a fundo
Artigo muito bom sobre como os arrays PHP funcionam por trás das cortinas: A Closer Look Into PHP Arrays: What You Don’t See.
terça-feira, 28 de fevereiro de 2012
Novas características PHP 5.4 - Nova sintaxe para arrays e algumas baixas
Para começar o PHP 5.4 introduz uma nova sintaxe mais simples para a declaração de arrays:
Exemplo:
$array = [1, 2, 3];
Outro exemplo:
$foo = ['val_1' => 4, 'a', 2, 'bar' => 'na esquina'];
Pessoalmente acho esta nova forma menos verbosa e é uma abordagem mais parecida com a vista em outras linguagens como javascript e ruby.
Agora um minuto de silêncio para os que se foram:
Exemplo:
$array = [1, 2, 3];
Outro exemplo:
$foo = ['val_1' => 4, 'a', 2, 'bar' => 'na esquina'];
Pessoalmente acho esta nova forma menos verbosa e é uma abordagem mais parecida com a vista em outras linguagens como javascript e ruby.
Agora um minuto de silêncio para os que se foram:
- break/continue $var syntax. Nunca usei este recurso para mais informações olhem aqui.
- register_globals, allow_call_time_pass_reference, and register_long_arrays ini options. Só conheço o register_globals e pelo que dizem ele já vai tarde!
- session_is_registered(), session_registered(), and session_unregister(). Estão aqui algumas funções que podem fazer falta para muitos desenvolvedores, principalmente em código mais antigo. Na versão 5.3 da linguagem PHP elas já disparam um warning do tipo E_DEPRECATED.
sexta-feira, 13 de janeiro de 2012
Novas características PHP 5.4 - Indireção de Arrays
Devo dizer que não me esforcei muito para me inteirar sobre as mudanças feitas na versão 5.3 da linguagem PHP. Não tive muitos problemas migrando código escrito para versões anteriores da linguagem. Os mais comuns foram warnings do tipo E_DEPRECATED causados por expressões deste tipo (dica para consertar o código: removam o "&"):
$obj =& new Class();
O uso de funções como eregi, split também passou a gerar warnings E_DEPRECATED.
Outra confissão é que eu nunca escrevi código que usa namespaces. E olha que a versão 5.3 foi lançada em junho de 2009!
Mas estou aqui para falar da vindoura versão 5.4 que possui algumas mudanças bem interessantes como a indireção de arrays. Mas o que é esta tal de indireção? Bom em inglês eles usam a palavra "dereference". Em computação é quando usamos uma referência ou endereço (pense nos ponteiros da linguagem C) para acessar e manipular um determinado valor. Em PHP quando usamos a referência $this para acessar algum membro da classe estamos fazendo uma indireção, ou seja, usando um endereço representado por $this para acessar o valor que realmente queremos seja uma varável escalar, uma instância de outra classe ou até mesmo um método.
Mas porque eu falei disso tudo? Até a versão 5.3 sempre que tínhamos uma função retornando um array nós só poderíamos acessar os valores do array usando uma varável para armazená-los, exemplo:
$meu_array = $objeto->retorna_array();
echo $meu_array[0];
Mas na versão 5.4 este código pode ficar menor:
echo $objeto->retorna_array()[0];
Agora nós podemos acessar o array diretamente na chamada do método que o criou. Acredito que o código ainda é fácil de ser entendido, pelo menos se o leitor já tiver um pouco de experiência.
Que venha o PHP 5.4!
$obj =& new Class();
O uso de funções como eregi, split também passou a gerar warnings E_DEPRECATED.
Outra confissão é que eu nunca escrevi código que usa namespaces. E olha que a versão 5.3 foi lançada em junho de 2009!
Mas estou aqui para falar da vindoura versão 5.4 que possui algumas mudanças bem interessantes como a indireção de arrays. Mas o que é esta tal de indireção? Bom em inglês eles usam a palavra "dereference". Em computação é quando usamos uma referência ou endereço (pense nos ponteiros da linguagem C) para acessar e manipular um determinado valor. Em PHP quando usamos a referência $this para acessar algum membro da classe estamos fazendo uma indireção, ou seja, usando um endereço representado por $this para acessar o valor que realmente queremos seja uma varável escalar, uma instância de outra classe ou até mesmo um método.
Mas porque eu falei disso tudo? Até a versão 5.3 sempre que tínhamos uma função retornando um array nós só poderíamos acessar os valores do array usando uma varável para armazená-los, exemplo:
$meu_array = $objeto->retorna_array();
echo $meu_array[0];
Mas na versão 5.4 este código pode ficar menor:
echo $objeto->retorna_array()[0];
Agora nós podemos acessar o array diretamente na chamada do método que o criou. Acredito que o código ainda é fácil de ser entendido, pelo menos se o leitor já tiver um pouco de experiência.
Que venha o PHP 5.4!
sábado, 23 de janeiro de 2010
O PHP e suas surpresas
Graças a um erro em uma função criada por mim, meu site estava com um bug constrangedor, pelo menos agora já está corrigido.
O problema da função que criei era que ela deveria retornar um array, mas, devido a um lapso momentâneo meu, ela estava retornando uma string. Acontece que o PHP considera uma string como um array de caracteres, mas até aí isso parece uma consideração bem lógica. Se você tem a varável $nome por exemplo, você pode acessar o primeiro caractere assim:
$nome = "Maria";
echo $nome[0]; // escreve M
Mas quando eu recebia o retorna da minha função eu não estava usando números inteiros como índice para acessar os valores do array (como usei o 0 no exemplo anterior). Eu usei strings como indices. Nestas horas que a tipagem fraca do PHP conjuntamente com uma inferência de tipos bem flexível mostra uma das desvantagens da plataforma (pelo menos para os mais desavisados como eu estava neste caso). O que você esperaria como saída no código abaixo:
$nome = "Maria";
echo $nome['valor']; //????
Bom, de acordo com a documentação do PHP, valores não inteiros usados como índice para strings são convertidos para inteiros. E o que o PHP faz quando tem que converter uma string como 'valor' (que não tem nada de número inteiro) para inteiro? Bem ele converte para 0 (zero). Silenciosamente ele converte um índice do tipo string para 0 do tipo inteiro. Assim o código assima exibe a mesma saída do código anterior a ele.
Isso não é um ataque ao PHP, o erro foi meu. Isso só serve para mostrar que você deve tomar bastante cuidado com estas conversões de tipo implícitas que o PHP faz.
O problema da função que criei era que ela deveria retornar um array, mas, devido a um lapso momentâneo meu, ela estava retornando uma string. Acontece que o PHP considera uma string como um array de caracteres, mas até aí isso parece uma consideração bem lógica. Se você tem a varável $nome por exemplo, você pode acessar o primeiro caractere assim:
$nome = "Maria";
echo $nome[0]; // escreve M
Mas quando eu recebia o retorna da minha função eu não estava usando números inteiros como índice para acessar os valores do array (como usei o 0 no exemplo anterior). Eu usei strings como indices. Nestas horas que a tipagem fraca do PHP conjuntamente com uma inferência de tipos bem flexível mostra uma das desvantagens da plataforma (pelo menos para os mais desavisados como eu estava neste caso). O que você esperaria como saída no código abaixo:
$nome = "Maria";
echo $nome['valor']; //????
Bom, de acordo com a documentação do PHP, valores não inteiros usados como índice para strings são convertidos para inteiros. E o que o PHP faz quando tem que converter uma string como 'valor' (que não tem nada de número inteiro) para inteiro? Bem ele converte para 0 (zero). Silenciosamente ele converte um índice do tipo string para 0 do tipo inteiro. Assim o código assima exibe a mesma saída do código anterior a ele.
Isso não é um ataque ao PHP, o erro foi meu. Isso só serve para mostrar que você deve tomar bastante cuidado com estas conversões de tipo implícitas que o PHP faz.
quarta-feira, 18 de fevereiro de 2009
Como limpar um array em Javascript?
Vocês sabiam que podem limpar os valores de um array em javascript usando "array.length = 0" ?
Assinar:
Postagens (Atom)