Inhaltsverzeichnis
静态也能调用非静态方法
非静态方法调用静态方法竟如此多娇
Heim Backend-Entwicklung PHP-Tutorial 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>
Nach dem Login kopieren

这里要说明几点,
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>
Nach dem Login kopieren

写代码验证,这种$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>
Nach dem Login kopieren

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Smartwatch Huawei Watch GT 5 erhält ein Update mit neuen Funktionen Die Smartwatch Huawei Watch GT 5 erhält ein Update mit neuen Funktionen Oct 03, 2024 am 06:25 AM

Huawei führt weltweit die Softwareversion 5.0.0.100 (C00M01) für die Smartwatches Watch GT 5 und Watch GT 5 Pro ein. Diese beiden Smartwatches wurden kürzlich in Europa eingeführt, wobei das Standardmodell das günstigste Modell des Unternehmens ist. Diese Harmonie

Tekkens Colonel Sanders-Traum von KFC gebraten Tekkens Colonel Sanders-Traum von KFC gebraten Oct 02, 2024 am 06:07 AM

Katsuhiro Harada, der Regisseur der Tekken-Serie, versuchte einst ernsthaft, Colonel Sanders in das legendäre Kampfspiel einzubeziehen. In einem Interview mit TheGamer verriet Harada, dass er die Idee dem KFC Japan vorstellte, in der Hoffnung, die Fast-Food-Legende als Gast hinzuzufügen

Die Bewertungen von Cybertruck FSD loben den schnellen Spurwechsel und die Vollbildvisualisierung Die Bewertungen von Cybertruck FSD loben den schnellen Spurwechsel und die Vollbildvisualisierung Oct 01, 2024 am 06:16 AM

Tesla bringt die neueste Version 12.5.5 des vollständig autonomen Fahrens (Supervised) auf den Markt und bringt damit endlich die versprochene Cybertruck-FSD-Option mit, zehn Monate nachdem der Pickup mit der im Ausstattungspreis der Foundation Series enthaltenen Funktion in den Verkauf ging. F

Erster Blick: Durchgesickertes Unboxing-Video des kommenden Anker Zolo 4-Port 140W Wandladegeräts mit Display Erster Blick: Durchgesickertes Unboxing-Video des kommenden Anker Zolo 4-Port 140W Wandladegeräts mit Display Oct 01, 2024 am 06:32 AM

Anfang September 2024 wurde das 140-W-Ladegerät Zolo von Anker durchgesickert, und das war eine große Sache, da es sich um das erste Wandladegerät mit Display des Unternehmens überhaupt handelte. Jetzt gibt uns ein neues Unboxing-Video von Xiao Li TV auf YouTube einen ersten Blick auf den Hi

Der neue Xiaomi Mijia Graphene Oil Heater mit HyperOS ist da Der neue Xiaomi Mijia Graphene Oil Heater mit HyperOS ist da Oct 02, 2024 pm 09:02 PM

Xiaomi wird in Kürze den Mijia Graphene Oil Heater in China auf den Markt bringen. Das Unternehmen führte kürzlich eine erfolgreiche Crowdfunding-Kampagne für das Smart-Home-Produkt durch, die auf seiner Youpin-Plattform gehostet wurde. Laut der Seite hat der Versand des Geräts bereits begonnen

Garmin veröffentlicht über ein neues Update Verbesserungen der Adventure Racing-Aktivität für mehrere Smartwatches Garmin veröffentlicht über ein neues Update Verbesserungen der Adventure Racing-Aktivität für mehrere Smartwatches Oct 01, 2024 am 06:40 AM

Garmin beendet den Monat mit einer Reihe neuer stabiler Updates für seine neuesten High-End-Smartwatches. Um es noch einmal zusammenzufassen: Das Unternehmen hat die Systemsoftware 11.64 veröffentlicht, um den hohen Batterieverbrauch bei Enduro 3, Fenix ​​E und Fenix ​​8 zu bekämpfen (aktuell 1.099,99 $ bei Amazon).

Die Samsung Galaxy Z Fold Special Edition soll Ende Oktober erscheinen, da ein widersprüchlicher Name auftaucht Die Samsung Galaxy Z Fold Special Edition soll Ende Oktober erscheinen, da ein widersprüchlicher Name auftaucht Oct 01, 2024 am 06:21 AM

Die Einführung des lang erwarteten faltbaren „Special Edition“-Modells von Samsung hat eine weitere Wendung genommen. In den letzten Wochen verliefen die Gerüchte um die sogenannte Galaxy Z Fold Special Edition eher ruhig. Stattdessen hat sich der Fokus auf die Galaxy S25-Serie verlagert, darunter

Manjaro 24.1 „Xahea' startet mit KDE Plasma 6.1.5, VirtualBox 7.1 und mehr Manjaro 24.1 „Xahea' startet mit KDE Plasma 6.1.5, VirtualBox 7.1 und mehr Oct 02, 2024 am 06:06 AM

Mit einer Geschichte von über einem Jahrzehnt gilt Manjaro als eine der benutzerfreundlichsten Linux-Distributionen, die sowohl für Anfänger als auch für Power-User geeignet ist und einfach zu installieren und zu verwenden ist. Diese Arch-basierte Distribution wurde hauptsächlich in Österreich, Deutschland und Frankreich entwickelt

See all articles