Jadual Kandungan
Di mana harus strict_types ditulis dalam satu fail
Sintaks asas
strict_types tidak boleh ditulis di tengah-tengah skrip
Bagaimanakah strict_types berfungsi apabila terdapat dua fail?
declare(strict_types=1);Gunakan
declare(strict_types=1); dalam bahagian definisi fungsi Tambah keperluan lain dan cuba bersarang 3 fail
Jangan nyatakan strict_types di tengah B.php, tetapi di bahagian bahagian utama, iaitu C.php tentukan, adakah mod ketat sah untuk semua? Namun, sebenarnya, mod ketat hanya sah jika dipetik
Mod ketat hanya akan dilaksanakan dalam bahagian pelaksanaan fail di mana
Rumah pembangunan bahagian belakang tutorial php Mari kita bincangkan tentang julat pengisytiharan yang sah(strict_types=1)

Mari kita bincangkan tentang julat pengisytiharan yang sah(strict_types=1)

Jan 30, 2022 am 04:00 AM
php

Artikel ini akan memperkenalkan kepada anda julat pengisytiharan yang sah(strict_types=1).

Mengenai julat declare(strict_types=1) yang sah

declare(strict_type=1); ialah sintaks yang ditetapkan bagi 严格类型检查模式 yang diperkenalkan dalam php7

Di mana harus strict_types ditulis dalam satu fail

Sintaks asas

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

var_dump(add(1.0, 2.0));
Salin selepas log masuk

Apabila melaksanakan secara bebas dalam keadaan ini, outputint(3)

kami Apa yang disediakan adalah jenis double, tetapi php7 boleh mengendalikannya dengan baik, dan tidak berbeza dengan era php5

telah membuat perubahan berikut

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

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

var_dump(add(1.0, 2.0));
Salin selepas log masuk

Terdapat TypeError yang dihasilkan, seperti berikut

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
Salin selepas log masuk

strict_types tidak boleh ditulis di tengah-tengah skrip

declare sintaks tidak boleh ditulis di tengah-tengah skrip, tulisan berikut salah

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

declare(strict_types=1);

var_dump(add(1.0, 2.0));
Salin selepas log masuk

menghasilkan ralat berikut

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
Salin selepas log masuk

Fatal error menghasilkan, ini bukan Throwable, tetapi ralat dihasilkan semasa penyusunan

Sekali lagi, serupa dengan kedudukan contoh di atas, anda juga tidak boleh menggunakan sintaks berikut

<?php
declare(strict_types=1) {
  //...
}
Salin selepas log masuk
PHP Fatal error:  strict_types declaration must not use block mode in 
/Users/hiraku/sandbox/stricttypes/A.php on line 2
Salin selepas log masuk

Bagaimanakah strict_types berfungsi apabila terdapat dua fail?

Kod berikut

A.phpSkrip mengisytiharkan mod ketat pada permulaan

A.php脚本

<?php
declare(strict_types=1);
function add(int $a, int $b): int
{
    return $a + $b;
}
Salin selepas log masuk

A.php dan ialah B.phpfailrequire, seperti berikut

B.php脚本

<?php
require &#39;A.php&#39;;
var_dump(add(1.0, 2.0));    //注意这里键入的是1.0和2.0浮点数,而A.php声明需要int
Salin selepas log masuk

Hasil pelaksanaan

$ php B.php
int(3)
Salin selepas log masuk

Apa!!!! Ia boleh dilaksanakan tanpa ralat!!!!
Ternyata B.php tidak mengisytiharkan strict_types, jadi untuk skrip B, ia adalah mod longgar lalai

Dengan kata lain, untuk strict_types terdapat kelakuan berikut

  • Tidak kira apa pun, tingkah laku tidak akan berbeza dalam mod ketat apabila fungsi ditakrifkan
  • Perbezaan akan berlaku dalam mod ketat apabila fungsi dilaksanakan
  • declare(strict_types=1);Sintaks itu sendiri dilengkapkan dalam fail A.php dan dilengkapkan oleh B.phpfailrequire dan B.php tidak mentakrifkan mod ketat, kemudian fail (require) yang melaksanakan B.php tidak akan menjadi mod ketat

