Em outras linguagens (AS3, por exemplo), observou-se que a inicialização de uma nova matriz é mais rápida se for feita dessa maneira var foo = []
do que var foo = new Array()
por motivos de criação e instanciação de objetos. Gostaria de saber se existem equivalências em PHP?
class Foo {
private $arr = array(); // is there another / better way?
}
php
arrays
initialization
Tom Auger
fonte
fonte
array_fill
? php.net/manual/en/function.array-fill.php$arr = array()
ou$arr = []
Respostas:
Nas implementações do ECMAScript (por exemplo, ActionScript ou JavaScript),
Array()
é uma função construtora e[]
faz parte da gramática literal da matriz. Ambos são otimizados e executados de maneiras completamente diferentes, com a gramática literal não sendo prejudicada pela sobrecarga de chamar uma função.O PHP, por outro lado, possui construções de linguagem que podem parecer funções, mas não são tratadas como tal. Mesmo no PHP 5.4, que suporta
[]
como alternativa, não há diferença na sobrecarga porque, no que diz respeito ao compilador / analisador, eles são completamente sinônimos.Se você precisar suportar versões mais antigas do PHP, use a sintaxe anterior. Há também um argumento para facilitar a leitura, mas, sendo um desenvolvedor de JS de longa data, este último me parece bastante natural. Na verdade, cometi o erro de tentar inicializar matrizes usando
[]
quando aprendi PHP.Essa alteração no idioma foi originalmente proposta e rejeitada devido a uma votação majoritária pelos principais desenvolvedores pelo seguinte motivo:
No entanto, parece que houve uma mudança no coração que levou à versão 5.4, talvez influenciada pelas implementações de suporte a bancos de dados populares como o MongoDB (que usa a sintaxe ECMAScript).
fonte
$array = [];
, pois facilita a alternância entre JS e PHP.$array = [];
melhor opção ??? ou devo tentar outro. qual é o melhor[]
é apenas um pouco mais fácil de digitar.Cria uma matriz vazia.
Você pode enviar valores para a matriz posteriormente, da seguinte maneira:
Nesse momento, $ myArray contém "árvore", "casa" e "cachorro". Cada um dos comandos acima se anexa à matriz, preservando os itens que já estavam lá.
Tendo vindo de outras línguas, essa maneira de acrescentar a uma matriz parecia estranha para mim. Eu esperava ter que fazer algo como $ myArray + = "dog" ou algo assim ... ou talvez um método "add ()" como as coleções do Visual Basic. Mas essa sintaxe de anexo direto certamente é curta e conveniente.
Você realmente precisa usar a função unset () para remover itens:
... removeria "casa" da matriz (matrizes são baseadas em zero).
... destruiria toda a matriz.
Para ser claro, a sintaxe entre colchetes vazios para anexar a uma matriz é simplesmente uma maneira de dizer ao PHP para atribuir os índices a cada valor automaticamente, em vez de você atribuir os índices. Nos bastidores, o PHP está realmente fazendo isso:
Você pode atribuir índices você mesmo, se quiser, e pode usar os números que desejar. Você também pode atribuir números de índice a alguns itens e não a outros. Se você fizer isso, o PHP preencherá os números de índice ausentes, incrementando a partir do maior número de índice atribuído conforme ele for.
Então, se você fizer isso:
... o item "dog" receberá um número de índice 21. O PHP não faz correspondência inteligente de padrões para atribuição incremental de índice, portanto, não saberá que você deseja que ele atribua um índice de 30 a "dog " Você pode usar outras funções para especificar o padrão de incremento para uma matriz. Não vou falar disso aqui, mas está tudo nos documentos do PHP.
Felicidades,
- = Cameron
fonte
$array[] = 'foo'
funciona bem em versões mais antigas do PHP. É apenas$array = [];
para inicializar uma matriz que é nova na 5.4.Antes do PHP 5.4:
PHP 5.4 e superior
fonte
No PHP, uma matriz é uma matriz; não há consideração primitiva versus objeto; portanto, não há otimização comparável.
fonte
O que você está fazendo é 100% correto.
Em termos de boa nomeação, geralmente é feito que as propriedades privadas / protegidas sejam precedidas de um sublinhado para tornar óbvio que não são públicas. Por exemplo,
private $_arr = array()
oupublic $arr = array()
fonte
$this
para obter o valor e nunca deve usar propriedades públicas.$this->arr
e$this->_arr
. Por que você nunca deve usar propriedades públicas ?!Tente o seguinte:
fonte
Não há outra maneira , então este é o melhor.Editar: Esta resposta não é válida desde o PHP 5.4 e superior.
fonte
Inicializando uma matriz simples:
Inicializando matriz dentro da matriz:
Fonte: Sorce para o código
fonte