PHP の静的および非静的もの
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>
ここで説明する点がいくつかあります。
1. メソッド 1 は、オブジェクトを作成し、そのオブジェクトのメソッドを呼び出すことを意味します。これは競合しません。
2. メソッド 2 がこのように非静的メソッドを呼び出せる理由については、Brother Niao の記事「PHP の呼び出しスコープ」を参照してください。
メソッド 2 では次の警告が生成されます:
すべて 実際のアプリケーションでは、「::」を使用して非静的メソッドを呼び出す を回避しようとします。
非静的メソッドから静的メソッドを呼び出すのはとても簡単です
それについて考えるととても酔ってしまいますが、$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>
検証するコードを書いた後、$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>
OK、PHP では、静的メソッドを使用して非静的メソッドを呼び出すことができます。また、非静的メソッドを使用して呼び出すこともできます。静的メソッド。なんて公平な言葉だ、私は本当にあなた(チェ)を死ぬほど愛しています(ダン)!
上記の書き方が理解できれば、$this->test1()
が現在の呼び出しのオブジェクトに相当し、ここでは新しい$this
と理解できると思います。オブジェクトとして、その中のすべてのメソッドを呼び出すことができなければなりませんよね?説明しなければ、それはすべてナンセンスです。 $obj

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ファーウェイは、Watch GT 5 および Watch GT 5 Pro スマートウォッチ用のソフトウェア バージョン 5.0.0.100(C00M01) をグローバルに展開しています。これら 2 つのスマートウォッチは最近ヨーロッパで発売され、標準モデルが同社の最も安価なモデルとして登場しました。このハーモニー

『鉄拳』シリーズのディレクターである原田勝弘氏は、かつて真剣にカーネル・サンダースを象徴的な格闘ゲームに登場させようとした。 TheGamerとのインタビューで原田氏は、このアイデアを日本KFCに売り込み、ファストフード界のレジェンドをGとして追加したいと考えていたことを明かした。

テスラは最新の完全自動運転 (監視付き) バージョン 12.5.5 を展開しており、これには、ファウンデーション シリーズのトリム価格に含まれる機能を備えたピックアップが発売されてから 10 か月後に、約束されていたサイバートラック FSD オプションがついに付属します。 F

2024年9月初め、AnkerのZolo 140W充電器がリークされました。これは同社初のディスプレイ付き壁掛け充電器だったため、大きな話題になりました。 YouTube の Xiao Li TV からの新しい開封ビデオでは、この製品を直接見ることができます。

Garmin は、最新のハイエンド スマートウォッチの新しい安定したアップデートのセットで月末を迎えます。要約すると、同社は Enduro 3、Fenix E、および Fenix 8 のバッテリー消耗の多さに対処するためにシステム ソフトウェア 11.64 をリリースしました (Amazon で現在 1,099.99 ドル)。

Xiaomiは間もなくMijiaグラフェンオイルヒーターを中国で発売する予定です。同社は最近、Youpin プラットフォームでホストされるスマート ホーム製品のクラウドファンディング キャンペーンを実施し、成功を収めました。ページによると、デバイスはすでに出荷され始めています

サムスンの待望の折りたたみ式「スペシャルエディション」の発売には、また新たな展開が加わった。ここ数週間、いわゆる Galaxy Z Fold Special Edition に関する噂はかなり静かになりました。代わりに、焦点はGalaxy S25シリーズに移りました。

10 年以上の歴史を持つ Manjaro は、インストールと使用が簡単で、初心者とパワーユーザーの両方に適した最もユーザーフレンドリーな Linux ディストリビューションの 1 つとみなされています。主にオーストリア、ドイツ、フランスで開発されたこの Arch ベースのディストリビューション