Penjelasan di atas adalah seperti yang ditunjukkan dalam kod berikut, teori Mod ketat fail A.php telah dimatikan, tetapi hanya B.php fail telah menetapkan declare(strict_types=1); Jadi walaupun A.php tidak menetapkan mod ketat, tetapi A.php dirujuk oleh B.php, ia akan menjadi betul A.php

A.php

<?php
function add(int $a, int $b): int
{
    return $a + $b;
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
B.php

<?php
declare(strict_types=1);

require &#39;A.php&#39;;
var_dump(add(1.0, 2.0));
Salin selepas log masuk
Peranan
$ 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
Salin selepas log masuk
apabila terdapat tiga fail

declare(strict_types=1);Gunakan

declare(strict_types=1); dalam bahagian definisi fungsi Tambah keperluan lain dan cuba bersarang 3 fail

C.php → B.php → A.php

C.php

<?php
require_once &#39;B.php&#39;;
var_dump(add(1.0, 2.0));
var_dump(add2(1.0, 2.0));
Salin selepas log masuk
B.php

<?php
declare(strict_types=1);    //在函数定义部分声明
require_once &#39;A.php&#39;;
function add2($a, $b)
{
    return add($a, $b);
}
Salin selepas log masuk
Hasil pelaksanaan adalah seperti berikut
A.php

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

$ 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
Salin selepas log masuk
    boleh dilaksanakan dengan betul
  • var_dump(add(1.0, 2.0));
  • dan ralat TypeError berlaku
  • var_dump(add2(1.0, 2.0));
  • Dengan kata lain,
akan berubah seperti berikut

declare(strict_types=1);

Fail yang mentakrifkan fungsi itu sendiri tidak akan mempunyai sebarang kesan
  • Panggil fungsi lain dalam fungsi yang ditentukan, mod ketat boleh mempunyai kesan (
  • menggunakan
  • , dan pada masa yang samaB.phpstrict_types=1 dipanggil, jadi B.php boleh berfungsi)A.phpA.php
  • Nyatakan strict_types di bahagian utama

Jangan nyatakan strict_types di tengah B.php, tetapi di bahagian bahagian utama, iaitu C.php tentukan, adakah mod ketat sah untuk semua? Namun, sebenarnya, mod ketat hanya sah jika dipetik

C.php → B.php → A.php

C.php

<?php
declare(strict_types=1);    //主体部分声明
require_once &#39;B.php&#39;;
var_dump(add2(1.0, 2.0));
Salin selepas log masuk
B.php

<?php
require_once &#39;A.php&#39;;
function add2($a, $b)
{
    return add($a, $b);
}
Salin selepas log masuk
A.php

<?php
function add(int $a, int $b): int
{
    return $a + $b;
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
$ php C.php 
int(3)
Salin selepas log masuk
strict_types=1 digunakan dalam C.php, jadi add2(1.0,2.0) dilaksanakan dalam mod ketat, tetapi kerana tiada pembolehubah diisytiharkan, ia tidak mempunyai effect
  • Sebaliknya, B.php dengan definisi add2() berada dalam mod tidak ketat
  • Ringkasan

Mod ketat hanya akan dilaksanakan dalam bahagian pelaksanaan fail di mana

ditulis , fungsi lain yang dipanggil dalam fail ini (fungsi dalam fail lain) juga akan terjejas

declare Dalam erti kata lain, fail mana yang ditulis

, semua kod di dalamnya fail perlu disemak, walaupun terdapat Kod itu datang dari fail lain Pada masa yang sama, walaupun fail yang perlu disemak juga dipanggil oleh fail lain, ia tidak mengubah fakta bahawa fail itu perlu. diperiksa

declare

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(); // 执行严格模式
    }
}
Salin selepas log masuk
Bar.php

<?php
// 这个文件strict无效
class Bar
{
    private $moo;

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

    public function aaa()
    {
        $this->moo->aaa(); // 执行非严格模式
    }
}
Salin selepas log masuk
Disyorkan kajian: "
Tutorial video PHP

Atas ialah kandungan terperinci Mari kita bincangkan tentang julat pengisytiharan yang sah(strict_types=1). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP ialah rangka kerja MVC sumber terbuka. Ia menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP mempunyai beberapa perpustakaan untuk mengurangkan beban tugas yang paling biasa.

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

See all articles