Je suis un débutant et j'ai découvert que de nombreuses classes d'outils peuvent être utilisées en les déclarant directement, comme celles de Laravel
Demande $request;
$request->get();
Cela me laisse perplexe. Est-ce que déclarer une variable de classe instancie le code ?
Après une recherche sur Baidu, personne n'a posé de questions sur ce problème en langage PHP, uniquement Java, et Java ressemble à ceci :Class1 item1 ;
Déclarer un objet
Générer un type de référence , Occupant 4 octets de mémoire, quel que soit le type (objet o ou From f) de la référence, elle occupe 4 octets de mémoireClass1 item1 = new Class1();
Create une instance de classe, ouvrez un morceau de mémoire (cette mémoire est liée à la taille de la classe elle-même), et laissez l'élément de référence1 pointer vers la position de départ de cette mémoire
Si c'est le cas, $request
est juste une référence à Request
, et Request
n'a pas encore été instancié et n'existe pas en mémoire. , alors pourquoi $request
peut-il utiliser directement les méthodes qu'il contient ? Après avoir examiné le code source, bien que les propriétés et méthodes de cette classe soient static
statiques et existent déjà dans la mémoire avant l'instanciation, il existe également de nombreuses propriétés et méthodes non statiques, get() est un méthode non statique !
L'appeler directement ne provoquerait-il pas une exception de pointeur ?
Demandez à un débutant !
PHP n'a pas ce genre de syntaxe
Ce que vous voyez devrait ressembler à ceci
Route::get('/', function (IlluminateHttpRequest $request) {
});
C'est l'injection de dépendances
http://www.golaravel.com/lara...
Ce qui suit est faux : après avoir examiné attentivement le code source, la réponse est-elle comme celle-ci ?
à
Avant ces deux morceaux de code, j'utilisais
use IlluminateHttpRequest;
use utilise simplement l'espace de noms, mais si vous souhaitez appeler la classe, vous devez charger le fichier de classe (obligatoire) ou le charger automatiquement. , lavavel utilise le chargement automatique, donc à notre avis, utiliser IlluminateHttpRequest équivaut à pouvoir utiliser directement la classe Request. En fait, ce n'est pas le cas de Laravel qui utilise la classe Request !
La fonction de chargement automatique de Laravel est la suivante :
On voit que si vous utilisez une classe non instanciée, elle sera automatiquement chargée et instanciée.