web-dev-qa-db-fra.com

Meilleure façon d'inclure la classe d'assistance dans le sous-contrôleur: require_once ou JLoader

J'ai créé un fichier d'aide test.php Comme suit:

administrateur/composants/com_compname/helpers/test.php

class TestHelper{
   //class methods
}

Dans controllers/subcontrollername.php Nous pouvons utiliser l'un ou l'autre:

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

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

Mais je me demande lequel des deux est approprié et pourquoi ou si cela importe ou non. Quelqu'un peut-il me guider s'il vous plaît à ce sujet.

6
Liz.

En fait, JLoader::register('TestHelper','/path/to/test.php'); ne charge pas le fichier, il l'enregistre simplement pour pouvoir charger automatiquement le fichier si la classe est instanciée.

Vous en avez besoin instantanément, vous voulez utiliser:

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

Remarque: pour cela, votre nom de fichier doit être TestHelper.php.

qui va

  1. include_once Le fichier s'il existe (avec require_once Vous obtiendrez PHP, si cela n'existait pas. À présent, vous obtiendrez une jolie erreur Joomla!) .

  2. Rappelons-nous que ce fichier est déjà chargé et ne le fera plus include_once. Cela entraîne un gain de performance mineur.

qui ne sera pas

  1. JLoader::register() votre classe, vous ne pouvez donc pas utiliser JLoader::load() plus tard.

en tout:

  1. Gain de performance mineur.
  2. Il est bon de suivre le style de codage du framework (bien que Joomla! Ne le fasse pas partout lui-même).
  3. Vous pouvez utiliser la notation par points pour le nom de classe (non applicable pour les classes *Helper.).

Exemple de notation par points

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

serait include_once fichier dans /path/to/sub/path/classname.php

NOTE

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

a la sténographie

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

10
Rene Korss