Table des matières
Single Où les strict_types doivent-ils être écrits dans le fichier
Syntaxe de base
单个文件时strict_types应写在哪里
基本语法
strict_types不能写在脚本中间
两个文件时strict_types如何产生作用
三个文件时declare(strict_types=1);的作用
在函数定义部分使用declare(strict_types=1);
在主体部分中指定strict_types
总结
Que diriez-vous des strict_types quand il y a deux fichiers Cela fonctionne
Le rôle de declare(strict_types=1); lorsqu'il y a trois fichiers
spécifié dans la partie du corps strict_types
Résumé
Maison développement back-end tutoriel php Parlons de la plage valide de declare(strict_types=1)

Parlons de la plage valide de declare(strict_types=1)

Jan 30, 2022 am 04:00 AM
php

Cet article vous présentera la plage valide de declare(strict_types=1). J'espère qu'il sera utile aux amis dans le besoin !

À propos de la plage valide de declare(strict_types=1)

declare(strict_type=1); est la syntaxe spécifiée du mode de vérification de type strict introduit dans php7

Single Où les strict_types doivent-ils être écrits dans le fichier

Syntaxe de base

<?php
function add(int $a, int $b): int
{
    return $a + $b;
}

var_dump(add(1.0, 2.0));
Copier après la connexion

Lors de l'exécution indépendante dans cet état, affichez int(3)< /code ><code>严格类型检查模式的指定语法

单个文件时strict_types应写在哪里

基本语法

<?php
declare(strict_types=1);    //加入这句

function add(int $a, int $b): int
{
    return $a + $b;
}

var_dump(add(1.0, 2.0));
Copier après la connexion

在此状态下执行独立时,输出int(3)

我们提供的是double类型,但php7能很好的处理它,和php5时代没什么区别

做了如下变更

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to add() must be of 
the type integer, float given, called in /Users/hiraku/sandbox/stricttypes/A.php on line 9 and defined in 
/Users/hiraku/sandbox/stricttypes/A.php:4
Stack trace:
#0 /Users/hiraku/sandbox/stricttypes/A.php(9): add(1, 2)
#1 {main}
  thrown in /Users/hiraku/sandbox/stricttypes/A.php on line 4
Copier après la connexion

TypeError产生,如下

<?php
function add(int $a, int $b): int
{
    return $a + $b;
}

declare(strict_types=1);

var_dump(add(1.0, 2.0));
Copier après la connexion

strict_types不能写在脚本中间

declare语法不能写在脚本的中间,如下写法是错误的

PHP Fatal error:  strict_types declaration must be the very first statement in the script in 
/Users/hiraku/sandbox/stricttypes/A.php on line 7
Copier après la connexion

产生如下错误

<?php
declare(strict_types=1) {
  //...
}
Copier après la connexion

Fatal error产生,这甚至不是Throwable,而是编译过程中产生的错误

同样,与上述例子相似的位置,也不能使用如下语法

PHP Fatal error:  strict_types declaration must not use block mode in 
/Users/hiraku/sandbox/stricttypes/A.php on line 2
Copier après la connexion
A.php脚本

<?php
declare(strict_types=1);
function add(int $a, int $b): int
{
    return $a + $b;
}
Copier après la connexion

两个文件时strict_types如何产生作用

如下代码

A.php脚本在开头声明严格模式

B.php脚本

<?php
require &#39;A.php&#39;;
var_dump(add(1.0, 2.0));    //注意这里键入的是1.0和2.0浮点数,而A.php声明需要int
Copier après la connexion

A.phpB.php文件require,如下

$ php B.php
int(3)
Copier après la connexion

执行结果

A.php

