Je peux instancier une classe PHP à l'intérieur d'une autre classe?
Je me demandais si il est autorisé à créer une instance d'une classe à l'intérieur d'une autre classe.
Ou, dois-je le créer à l'extérieur et de le passer dans le constructeur? Mais alors je l'ai créé il, sans savoir si j'en aurais besoin.
Exemple (une base de données de la classe):
class some{
if(.....){
include SITE_ROOT . 'applicatie/' . 'db.class.php';
$db=new db
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas définir une classe dans une autre classe. Vous devez inclure des fichiers avec d'autres classes à l'extérieur de la classe. Dans votre cas, qui va vous donner deux classes de haut niveau
db
etsome
. Maintenant, dans le constructeur desome
vous pouvez décider de créer une instance dedb
. Par exemple:require
au lieu deinclude
.Des gens qui disent qu'il est possible de "créer une classe dans une classe" semblent dire qu'il est possible de créer un objet, instance d'une classe. Je n'ai pas vu un exemple d'une définition de classe dans une autre définition de la classe, qui ressemblerait à:
Puisque la question était " est-il possible de créer une classe à l'intérieur de une autre classe, je peux seulement supposer qu'il n'est PAS possible.
Je voulais juste faire remarquer qu'il est possible de charger une définition de classe de façon dynamique à l'intérieur d'une définition de classe.
Lukas est juste qu'on ne peut pas définir une classe à l'intérieur d'une autre classe, mais nous pouvons include() ou require() de façon dynamique, puisque toutes les fonctions et les classes définies dans le fichier inclus, aura une portée globale. Si vous avez besoin de charger une classe ou d'une fonction de manière dynamique, il suffit d'inclure les fichiers dans l'un de la classe de fonctions. Vous pouvez faire ceci:
http://php.net/manual/en/function.include.php
require_once
ouinclude_once
- de cette façon, vous vous assurez que vous n'avez pas compris / nécessaire plus d'une fois 🙂Il est impossible de créer une classe dans une autre classe en PHP.
Création d'un objet(une instance d'une classe) dans un autre objet est une chose différente.
Non, il n'est pas possible. L'imbrication des classes et de l'agrégation des objets sont différentes des mécanismes. L'imbrication des classes signifie de nidification des noms de classe, en fait. Classe imbriquée dans la classe B est nommé "B\A" (?). À partir de v5.3 vous pouvez imbriquer des noms de classe (et de quelques autres noms) dans des espaces de noms.
C'est possible en PHP 7 avec Les classes anonymes.
Voir l'exemple de les docs:
C'est un simple exemple montrant l'utilisation de classes anonymes, mais pas de l'intérieur d'une classe:
print_r(get_class_methods('Outer'));
imprimeArray( [0] => func2 )
(Edit) Ok la question et l'exemple de ce que vous essayez d'accomplir une source de confusion.
Il semble d'après votre exemple, vous essayez de DÉFINIR une classe à l'intérieur d'une autre classe.
Le nom correct de cette CLASSE IMBRIQUÉE et il n'est pas possible en PHP.
Donc, à votre exemple, la réponse est "NON". Pas en PHP, de toute façon. D'autres langues permettra aux "classes imbriquées". Java en est un exemple.
Par exemple, cela ne fonctionnera PAS en PHP
Maintenant, la question posée est de créer une INSTANCE d'une classe dans une autre classe.
À ce que la réponse est "OUI", vous pouvez INSTANCIER un "objet" à l'intérieur d'une "classe". Nous le faisons tout le temps.
Une classe peut même instancier lui-même. C'est ce que le célèbre singleton ne et de nombreux autres Creational modèles. Malheureusement, certaines personnes croient que le fait de les connaître l'injection de dépendance signifie qu'ils ne seront jamais d'appel à NOUVEAU dans une méthode de nouveau. MAL.
Elle aide à comprendre la différence entre une classe et un objet.
Un classe est extensible programme-code-modèle pour créer des objets.
Un objet se réfère à une instance particulière d'une classe.
Je suis juste de voir cela maintenant et je tiens à ajouter mon commentaire. Cela pourrait être profitable à personne. Quelqu'un a entendu parler de php traits? Bien que les traits ne pas importer d'une autre classe, mais seulement les importations d'un trait dans une autre classe. Ainsi, au lieu d'essayer d'importer plusieurs classes, vous pouvez déjà avoir une classe alors que les sous-classes agissent comme les traits de ce qui rend possible pour vous de les utiliser à main/classes parent
abstract
classes et parents/enfants à l'héritage. Les Traits ne sont pas une bonne solution dans la plupart des cas