ホームページ バックエンド開発 PHPチュートリアル お兄さん、とても混乱しているようです

お兄さん、とても混乱しているようです

Jun 13, 2016 pm 01:23 PM
method protected quot static

とても混乱しています

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php

class cA
{
    /**
     * Test property for using direct default value
     */
    protected static $item = 'Foo';
    
    /**
     * Test property for using indirect default value
     */
    protected static $other = 'cA';
    
    public static function method()
    {
        print self::$item."\r\n"; // It prints 'Foo' on everyway... :(
        print self::$other."\r\n"; // We just think that, this one prints 'cA' only, but... :)
    }
    
    public static function setOther($val)
    {
        self::$other = $val; // Set a value in this scope.
    }
}

class cB extends cA
{
    /**
     * Test property with redefined default value
     */
    protected static $item = 'Bar';
    
    public static function setOther($val)
    {
        self::$other = $val;
    }
}

class cC extends cA
{
    /**
     * Test property with redefined default value
     */
    protected static $item = 'Tango';
    
    public static function method()
    {
        print self::$item."\r\n"; // It prints 'Foo' on everyway... :(
        print self::$other."\r\n"; // We just think that, this one prints 'cA' only, but... :)
    }
    
    /**
     * Now we drop redeclaring the setOther() method, use cA with 'self::' just for fun.
     */
}

class cD extends cA
{
    /**
     * Test property with redefined default value
     */
    protected static $item = 'Foxtrot';
    
    /**
     * Now we drop redeclaring all methods to complete this issue.
     */
}

cB::setOther('cB'); // It's cB::method()!
cB::method(); // It's cA::method()!
cC::setOther('cC'); // It's cA::method()!
cC::method(); // It's cC::method()!
cD::setOther('cD'); // It's cA::method()!
cD::method(); // It's cA::method()!

/**
 * Results: ->
 * Foo
 * cB
 * Tango
 * cC
 * Foo
 * cD
 * 
 * What the hell?! :)
 */

?>
ログイン後にコピー



これは上書きですか?なぜこのような出力になるのでしょうか? わかりにくいです。

-----解決策--------------------------------
これは何と呼ばれますか?トラブルを求めています!
疲れるのは疲れる
------解決策----------------------
理解できない場合は忘れてください、理解できません関係ないよ。
------解決策---------
話し合う

これは何と呼ばれますか?餃子を焼くとトラブルが起きる!
疲れるには疲れる

------解決策---------
これはより明確かもしれません
PHP コード
クラスcA
{
    /*** 直接デフォルト値を使用するためのテスト プロパティ
     * 直接のデフォルト値を使用してプロパティをテストする*/
    protected static $item = 'Foo';
    
    /*** 間接的なデフォルト値を使用するためのテスト プロパティ
     * 間接的なデフォルト値を使用してプロパティをテストする*/
    protected static $other = 'cA';
    
    パブリック静的関数メソッド()
    {
        __METHOD__ . ' ' . __CLASS__ . self::$item."rn";
        __METHOD__ . ' ' . __CLASS__ . self::$other."rn";
    }
    
    パブリック静的関数 setOther($val)
    {
        self::$other = $val; // このスコープに値を設定します。
    }
}

クラス cB は cA を拡張します
{
    /*** 再定義されたデフォルト値を使用してプロパティをテストします
     * デフォルト値のテスト属性を再定義しました*/
    protected static $item = 'Bar';
    
    パブリック静的関数 setOther($val)
    {
        self::$other = $val;
    }
}

クラス cC は cA を拡張します
{
    /*** 再定義されたデフォルト値を使用してプロパティをテストします
     * デフォルト値のテスト属性を再定義しました*/
    protected static $item = 'Tango';
    
    パブリック静的関数メソッド()
    {
        __METHOD__ . ' ' . __CLASS__ . self::$item."rn";
        __METHOD__ . ' ' . __CLASS__ . self::$other."rn";
    }
    
    /*** setOther() メソッドの再宣言を削除し、楽しみのために cA を 'self::' とともに使用します。*/
}

クラス cD は cA を拡張します
{
    /*** 再定義されたデフォルト値を使用してプロパティをテストします
     * デフォルト値のテスト属性を再定義しました*/
    protected static $item = 'フォックストロット';
    
    /*** この問題を解決するために、すべてのメソッドの再宣言を削除します。
     * この問題を解決するために、すべての再宣言方法を放棄します。*/
}

cB::setOther('cB'); // cB::method() です!
cB::method(); // cA::method() です!
cC::setOther('cC'); // cA::method() です!
cC::method(); // cC::method() です!
cD::setOther('cD'); // cA::method() です!
cD::method(); // cA::method() です!
 <div class="clear"></div>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP 致命的エラーの解決策: メンバー関数 fetch() の呼び出し PHP 致命的エラーの解決策: メンバー関数 fetch() の呼び出し Jun 23, 2023 am 09:36 AM

