Maison  >  Article  >  développement back-end  >  Points de connaissances souvent confus en PHP

Points de connaissances souvent confus en PHP

墨辰丷
墨辰丷original
2018-06-07 11:37:341545parcourir

Cet article présente principalement les points de connaissances qui sont souvent confus en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

1. La différence entre echo et print

Les fonctions d'echo et d'impression en PHP sont fondamentalement les mêmes (sortie), mais il existe encore des différences subtiles entre les deux. Il n'y a pas de valeur de retour après la sortie d'écho, mais print a une valeur de retour et renvoie false lorsque son exécution échoue. Par conséquent, elle peut être utilisée comme une fonction normale. Par exemple, après avoir exécuté le code suivant, la valeur de la variable $r sera 1.

$r = print "Hello World";

Cela signifie que print peut être utilisé dans certaines expressions complexes, mais echo ne le peut pas. Cependant, comme l'instruction echo ne nécessite le renvoi d'aucune valeur, l'instruction echo dans le code s'exécute légèrement plus rapidement que l'instruction print.

2. La différence entre include et require

Les fonctions de include() et require() sont fondamentalement les mêmes (include), mais il existe quelques différences dans Dans l'utilisation, include() est une fonction d'inclusion conditionnelle, tandis que require() est une fonction d'inclusion inconditionnelle. Par exemple, dans le code suivant, si la variable $a est vraie, le fichier a.php sera inclus :

if($a){   
include("a.php");   
}

et require() est différent de include(), quelle que soit la valeur $ a prend, ce qui suit Le code inclura le fichier a.php dans le fichier :

if($a){   
require("a.php");   
}

En termes de gestion des erreurs, utilisez l'instruction include. Si une erreur d'inclusion se produit, le programme ignorera l'inclusion. Bien que le message d'erreur soit affiché, le programme continuera à être mis en œuvre ! Mais require vous donnera une erreur fatale.

Bien sûr, nous pouvons aussi comprendre Qifen littéralement : require signifie une demande ou une exigence très forte.

3. Les instructions require_once() et include_once()

Je suis hors sujet, car elles ressemblent à de simples instructions require_once() et include_once() correspondant respectivement pour exiger () et inclure () les instructions. Les instructions require_once() et include_once() sont principalement utilisées lorsque plusieurs fichiers doivent être inclus, ce qui peut efficacement éviter les erreurs dans les définitions répétées de fonctions ou de variables causées par l'inclusion du même morceau de code.

4. La différence entre une chaîne vide ('') et NULL

Les chaînes vides et NULL en PHP sont toutes deux stockées avec une valeur de 0, mais leurs types sont pas la même chose. Vous pouvez essayer echo gettype(''); et echo gettype(NULL); et vous constaterez qu'ils impriment respectivement la chaîne et NULL. Bien sûr, 0 est également facile à confondre. ); Si vous imprimez le type, vous constaterez que le type de 0 est entier (entier). On peut voir que la chaîne (''), NULL et 0 sont des "valeurs égales" mais pas de types différents.

5. La différence entre isset et vide

Du sens littéral, on peut comprendre : vide c'est juger si une variable est "vide", tandis que isset l'est pour juger si une variable a été définie. Mais il y a une chose à laquelle vous devez faire attention ici : lorsque la valeur d'une variable est 0, vide considère la variable comme égale à vide, c'est-à-dire qu'elle équivaut à aucun paramètre. Par exemple, lorsque nous détectons la variable $id, lorsque $id=0, nous utilisons vide et isset pour détecter si la variable $id a été configurée. Les deux renverront des valeurs différentes : vide pense qu'elle n'est pas configurée et isset peut obtenir. la valeur de $id. , regardez l'exemple ci-dessous :

$id=0;   
empty($id)?print "我是空的":print "我是$id ."; //结果:我是空的   
!isset($id)?print "我是空的":print "我是$id .";//结果:我是0

6 La différence entre == (égal) et === (égal)

Regardez le quatrième caractère nul ci-dessus La différence entre la chaîne ("") et NULL, regardons un autre exemple :

'' == NULL;   
'' === NULL;
Après l'avoir exécuté, vous constaterez que le premier est vrai et le second un est faux ! On peut voir que == compare uniquement si les valeurs sont égales, tandis que === compare non seulement les valeurs, mais compare également les types, ce qui est plus strict.

7.self :: La différence entre this->

Lors de l'accès à des variables ou méthodes membres dans une classe PHP, si la variable ou la méthode référencée est Si elle est déclarée comme const (définissant des constantes) ou static (déclarant static), alors l'opérateur :: doit être utilisé. Au contraire, si la variable ou la méthode référencée n'est pas déclarée comme const ou static, alors l'opérateur -> utilisé.

De plus, si vous accédez à une variable ou une méthode const ou statique depuis la classe, vous devez utiliser l'auto-référence. Au contraire, si vous accédez à une variable ou une méthode non const ou statique depuis la classe. classe, vous devez utiliser self-référentiel $this.

8. La différence entre strstr() et strpos()

stristr() n'est pas sensible à la casse strstr() est sensible à la casse

Recherche de fonction La première occurrence d'une chaîne dans une autre chaîne.

En cas de succès, renvoie le reste de la chaîne (à partir du point de correspondance). Si la chaîne n'est pas trouvée, renvoie false.

stripos() insensible à la casse strpos() sensible à la casse

La fonction renvoie la position de la première occurrence d'une chaîne dans une autre chaîne.

Renvoie false si la chaîne n'est pas trouvée.

Des tests ont prouvé que si vous recherchez simplement pour déterminer s'il existe, l'efficacité d'exécution de strpos() est supérieure à strstr()

9 HTTP_HOST et SERVER_NAME en PHP<.>

Mêmes points :

Lorsque les trois conditions suivantes sont remplies, les deux afficheront les mêmes informations.

1. Le serveur est le port 80

2. Le nom du serveur dans la configuration d'Apache est correctement défini

3. > est différent Points :

1. Situation normale :

_SERVER["HTTP_HOST"] Selon la spécification du protocole HTTP/1.1, les informations seront affichées en fonction de la requête HTTP du client.

_SERVER["SERVER_NAME"] par défaut affiche directement la valeur ServerName dans le fichier de configuration d'Apache httpd.conf.

2. Lorsque le serveur est sur un port non-80 :

_SERVER["HTTP_HOST"] affichera le numéro de port, par exemple : mimiz.cn:8080

_SERVER["SERVER_NAME" "] affichera directement la valeur ServerName

, donc dans ce cas, cela peut être compris comme : HTTP_HOST = SERVER_NAME : SERVER_PORT

3. Lorsque le ServerName dans la configuration le fichier httpd.conf est le même que HTTP/1.0 Lorsque le nom de domaine demandé est incohérent :

httpd.conf est configuré comme suit :

ServerName mimiz.cn

ServerAlias ​​www.mimiz.cn

Nom de domaine d'accès client www.mimiz.cn

_SERVER["HTTP_HOST"] sortie www.mimiz.cn

_SERVER["SERVER_NAME "] sortie mimiz.cn

Donc, dans le programme actuel, vous devriez essayer d'utiliser _SERVER["HTTP_HOST"], qui est plus sûr et plus fiable.

Si vous utilisez le mappage de ports et accédez depuis l'intranet, il est préférable d'utiliser "$_SERVER['HTTP_X_FORWARDED_HOST']".

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

PHP implémente la fonction de vote d'humeur

Plusieurs façons de vider le cache en PHP

PHP implémente un site Web d'achat multifonctionnel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn