Jadual Kandungan
静态也能调用非静态方法
非静态方法调用静态方法竟如此多娇
Rumah pembangunan bahagian belakang tutorial php PHP中静态与非静态的那些事情

PHP中静态与非静态的那些事情

Jun 13, 2016 pm 12:19 PM
function test this

PHP中静态与非静态的那些事儿

静态也能调用非静态方法

废话少说,直接看代码:

<code class="php hljs ">error_reporting(E_ALL);<span class="hljs-comment">// 将所有错误信息报出来</span><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test</span>{</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test1</span><span class="hljs-params">()</span>    {</span>        <span class="hljs-comment">//$this->test2();// 这样子肯定是报错的,静态方法不能使用$this</span>        <span class="hljs-comment">// 如果非要在这里调用test2(),可以使用以下方式,称为方式一</span>        <span class="hljs-variable">$instance</span> = <span class="hljs-keyword">new</span> Test();        <span class="hljs-variable">$instance</span>->test2();        <span class="hljs-comment">// 或者使用更简单的方式,称为方式二(PHP会给出调用警告)</span>        <span class="hljs-keyword">self</span>::test2();    }    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test2</span><span class="hljs-params">()</span>    {</span>        <span class="hljs-keyword">echo</span> <span class="hljs-string">'test static function'</span>;    }}Test::test1();</code>
Salin selepas log masuk

这里要说明几点,
1. 方式一这种就是说创建一个对象,然后来调用这个对象的方法,这个不冲突的。
2. 至于方式二为什么能够这么调用非静态方法,这个请参考鸟哥的一篇文章:PHP的Calling Scope
方式二,产生如下警告:
这里写图片描述
所有大家在实际的应用中, 大家 尽量要避免 使用”::”来调用一个非静态的方法。

非静态方法调用静态方法竟如此多娇

想想我也是醉了,竟然还能使用$this来调用非静态方法。且看代码:

<code class="php hljs ">error_reporting(E_ALL);<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test2</span>{</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test1</span><span class="hljs-params">()</span>    {</span>        <span class="hljs-keyword">echo</span> <span class="hljs-string">'good test<br />'</span>;    }    <span class="hljs-comment">// 大家可以想象这里我为什么不写test2()这个方法名呢?直接从1蹦跶到了3</span>    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test3</span><span class="hljs-params">()</span>    {</span>        <span class="hljs-keyword">self</span>::test1();<span class="hljs-comment">// 这个可以吧,没有问题</span>        <span class="hljs-keyword">static</span>::test1();<span class="hljs-comment">// 这个也不解释了</span>        <span class="hljs-variable">$this</span>->test1();<span class="hljs-comment">// 重点说说它</span>    }}<span class="hljs-variable">$Obj</span> = <span class="hljs-keyword">new</span> Test2();<span class="hljs-variable">$Obj</span>->test3();</code>
Salin selepas log masuk

写代码验证,这种$this竟然能够调用静态方法时,着实让我吃了一惊。仔细想想也是合理的,为什么合理?
且听小弟慢慢道来。

大家有没有这样调用过代码:

<code class="php hljs "><span class="hljs-variable">$obj</span> = <span class="hljs-keyword">new</span> Test2();<span class="hljs-variable">$obj</span>->test1();</code>
Salin selepas log masuk

OK,在php中可以使用静态方式调用非静态方法,也可以使用非静态方式调用静态方法。多公平的一种语言呀,真是爱(che)死(dan)你了!
如果你能够理解上面这种写法,相信对于 $this->test1() 应该也能理解了吧, $this 相当于当前调用的对象,可以理解为此处new出来的 $obj 。作为一个对象肯定是可以调用它内部的所有方法吧?不解释了,说多了都是废话。

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

Video Face Swap

Video Face Swap

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

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)

Jam pintar Huawei Watch GT 5 mendapat kemas kini dengan ciri baharu Jam pintar Huawei Watch GT 5 mendapat kemas kini dengan ciri baharu Oct 03, 2024 am 06:25 AM

Huawei sedang melancarkan perisian versi 5.0.0.100(C00M01) untuk Watch GT 5 dan Watch GT 5 Prosmartwatches di seluruh dunia. Kedua-dua jam tangan pintar ini baru-baru ini dilancarkan di Eropah, dengan model standard tiba sebagai model termurah syarikat. Harmoni ini

