PHP中static关键字原理的学习研究分析_PHP
看PHP手册的时候发现了下面这样一段代码:
复制代码 代码如下:
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count Test();
}
$count--;
}
?>
执行结果如下:
这是一个递归的函数,声明的静态变量count记录次数,输出1~10。
我在看的时候有个疑惑,递归调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?带着这个疑问和同事研究了一下,测试用代码如下:
复制代码 代码如下:
echo 'start
';
static $a = 10;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a = 20;
echo "$a
";
$GLOBALS['a'] = 10;
echo "$a
";
static $a = 30;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a;
echo "$a
";
static $a = 40;
echo "$a
";
$a = 100;
echo "$a
";
static $a = 50;
echo "$a
";
static $a = 4;
echo "$a
";
echo 'end
';
exit;
?>
执行结果如下:
start
- 4
- Notice: Undefined variable: a
- 4
- 10
- 10
- Notice: Undefined variable: a
- 10
- 10
- 100
- 100
- 100
- end
代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。
第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。第16行$a销毁的时候值为10,第19行声明后输出仍为10。
第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。
至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。
可能有理解不正确的地方,欢迎拍砖。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Peranan dan penggunaan statik dalam bahasa C: 1. Skop pembolehubah; 3. Fungsi dalaman 4. Ubah suai fungsi; Jika terdapat kata kunci statik di hadapan pembolehubah, maka skop pembolehubah adalah terhad kepada fail di mana ia diisytiharkan Dalam erti kata lain, pembolehubah adalah "skop peringkat fail", yang sangat berguna untuk mencegah masalah "definisi pendua" pembolehubah; 2. Kitaran hayat, pembolehubah statik dimulakan sekali apabila program mula dilaksanakan, dan dimusnahkan apabila program tamat, dsb.

1. statik Sila lihat program berikut dahulu: publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}} Pernah melihat ini Program segmen biasa kepada kebanyakan orang yang telah mempelajari Java. Walaupun anda belum mempelajari Java tetapi telah mempelajari bahasa peringkat tinggi yang lain, seperti C, anda seharusnya dapat memahami maksud kod ini. Ia hanya mengeluarkan "Hello, dunia" dan tidak mempunyai kegunaan lain Walau bagaimanapun, ia menunjukkan tujuan utama kata kunci statik.

Senario aplikasi praktikal dan kemahiran penggunaan kata kunci statik dalam bahasa C 1. Gambaran keseluruhan statik ialah kata kunci dalam bahasa C, digunakan untuk mengubah suai pembolehubah dan fungsi. Fungsinya adalah untuk mengubah kitaran hayat dan keterlihatannya semasa program berjalan, menjadikan pembolehubah dan fungsi statik. Artikel ini akan memperkenalkan senario aplikasi praktikal dan teknik penggunaan kata kunci statik, dan menggambarkannya melalui contoh kod tertentu. 2. Pembolehubah statik memanjangkan kitaran hayat pembolehubah Menggunakan kata kunci statik untuk mengubah suai pembolehubah tempatan boleh memanjangkan kitaran hayatnya.

Fungsi statik: 1. Pembolehubah; 3. Kegunaan lain 5. Pengoptimuman prestasi; Pengoptimuman Reka Letak Memori; 11. Elakkan pemulaan berulang; Pengenalan terperinci: 1. Pembolehubah, pembolehubah statik Apabila pembolehubah diisytiharkan sebagai statik, ia tergolong dalam peringkat kelas, bukan peringkat contoh, yang bermaksud bahawa tidak kira berapa banyak objek yang dicipta, hanya satu pembolehubah statik wujud, dan semua objek. kongsi pembolehubah Statik ini dan sebagainya.

Abstrak pengubah suai (abstrak) 1. Abstrak boleh mengubah suai kelas (1) Kelas yang diubah suai oleh abstrak dipanggil kelas abstrak (2) Sintaks: nama kelas abstractclass {} (3) Ciri: Kelas abstrak tidak boleh mencipta objek secara berasingan, tetapi mereka boleh diisytiharkan Rujukan nama rujukan kelas abstrak; (4) Kelas abstrak boleh mentakrifkan pembolehubah ahli dan kaedah ahli (5) Kelas abstrak mempunyai pembina Apabila digunakan untuk mencipta objek subkelas, jvm mencipta objek kelas induk secara lalai apply Digunakan apabila jvm mencipta objek kelas induk. 2. Abstrak boleh mengubah suai kaedah (1) Kaedah yang diubah suai oleh asbtract dipanggil kaedah abstrak (2) Sintaks: pengubah akses nilai pulangan abstrak

Springboot membaca fail pro dan menyuntik pembolehubah statik statik mailConfig.properties#Server mail.host=smtp.qq.com#Port number mail.port=587#Email account mail.userName=hzy_daybreak_lc@foxmail.com#Emel kod kebenaran mel. passWord =vxbkycyjkceocbdc#Masa kelewatan mail.timeout=25000#Pengirim mail.emailForm=hzy_daybreak_lc@foxmail.com#Pengirim mai

"statik" dalam kaedah statik statik php bermakna sifat dan kaedah ini boleh dipanggil terus tanpa membuat instantiating kelas adalah kata kunci yang digunakan untuk mengubah suai sifat dan kaedah kelas, dan sintaks penggunaannya adalah seperti "kelas Foo {; public static $my_static = 'hello';}".

PHP ialah bahasa skrip sebelah pelayan sumber terbuka yang popular digunakan secara meluas dalam pembangunan web. Bahasa PHP bukan sahaja mudah dipelajari dan digunakan, tetapi juga menyokong pelbagai paradigma pengaturcaraan, pengaturcaraan berorientasikan objek, pengaturcaraan berfungsi, dll. Dalam PHP, terdapat beberapa kata kunci sintaks khas, seperti Statik, Akhir, Abstrak, dll. Kata kunci ini mempunyai fungsi khas dalam pengaturcaraan berorientasikan objek. Artikel ini akan memperkenalkan kata kunci ini secara terperinci. Kata kunci statik Dalam PHP, kata kunci Statik mempunyai dua kegunaan
