ホームページ >バックエンド開発 >PHPチュートリアル >PHP でのこの self static の使用法の違い

PHP でのこの self static の使用法の違い

零到壹度
零到壹度オリジナル
2018-04-08 15:27:061523ブラウズ

この記事ではPHPにおけるこのself staticとの違いを中心に紹介していますが、編集者がとても良いと思ったので、参考として共有させていただきます。編集者をフォローして見に来てみましょう

はじめに

最近、私はソフトウェアエンジニアリングコースの設計を行っていましたが、Laravelのソースコードを掘り起こして再度検索したところ、問題が発生したことがわかりました。 self static について深く理解しているため、問題が発生したので、同じ間違いを繰り返さないように書き留めてください。

Text

this

これは、現在のオブジェクトを指し、現在のオブジェクトの非静的変数と非静的メソッドにアクセスするために使用されます。

<?php
class Person {
    public $name;    
    
    public function getName() {
        echo $this->name;
    }
}

$p = new Person();
$p2 = new Person();
$p->name = "小红";
$p2->name = "小明";
$p->getName();  // 小红
$p2->getName();  // 小明

。上記の例では、2 つのオブジェクトが new であり、それぞれのオブジェクトの name 属性を設定します。これは、現在のオブジェクトの name 属性にアクセスするために使用されます。そのため、name の値がそれぞれ出力されます。したがって、これは現在のオブジェクトを指し、他のオブジェクトやクラスを指しません。

self

self は、クラス自体を指し、インスタンス化されたオブジェクトを指すのではなく、通常、クラス内の静的変数と静的メソッドにアクセスするために使用されます。 2 つのオブジェクトが追加および変更されます。一方のオブジェクトの name 属性ともう一方のオブジェクトの name 属性値も変更されます。したがって、self は現在のクラスを指し、すべてのオブジェクトが同じ値を共有します。

static

static は self と同じで、どちらもクラスを指し、通常はクラス内の静的変数と静的メソッドにアクセスするために使用されますが、いくつかの違いがあります。具体的には、どのクラスに self が記述されるか、どのクラスであるかです。実際にはこのクラスと呼ばれます。静的は親クラスで記述され、この静的はサブクラスを介して使用されます。これは正式には

late static binding

と呼ばれます。

<?php
class Person {
    public static $name = "小红";    
    
    public static function getName() {
        echo self::$name;
    }
}

$p = new Person();
$p2 = new Person();
$p::getName();  // 小红
$p2::getName();  // 小红
$p::$name = "小明";
$p::getName();  // 小明
$p2::getName();  // 小明
上記の例からわかるように、self はクラス A で書かれており、呼び出されるときはクラス A を指します。 static もクラス A で書かれていますが、クラス B のオブジェクトで呼び出された場合、クラス B のサブクラスクラス A はクラス A を指します。クラス B を使用する場合、static はそれが指すクラスを決定します。これが

遅延静的バインディング

です。 後の静的バインディング

概要

this は現在のオブジェクトを指し、現在のオブジェクトの非静的変数と非静的メソッドにアクセスするために使用されます。

self はクラスを指し、通常は静的変数と静的メソッドにアクセスするために使用されます。実行前に、現在のクラスのどのクラスを指すかが決定されています。

static は、通常、現在のクラスの静的変数および静的メソッドにアクセスするために使用されるクラスを指しますが、
静的呼び出しに限定されません。実行時にどのクラスを指すかが決まります。

以上がPHP でのこの self static の使用法の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。