PHP中什么是静态?深入了解静态属性和静态方法
本篇文章带大家了解一下PHP中的静态属性和静态方法,介绍一下静态的本质、静态变量和普通变量的区别,希望对大家有所帮助。
静态是什么?
我们之前讲到, 调用成员变量和方法, 都需要用到对象. 但如果我们不想实例化, 直接访问变量和方法呢? 这就用到了静态static功能.
在定义变量和方法的时候, 在前面加上static关键词, 就转化为了静态, 就可以通过类名::双引号直接进行访问.
我们继续将上面的例子改写为静态变量和静态方法:
class Classname //定义一个类, 类名不区分大小写 { static public $name; //定义静态成员变量; static public $height=180; //初始化赋值 static public $weight, $nationality; //可以一个语句定义多个变量 static protected $age; static public function player($name,$height, $weight, $age, $sex) { //定义静态成员方法, 以及方法形参 self::$name=$name; //为成员变量赋值, 使用了代词self:: self::$weight=$weight; self::$height=$height; if (self::$height<185 && self::$weight<=85){ return self::$name.',符合要求'; }else{ return self::$name.',不太行'; } } } echo Classname::$height; //180, 通过类名::访问静态变量 echo Classname::player('xiaoming',180,80,22, 'Male'); //通过类名::访问静态方法;
上面的例子可以注意到, 我将所有的$this都换成了self. 因为$this指代的是调用对象, 而self指代的方法所在的类本身. 静态方法可以通过类名::直接调用, 这里没有对象, \$this指代的就为空, 系统就会报错. 所以静态方法内调用变量, 不能通过$this.
注意self::后面的变量要有$符号.
静态的本质
不要小瞧这个static, 加上了它, 其实不只是可以直接调用这么简单, 成员变量和方法的意义发生了本质上的变化:
在静态方法中只能调用静态变量, 而不能调用普通变量, 普通方法则可以调用静态变量. 这是由静态方法的属性决定的, 因为普通的成员变量是与"对象"绑定的, 而静态变量是与"类"绑定的.
我再详细解释一下静态变量和普通变量的区别:
普通的成员变量与对象绑定, 不同的对象都有一套属于自己的成员变量. 不同对象的成员变量都有各自的赋值, 虽然有可能相同, 但你的就是你的.
静态变量是和类绑定的. 如果静态变量改变了, 那么这个类所有的对象中, 这个值都会发生改变.
静态变量也可以通过对象::来进行访问, 但其实同一个类的对象访问的其实都是同一个静态变量值. 可以理解为静态变量是整个类共享的, 包括它的子类.
所以即便其中一个对象被销毁了, 静态变量值还会保留.
子类也可以重写父类的静态成员变量, 但父类的静态变量依然存在, 这两个静态成员变量是独立的. 会根据调用的类名分别进行访问.
我们举个例子:
class Shouji { static public $test; //定义一个静态变量 static function test5() //定义静态方法来操作并输出静态变量 { self::$test++; echo self::$test; } } class Shouji2 extends Shouji //定义一个子类 { static function test5() //定义子类的静态方法 { self::$test++; //访问并操作父类的静态变量 echo self::$test; } } $shouji1=new Shouji; //新建父类对象 $shouji1->test5(); //1, 通过对象调用静态方法 $shouji2=new Shouji; //新建另一个父类对象 $shouji2->test5(); //2, 在前一次操作基础上继续+1 $shouji3=new Shouji2; //新建子类对象 $shouji3->test5(); //3, 调用子类同名静态方法, 继续+1 echo Shouji::$test; //3, 通过父类::直接访问静态成员变量 echo $shouji1::$test; //3, 通过对象名::可以直接访问静态成员变量
通过上面这个例子, 我们还能有以下几点总结:
子类可以重写父类的静态方法.
方法内访问静态变量需要用::符号. 不能用$this;
静态方法和静态变量都会被子类继承.
静态变量不能由->访问, 而是由 ::(双冒号)进行访问
对象可以通过对象名->来直接调用静态成员方法, 这个和调用普通方法是一样的.
本文转载自:https://juejin.cn/post/6977200691919978510
作者:传达室老大爷
推荐学习:《PHP视频教程》
Atas ialah kandungan terperinci PHP中什么是静态?深入了解静态属性和静态方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

AI Hentai Generator
Menjana ai hentai secara percuma.

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



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

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

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

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

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,

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

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
