Pergunta

A partir php.net :

No PHP 5, isso não é mais necessário. Você pode definir uma função __autoload() que é chamado automaticamente no caso de você tentando usar uma classe / interface de que ainda não foi definido. Ao chamar esta função o mecanismo de script é dada uma última chance de carregar a classe antes de PHP falha com um erro.

Agora estou querendo saber, é má prática para usar apenas __autoload para carregar as classes apropriadas em um site dinâmico?

A forma como o meu site está configurado é incluir arquivos no arquivo index.php, por exemplo, http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

Então, se eu estou na seção de fóruns ou a seção de blogs do meu site, eu quero apenas as classes e funções necessárias para ser carregado, então eu uso autoload mas nunca incluir um arquivo manualmente, eu deveria estar usando __autoload como último resort ou é o que estou fazendo muito bem, mesmo em um sistema de tráfego alto?

Foi útil?

Solução

Bad? Não __autoload() é uma das minhas adições favoritas para PHP 5. Ele remove a responsabilidade (e irritação) de ter manualmente para incluir / exigem os arquivos de classe necessários para a sua aplicação. Dito isto, cabe a você como o desenvolvedor para garantir que apenas as 'classes apropriadas' são carregados. Isso é facilmente feito com um esquema de nomenclatura estruturada e estrutura de diretórios. Há muitos exemplos on-line de como usar corretamente __autoload (), que uma pesquisa no Google e você vai encontrar muita informação.

Outras dicas

Autoload é uma boa maneira de carregar apenas o que as classes é necessária.

Em PHP 5> = 5.1.2, a maioria dos problemas com o antigo __autoload () desapareceram, graças a spl_autoload_register () .

Agora estou querendo saber, é má prática para apenas __autoload uso para carregar as classes apropriadas em um site dinâmico?

Nem um pouco. Você pode contar com carregamento automático, tudo que você precisa fazer é elaborar uma convenção boa nomeação e implementar um carregador automático eficiente.

Há uma questão importante a considerar. Autoloading e Zend Guard não jogam bem juntos, porque Zend Guard tende a mudar o nome de coisas, o que significa que a convenção de nomenclatura que você decidiu usar muito provavelmente não será o mesmo. Se você estará usando Zend Guard (ou qualquer outro obfuscator para que o assunto), você provavelmente será forçado a incluir todos os arquivos manualmente.

Aqui está uma citação do guia do usuário Zend Guard:

aulas Autoloading não irá funcionar uma vez que o nome do arquivo no disco não faria coincidir com o nome da classe ofuscado.

O único perigo para __autoload () é se você definir uma função autoloading pobres. Geralmente, tudo o que você está indo para obter em termos de um acerto de desempenho é um pouco buscas em disco como PHP procura os arquivos corretos que contêm as classes. A vantagem é se livrar de todas essas chamadas include() irritantes.

Se você está preocupado com o desempenho a este nível, então você já deve estar usando um cache opcode tais como APC.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top