ti-enxame.com

Melhor maneira de incluir a classe auxiliar no subcontrolador: require_once ou JLoader

Eu criei um arquivo auxiliar test.php Da seguinte maneira:

administrador/componentes/com_compname/helpers/test.php

class TestHelper{
   //class methods
}

Em controllers/subcontrollername.php Podemos usar qualquer um deles:

1) require_once(JPATH_COMPONENT.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'test.php' );

2) JLoader::register('TestHelper','/path/to/test.php');

Mas eu estou querendo saber qual dos dois é apropriado e por que isso importa ou não. Alguém por favor pode me orientar sobre isso.

6
Liz.

Na verdade, JLoader::register('TestHelper','/path/to/test.php'); não carrega o arquivo, apenas o registra para poder carregar automaticamente o arquivo se a classe for instanciada.

Exija instantaneamente, você deseja usar:

JLoader::import('TestHelper','/path/to/test.php');

Nota: para isso, seu nome de arquivo deve ser TestHelper.php.

qual será

  1. include_once O arquivo, se existir (com require_once Você obteria PHP, se não existir. Agora você obteria um erro bonito do Joomla!) .

  2. Lembrará que este arquivo já está carregado e não include_once Novamente. Isso resulta em um pequeno ganho de desempenho.

o que não

  1. JLoader::register() sua classe, então você não pode usar JLoader::load() mais tarde.

Em suma:

  1. Menor ganho de desempenho.
  2. É uma boa prática seguir o estilo de codificação da estrutura (embora o Joomla! Não faça isso em todos os lugares).
  3. Você pode usar notação de ponto para o nome da classe (não aplicável para as classes *Helper.).

Exemplo de notação de ponto

jimport('sub.path.classname','/path/to/')

arquivo include_once em /path/to/sub/path/classname.php

NOTE

JLoader::import('TestHelper','/path/to/test.php')

tem taquigrafia

jimport('TestHelper','/path/to/test.php')

10
Rene Korss