Ce qui a surpris la boutique Java lorsqu'il a écrit PHP

Je ne connais que Java et JavaScript (un peu), j'ai donc décidé de toucher PHP au travail, et avant cela, j'ai essayé de créer un framework oléore après mes études. A ce moment là hein! Je vais dessiner grossièrement ce qui m'a surpris et ce dans quoi je me suis embarqué.

Pour rappel, dans cet article, je suis dans le domaine de Java, et j'écris simplement ce que je pensais quand j'ai touché à PHP, et j'ai insisté sur le fait que PHP était mauvais ou Java était bon. Je n'ai aucune intention de le faire.

La concaténation des chaînes de caractères est «.» (Point)

En Java, accédez aux membres d'un objet avec ., comme instance.member (). D'un autre côté, . en PHP est un opérateur qui concatène des chaînes. Je viens d'écrire ʻobjcet.doSomething () `et je me suis souvent demandé pourquoi cela ne fonctionnait pas ...

Impossible de surcharger la fonction

Ce n'est pas seulement pour PHP, mais les fonctions ne peuvent pas être surchargées. Il existe des arguments par défaut, alors utilisez-les bien.

Le constructeur de classe parent n'est pas appelé explicitement

Cela a peut-être été le plus choquant. Dans le monde Java, il s'agit d'une classe enfant qui a une classe parent, donc si la classe parent n'est pas initialisée correctement, la classe enfant ne peut pas exister. Il était choquant qu'une instance enfant puisse exister sans que le parent ne soit initialisé.

Valeur de retour false indiquant un échec

En PHP, false est souvent utilisé comme valeur de retour pour indiquer un échec de traitement. S'il se termine normalement, il renvoie false s'il ne parvient pas à renvoyer une chaîne de caractères, ce qui fait battre mon cœur quand je l'entends comme Java, mais c'est ce que c'est.

Tableau passé par valeur

En Java, si vous passez un tableau en argument, il sera passé par référence. Affecte le tableau appelant à la destination. Cependant, comme il est passé par valeur dans le standard PHP, il n'affecte pas la valeur de l'appelant. Si vous ajoutez & avant l'argument lors de la définition d'une fonction comme function callFunc (& $ array), il sera passé par référence. Je pense que passer par le prix peut être un goulot d'étranglement dans les performances, mais je me demande si je n'ai pas trop à m'inquiéter → Il semble que je n'ai pas à trop m'inquiéter (voir commentaires).

Il n'y a pas de type d'octet

Lors du traitement d'octets en php, utilisez une variable de type chaîne. Il semble nager dans la mer binaire en utilisant pleinement des fonctions telles que pack et unpack. C'est assez difficile si vous ne pouvez pas vous y habituer.

Codage interne des chaînes

Puisqu'il se trouve autour de la chaîne de caractères, le suivant est ici. La chaîne Java est simple car elle a le contenu en UTF-16, mais l'encodage interne de PHP semble différer selon l'environnement d'exécution. Si vous n'écrivez pas le code dans cet esprit, vous aurez bientôt un enfer déformé.

Il n'y a pas d'équivalent à la finale statique privée

Il existe plusieurs façons de représenter les constantes en PHP. définir et const. Mais c'est de toute façon une portée publique. Vous ne pouvez pas créer de constante fermée uniquement dans la classe. → Il semble que vous puissiez le faire avec le nouveau PHP (voir commentaires)

l'avis ne peut pas être pris

Je vois souvent «Avis hogehoge». Si vous pensez qu'une exception est lancée dans les coulisses et que vous pouvez transférer le traitement vers un gestionnaire approprié si vous l'attrapez, vous ne pouvez pas l'attraper. Bien sûr, il semble y avoir une alternative, mais au début, j'ai été surpris.

Il n'y a pas de getSession (false)

De là, l'histoire de Java EE Session. Il n'y a pas de processus équivalent à getSession (false) en PHP. Il a fallu une certaine ingéniosité pour écrire le processus "si la session n'avait pas commencé". ..

Les objets ne peuvent pas être stockés dans une session

Les sessions ne peuvent porter que des chaînes ou des nombres. </ s> → Correctement, "ne peut pas stocker le type de référence", donc "seules des chaînes ou des nombres peuvent être utilisés" n'était pas précis. </ petit>

Si vous souhaitez placer un objet ou un tableau dans une session, vous devez le sérialiser avant de le stocker. Désérialiser pour récupérer.

L'expiration du cookie de session ne se prolonge pas automatiquement </ s>

PHP vous permet également de définir une date d'expiration de session. Cependant, la date d'expiration décidée ici est l'heure après le début de la session. Supposons que la session expire dans 30 minutes. J'ai créé une session au temps 0. Lorsque vous accédez à nouveau à l'écran après 10 minutes, Java prolonge l'expiration de la session de 30 minutes à ce stade. En d'autres termes, le délai d'expiration est de 40 minutes, mais le cookie PHP n'augmente pas. Il expire à la première heure définie. Vous devez concevoir un peu pour rendre la stratégie de session similaire à Java </ s> Ici, il est possible que la compréhension soit un peu fondamentalement fausse, alors examinez-la avant de la modifier

Les cookies ne disparaissent pas même si la session est supprimée

En php, vous pouvez utiliser la fonction session_destroy pour détruire une session. Cependant, cela n'efface que les données de session côté serveur et le cookie de session côté navigateur reste. Pour supprimer une session, vous devez suivre la procédure de suppression des données de session côté serveur → suppression du cookie dans le navigateur.

User Contributed Notes La dernière partie qui est allée à la fin. La référence PHP s'appelle User Contributed Notes et vous pouvez lire des astuces écrites par des utilisateurs réels. J'étais envieux de cette culture.

Recommended Posts