Web アプリケーション開発に PHP を使用する場合、多くの場合データベースを使用する必要があります。データベースを使用すると、エラー メッセージがよく発生します。その中でも、PHPFatalerror: Calltoamemberfunctionfetch() は、PDO を使用してデータベースをクエリするときに発生する比較的一般的なエラーです。では、このエラーの原因と解決方法は何でしょうか?この記事ではそれについて詳しく説明します。 1. エラーの原因

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

C言語におけるstaticの機能と使い方は何ですか? C言語におけるstaticの機能と使い方は何ですか? Jan 31, 2024 pm 01:59 PM

C 言語における static の役割と使用法: 1. 変数スコープ; 2. ライフサイクル; 3. 内部関数; 4. グローバル変数の変更; 5. 関数の変更; 6. その他の用途; 詳細な紹介: 1. 変数スコープの場合変数の前に static キーワードがある場合、変数のスコープは、変数が宣言されているファイルに制限されます。言い換えると、変数は「ファイル レベルのスコープ」であり、「」の発生を防ぐのに非常に役立ちます。変数の重複定義問題; 2. ライフサイクル、静的変数はプログラム実行開始時に一度初期化され、プログラム終了時に破棄されるなど。

Java で static、this、super、final を使用する方法 Java で static、this、super、final を使用する方法 Apr 18, 2023 pm 03:40 PM

1. static まず次のプログラムを見てください: publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}}セグメント プログラムは、Java を学習したことのあるほとんどの人には馴染みのあるものです。 Java を学習したことがなくても、C などの他の高級言語を学習したことがある場合でも、このコードの意味は理解できるはずです。これは単に「Hello, world」を出力するだけであり、他に用途はありませんが、静的キーワードの主な目的を示しています。

静電気の役割 静電気の役割 Jan 24, 2024 pm 04:08 PM

static の機能: 1. 変数; 2. メソッド; 3. クラス; 4. その他の用途; 5. マルチスレッド環境; 6. パフォーマンスの最適化; 7. シングルトン モード; 8. 定数; 9. ローカル変数; 10.メモリ レイアウトの最適化; 11. 繰り返しの初期化を避ける; 12. 関数で使用する。詳細な紹介: 1. 変数、静的変数 変数が静的として宣言されると、その変数はインスタンス レベルではなくクラス レベルに属します。つまり、オブジェクトがいくつ作成されても、静的変数は 1 つだけ存在し、すべてのオブジェクトが存在します。この静的変数などを共有します。

C言語のstaticキーワードの実践的な応用シナリオと使用スキル C言語のstaticキーワードの実践的な応用シナリオと使用スキル Feb 21, 2024 pm 07:21 PM

C 言語の static キーワードの実践的な応用シナリオと使用スキル 1. 概要 static は C 言語のキーワードであり、変数や関数を変更するために使用されます。その機能は、プログラムの実行中にライフサイクルと可視性を変更し、変数と関数を静的にすることです。この記事では、static キーワードの実際のアプリケーション シナリオと使用テクニックを紹介し、具体的なコード例を通じて説明します。 2. 静的変数により変数のライフ サイクルが延長される static キーワードを使用してローカル変数を変更すると、変数のライフ サイクルを延長できます。

Java では、トップレベルのクラスを protected または private として宣言できますか? Java では、トップレベルのクラスを protected または private として宣言できますか? Sep 12, 2023 pm 07:21 PM

いいえ、トップレベルのクラスをプライベートまたは保護されたものとして宣言することはできません。 public またはデフォルト (修飾子なし) にすることができます。修飾子がない場合は、デフォルトのアクセス権が存在する必要があります。構文 //Atoplevelclass publicclassTopLevelClassTest{ //Classbody} 最上位クラスが private として宣言されている場合、コンパイラはエラーを報告し、「修飾子 private はここでは使用できません。」というプロンプトを表示します。これは、トップレベルのクラスをプライベートにすることはできないことを意味し、保護されたアクセスにも同じことが当てはまります。

jQueryでPOSTリクエストメソッドを使用する方法 jQueryでPOSTリクエストメソッドを使用する方法 Feb 28, 2024 pm 09:03 PM

jQuery で POST リクエスト メソッドを使用する方法 Web 開発では、フロントエンド ページとバックエンド サーバー間のデータ対話が頻繁に発生します。中でも POST リクエストはよく使われるメソッドで、POST リクエストを通じてバックエンドサーバーにデータを送信し、対応する戻り結果を取得できます。 jQuery は、AJAX リクエストを行うための便利な方法を提供する人気のある JavaScript ライブラリです。この記事では、jQuery で POST メソッドを使用してデータを送信する方法と具体的な手順を紹介します。

See all articles