Lorsque vous déclarez une matrice en tant que membre de la classe, quelle manière devrait-elle être faite?
class Test1 {
private $paths = array();
public function __construct() {
// some code here
}
}
ou
class Test2 {
private $paths;
public function __construct() {
$this->paths = array();
// some code here
}
}
Lequel est meilleur en termes de bonnes pratiques et de performances? Que recommanderais-tu?
Je suggérerais de faire cela lorsque vous déclarez une variable de classe. Un constructeur peut être remplacé par l'extension de classes, ce qui pourrait entraîner des e_nocollants ou même e_warnings si l'une de vos fonctions dépend de cette variable étant un tableau (même un vide)
Si vous allez remplir votre tableau de manière dynamique lors de l'initialisation, faites-le dans le constructeur. S'il contient des valeurs fixes, faites-le dans la Déclaration de la propriété.
Essayer de remplir un tableau de manière dynamique (par exemple en utilisant la valeur de retour d'une certaine fonction ou une méthode de la déclaration dans la Déclaration Résultats dans une erreur d'analyse:
// Function call is not valid here
private $paths = get_paths();
La performance n'est pas une préoccupation réelle ici, car chacune a son propre cas d'utilisation.
En général, parce que j'écris principalement dans d'autres langues en plus de PHP, j'aime déclarer mes variables d'instance en dehors du constructeur. Cela me laissa regarder le sommet d'une classe et avoir une idée de toutes les propriétés et de leurs modificateurs d'accès sans avoir à lire le code.
Par exemple, je n'aime vraiment pas les méthodes comme celle-ci
// ...
// whole bunch of code
// ...
public function initialize() {
$this->foo = array();
// some other code to add some stuff to foo
}
Maintenant, si je regarde juste la classe, je ne peux pas être sûr qu'il y a une variable FOO même disponible. S'il y a, je ne sais pas si je l'ai accès de n'importe où en dehors de l'instance.
Si j'ai à la place j'ai:
public $foo = array();
en haut de ma classe, je sais que FOO est une propriété d'instance et que je peux y accéder d'ailleurs.
Il n'y a pas d'implications de performance. Arrêtez d'obséder avec des choses qui ne comptent pas - concentrez-vous sur les problèmes de performance qui sont là: Mesurez en premier, optimisez uniquement les meilleurs délinquants.