2010-12-29 4 views
17

Lors de la déclaration d'un tableau en tant que membre de la classe, comment le faire?PHP5. Deux façons de déclarer un tableau en tant que membre de classe

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 mieux en termes de bonnes pratiques et de la performance? Que recommanderais-tu?

Répondre

8

Je suggère de le faire lors de la déclaration d'une variable de classe. Un constructeur peut être redéfini dans les classes d'extension, ce qui peut entraîner E_NOTICEs ou même E_WARNINGs si l'une de vos fonctions dépend de cette variable étant un tableau (même un vide)

+1

Oui, cela compte! Comme le dit la documentation de PHP5: «Les constructeurs parents ne sont pas appelés implicitement si la classe enfant définit un constructeur». – ezpresso

+7

"Je suggérerais de faire ceci" quand le PO posera une question/ou une question? Qu'est-ce que c'est"? Le faire dans le constructeur ou dans le cadre de la déclaration? – Adam

+0

@Adam: Il était clair pour l'OP ce que cela signifie. Peut-être parce qu'il a lu toute la phrase. – Mchl

5

Si vous voulez remplir votre tableau dynamiquement lors de l'initialisation, faites-le dans le constructeur. S'il contient des valeurs fixes, faites-le dans la déclaration de propriété.

Essayer de remplir un tableau dynamique (par exemple en utilisant la valeur de retour d'une fonction ou d'une méthode) dans la déclaration résulte d'une erreur d'analyse:

// Function call is not valid here 
private $paths = get_paths(); 

performance n'est pas une réelle préoccupation ici car chacun a son propre cas d'utilisation.

+0

Merci! Y a-t-il une pénalité de performance dans le constructeur? – ezpresso

+0

@ezpresso: Pas que je sache, pas que cela devrait avoir de l'importance. – BoltClock

1

Aucune répercussion sur les performances. Arrêtez d'être obsédé par des choses qui ne comptent pas - concentrez-vous sur les problèmes de performance qui sont là: mesurez d'abord, optimisez seulement les meilleurs délinquants.

5

En général, parce que j'écris principalement dans d'autres langues en plus PHP, j'aime déclarer mes variables d'instance en dehors du constructeur. Cela me permet de regarder en haut d'une classe et d'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 des 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 ya une variable foo même disponible. Si c'est le cas, je ne sais pas si j'y ai accès depuis n'importe quel endroit en dehors de l'instance.

Si au contraire je:

public $foo = array(); 

au sommet de ma classe, je sais que foo est une propriété d'instance, et que je peux y accéder d'ailleurs.

Questions connexes