Mimpi Kolonel Sanders Tekken digoreng oleh KFC Mimpi Kolonel Sanders Tekken digoreng oleh KFC Oct 02, 2024 am 06:07 AM

Katsuhiro Harada, pengarah siri Tekken, pernah cuba membawa Kolonel Sanders ke dalam permainan pertempuran ikonik. Dalam temu bual dengan TheGamer, Harada mendedahkan bahawa dia mengemukakan idea itu kepada KFC Jepun, dengan harapan dapat menambah legenda makanan segera itu sebagai

Ulasan Cybertruck FSD memuji penukaran lorong cepat dan visualisasi skrin penuh Ulasan Cybertruck FSD memuji penukaran lorong cepat dan visualisasi skrin penuh Oct 01, 2024 am 06:16 AM

Tesla melancarkan versi Pemanduan Sendiri Penuh (Diawasi) terbaharu 12.5.5 dan dengannya disertakan pilihan Cybertruck FSD yang dijanjikan pada akhirnya, sepuluh bulan selepas pikap mula dijual dengan ciri yang disertakan dalam harga kemasan Siri Asas. F

Pandangan pertama: Video pembongkaran kotak yang bocor bagi pengecas dinding 140W 4-port Anker Zolo akan datang dengan paparan Pandangan pertama: Video pembongkaran kotak yang bocor bagi pengecas dinding 140W 4-port Anker Zolo akan datang dengan paparan Oct 01, 2024 am 06:32 AM

Terdahulu pada September 2024, pengecas Zolo 140W Anker telah bocor, dan ia adalah masalah besar kerana ia merupakan pengecas dinding pertama dengan paparan daripada syarikat itu. Kini, video unboxing baharu daripada Xiao Li TV di YouTube memberi kami pandangan pertama tentang hi

Garmin mengeluarkan peningkatan aktiviti Adventure Racing untuk berbilang jam tangan pintar melalui kemas kini baharu Garmin mengeluarkan peningkatan aktiviti Adventure Racing untuk berbilang jam tangan pintar melalui kemas kini baharu Oct 01, 2024 am 06:40 AM

Garmin mengakhiri bulan ini dengan set kemas kini stabil baharu untuk jam tangan pintar mewah terbaharunya. Untuk mengimbas kembali, syarikat itu mengeluarkan Perisian Sistem 11.64 untuk memerangi kehabisan bateri yang tinggi merentasi Enduro 3, Fenix ​​E dan Fenix ​​8 (sekira $1,099.99 di Amazon).

Pemanas Minyak Xiaomi Mijia Graphene baharu dengan HyperOS tiba Pemanas Minyak Xiaomi Mijia Graphene baharu dengan HyperOS tiba Oct 02, 2024 pm 09:02 PM

Xiaomi akan melancarkan Pemanas Minyak Mijia Graphene sebentar lagi di China. Syarikat itu baru-baru ini menjalankan kempen crowdfunding yang berjaya untuk produk rumah pintar, dihoskan pada platform Youpinnya. Menurut halaman tersebut, peranti telah mula dihantar ke

Samsung Galaxy Z Fold Edisi Khas didedahkan untuk mendarat pada akhir Oktober apabila nama yang bercanggah muncul Samsung Galaxy Z Fold Edisi Khas didedahkan untuk mendarat pada akhir Oktober apabila nama yang bercanggah muncul Oct 01, 2024 am 06:21 AM

Pelancaran peranti lipat 'Edisi Khas' Samsung yang telah lama ditunggu-tunggu telah mengambil satu kelainan lagi. Dalam beberapa minggu kebelakangan ini, khabar angin mengenai apa yang dipanggil Galaxy Z Fold Edisi Khas menjadi agak senyap. Sebaliknya, tumpuan telah beralih kepada siri Galaxy S25, termasuk

Manjaro 24.1 \'Xahea\' dilancarkan dengan KDE Plasma 6.1.5, VirtualBox 7.1 dan banyak lagi Manjaro 24.1 \'Xahea\' dilancarkan dengan KDE Plasma 6.1.5, VirtualBox 7.1 dan banyak lagi Oct 02, 2024 am 06:06 AM

Dengan sejarah lebih satu dekad, Manjaro dianggap sebagai salah satu distro Linux yang paling mesra pengguna yang sesuai untuk pemula dan pengguna berkuasa, kerana mudah dipasang dan digunakan. Kebanyakannya dibangunkan di Austria, Jerman dan Perancis, distro berasaskan Arch ini

See all articles