Quando uso spl_autoload_register no meu plug-in, recebo:
Fatal error: Uncaught exception 'LogicException' with message
'Class wp_atom_server could not be loaded'
wp-includes\pluggable-deprecated.php on line 182
Eu li e encontrei várias correções. Um dos SO disse que não deve usar spl_autoload_register com o WordPress.
Isso é preciso?
Tenho certeza de que posso encontrar uma "correção" para o erro, mas não tenho certeza se quero fazer isso em cada versão do WP.
Se eu não usar a função de carregamento automático, como devo carregar minhas aulas? Aqui está o que quebra agora:
spl_autoload_extensions(".php");
spl_autoload_register();
use MyPluginClasses\Student as MS;
$student = new MS\Student();
echo $student->sayHello();
No aluno:
<?PHP
namespace MyPluginClasses\Student
{
class Student{
public function __Construct(){
echo "Hello Johnny";
}
public function sayHello(){
echo "Hello Johnny's Method";
}
}
}
Esse design funciona bem fora do WordPress.
php
plugin-development
errors
johnny
fonte
fonte
spl_autoload_register()
sem efeitos colaterais negativos.glob()
o diretório uma vez e entregar as classes quando elas forem necessáriasspl_autoload_register()
.Respostas:
Eu realmente não tenho certeza se é uma boa ou má prática carregar automaticamente classes no plug-in WP. Para mim, não vejo efeitos colaterais do uso
spl_autoload_register
(desempenho não testado)Então, para responder à sua pergunta, gostaria de compartilhar uma classe do meu próximo plug-in que estou usando para carregar automaticamente classes de um único diretório sem problemas e isso faz bem a mim até agora.
Para quebrar essa classe simples em partes, como você vê, estou usando o padrão Singleton.
Constructor
é privado einstance()
&$_instance
pertence ao padrão. Construtor temspl_autoload_register
função.que está chamando o
load
método da auto-classe. As duas primeiras linhas desse método são:o que é bem direto. se você seguir o WPCS , o incentivará a seguir uma convenção de nomenclatura de classe prefixada com a palavra classe e depois o nome da classe. é claro que qualquer sublinhado (_) é substituído por (-) traço.
então um nome de arquivo da classe
WPSE_Post
seriaclass-wpse-post.php
Nomes de classes de caixa inferior com
strtolower
e usandostr_replace
para substituir sublinhados por traços. entãoWPSE_Post
agora se tornawpse-post
. finalmente adicionando um prefixoclass-
na próxima linha.Eu estou usando
is_readable
na declaração condicional que é permutável comfile_exists
. assumindo queYOUR_PLUGIN_PATH
é o caminho base do plug-in eclasses-dir
está sob o diretório principal do plug-in, mantendo todas as suas classes que precisam de carregamento automático.include_once
é usado para carregar o arquivo real de plantão.Uso:
você só precisa incluir a classe auto loader acima no arquivo base do seu plugin
e depois ligue para suas aulas sob demanda.
Nota: Não estou usando o método de espaço para nome na minha solução, para que ele possa ou não se adequar às suas necessidades, mas publicado aqui na esperança de que alguém pelo menos obtenha benefícios de carregar classes dinamicamente.
fonte
fonte