<?php
function add(int $a, int $b): int
{
    return $a + $b;
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

什么!!!!居然能够执行而不报错!!!!!
原来是B.php并没有声明strict_types,所以对于B脚本来说,是默认的松散模式

也就是说,对于strict_types有以下的行为

  • 不管怎么样,函数定义时的严格模式,行为并不会出现什么不同
  • 函数执行时的,严格模式会出现差异
  • declare(strict_types=1);的语法本身在A.php文件中完成,而被B.php文件require,而B.php并没有定义严格模式,那么执行require的文件(B.php)不会变成严格模式

上述解释就如如下代码所示,理论上A.php文件的严格模式已经关闭了,然而仅仅是B.php文件设定了declare(strict_types=1);,那么即使A.php没有设定严格模式,但A.phpB.php引用了,就对A.php使用严格模式

B.php

<?php
declare(strict_types=1);

require &#39;A.php&#39;;
var_dump(add(1.0, 2.0));
Copier après la connexion
$ php B.php
PHP Fatal error:  Uncaught TypeError: Argument 1 passed to add() 
must be of the type integer, float given, called in /Users/hiraku/sandbox/stricttypes/B.php on line 4 and 
defined in /Users/hiraku/sandbox/stricttypes/A.php:2
Copier après la connexion
C.php

<?php
require_once &#39;B.php&#39;;
var_dump(add(1.0, 2.0));
var_dump(add2(1.0, 2.0));
Copier après la connexion

三个文件时declare(strict_types=1);的作用

在函数定义部分使用declare(strict_types=1);

再增加一个require,试试3个文件嵌套

C.php → B.php → A.php
B.php

<?php
declare(strict_types=1);    //在函数定义部分声明
require_once &#39;A.php&#39;;
function add2($a, $b)
{
    return add($a, $b);
}
Copier après la connexion
A.php

<?php
function add(int $a, int $b): int
{
    return $a + $b;
}
Copier après la connexion
Copier après la connexion
Copier après la connexion
$ php C.php 
int(3)
PHP Fatal error:  Uncaught TypeError: Argument 1 passed to add() must be of the type integer, float given, called in 
/Users/hiraku/sandbox/stricttypes/B.php 
on line 7 and defined in /Users/hiraku/sandbox/stricttypes/A.php:2
Copier après la connexion

执行结果如下

C.php

<?php
declare(strict_types=1);    //主体部分声明
require_once &#39;B.php&#39;;
var_dump(add2(1.0, 2.0));
Copier après la connexion
  • var_dump(add(1.0, 2.0)); 能正确执行
  • var_dump(add2(1.0, 2.0));产生TypeError错误

也就是说,declare(strict_types=1);会按照如下方式变化

  • 定义函数本身的文件,并不能产生效果
  • 在定义的函数中调用其它函数,严格模式能产生效果(B.php使用了strict_types=1,同时B.php调用了A.php,所以A.php能起作用)

在主体部分中指定strict_types

不在B.php中途位置指定strict_types,而在主要部分即C.php指定,strict模式对所有的都有效吗?然而,事实上strict模式只有在引用的地方有效

C.php → B.php → A.php
B.php

<?php
require_once &#39;A.php&#39;;
function add2($a, $b)
{
    return add($a, $b);
}
Copier après la connexion
A.php

<?php
function add(int $a, int $b): int
{
    return $a + $b;
}
Copier après la connexion
Copier après la connexion
Copier après la connexion
$ php C.php 
int(3)
Copier après la connexion
Foo.php

<?php
// 这个文件的strict有效
declare(strict_types=1);

class Foo
{
    private $bar;

    public function __construct()
    {
        $this->bar = new Bar; // 执行严格模式
    }

    public function aaa()
    {
        $this->bar->aaa(); // 执行严格模式
    }
}
Copier après la connexion
  • C.php中使用strict_types=1,因此add2(1.0,2.0)以严格模式执行,但是由于没有声明变量,所以没有任何效果
  • 另一方面,具有add2()定义的B.php处于非严格模式

总结

只有在写declare的文件的执行部分才会执行严格模式,该文件中调用的其它函数(其它文件中的函数)也会被影响

也就是说,哪个文件写了declare

Ce que nous fournissons est le type double, mais php7 peut très bien le gérer, et ce n'est pas différent du php5 code> era

Les modifications suivantes ont été apportées

Une TypeError s'est produite, comme suit

rrreee

strict_types ne peut pas être écrit dans le milieu du script

declare ne peut pas être écrite au milieu du script L'écriture suivante est fausse

rrreee

L'erreur suivante est générée🎜rrreee

Une erreur fatale est générée, qui n'est même pas Throwable, mais une erreur générée pendant le processus de compilation🎜

De même, la syntaxe suivante ne peut pas être utilisée dans des positions similaires à les exemples ci-dessus🎜rrreeerrree

Que diriez-vous des strict_types quand il y a deux fichiers Cela fonctionne

🎜Le code suivant🎜🎜

A.phpLe script déclare le mode strict au début🎜rrreee

A.php est le fichier B.php require, comme suit🎜rrreeeLe résultat de l'exécution🎜rrreee

🎜Quoi!!!! Il peut être exécuté sans erreur !!!!!!🎜
Il s'avère que B.php ne déclare pas strict_types, donc pour le script B, c'est le mode lâche par défaut🎜

En d'autres termes, pour strict_types a le comportement suivant🎜

  • Peu importe quoi, le comportement ne sera pas différent en mode strict lorsque la fonction est définie
  • 🎜Lorsque la fonction est exécutée Oui, il y aura des différences en mode strict 🎜
  • declare(strict_types=1); La syntaxe elle-même est complétée dans le fichier A.php et dans le fichier B.php require, et B.php ne définit pas le mode strict, alors exécutez require Le fichier (B.php) ne devient pas en mode strict

L'explication ci-dessus est celle indiquée dans le code suivant En théorie, le fichier A.php Le mode strict du code> a été désactivé, mais seul le fichier <code>B.php a défini declare(strict_types=1);, alors même si le mode A.php Strict n'est pas défini, mais A.php est référencé par B.php, utilisez donc le mode strict pour A.php 🎜rrreeerrreeerrreee

Le rôle de declare(strict_types=1); lorsqu'il y a trois fichiers

Utilisez declare(strict_types=1);

Ajoutez un autre require et essayez d'imbriquer 3 fichiers🎜🎜C.php → B.php → A.phprrreeerrreeerrreee

Les résultats de l'exécution sont les suivants🎜rrreee

    var_dump(add(1.0, 2.0) Peut être exécuté correctement
  • var_dump(add2(1.0, 2.0));Produit TypeError

En d'autres termes , declare(strict_types=1); changera comme suit🎜

  • Le fichier qui définit la fonction elle-même ne produira aucun effet
  • Appelez d'autres fonctions dans le fonction définie, le mode strict peut produire des effets (B.php utilise strict_types=1 et B .php appelle A.php, donc <code>A.php peut fonctionner)

spécifié dans la partie du corps strict_types

Ne spécifiez pas strict_types au milieu de B.php, mais précisez-le dans la partie principale, C.php Le mode strict est-il valable pour tous ? Cependant, en fait, le mode strict n'est valable que là où il est cité🎜🎜 C.php → B.php → A.php. rrreeerrreeerrreeerrreee

  • strict_types=1 est utilisé en C.php, donc add2(1.0,2.0) est exécuté en mode strict, mais comme aucune variable n'est déclarée, cela n'a aucun effet
  • Par contre, B.php avec la définition add2() est en mode non strict

Résumé

Uniquement lors de l'écriture declare

exécutera le mode strict. Les autres fonctions appelées dans le fichier (fonctions dans d'autres fichiers) seront également affectées🎜

En d'autres termes, quel fichier écrit declare, tous les codes d'un fichier doivent être vérifiés, même si le code qu'il contient provient d'autres fichiers, et en même temps, même si le fichier qui doit être vérifié est également appelé par d'autres fichiers, cela ne change rien au fait que le le fichier doit être vérifié🎜rrreeerrreee 🎜🎜Apprentissage recommandé : "🎜Tutoriel vidéo PHP🎜"🎜

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles