ホームページ  >  記事  >  バックエンド開発  >  PHP クラスの静的呼び出しとインスタンス化された呼び出しの違いは何ですか?

PHP クラスの静的呼び出しとインスタンス化された呼び出しの違いは何ですか?

烟雨青岚
烟雨青岚オリジナル
2020-06-30 15:58:383380ブラウズ

相違点: 1. 静的メソッドはプログラムの開始時にメモリを生成し、インスタンス メソッドはプログラムの実行中にメモリを生成します; 2. 静的メソッドは直接呼び出すことができ、インスタンス メソッドは最初にインスタンスを生成する必要があります。 ; 3. 静的メモリは連続的であり、インスタンスは離散空間に適用されるため、静的メソッドほど高速ではなく、静的メモリには制限があります。

PHP クラスの静的呼び出しとインスタンス化された呼び出しの違いは何ですか?

静的メソッドは 1 つだけ、何度呼び出しても共有される、オブジェクトの概念がない , そのため、静的に使用することはできません。メソッド内で $this を使用して呼び出します。呼び出す必要がある場合は、独自のクラスのみをインスタンス化できます。

インスタンス化は異なります。各インスタンス化はオブジェクトであり、複数。

例を使って理解しましょう

<?php
Error_reporting(E_ALL|E_STRICT);
 
class A{
    
    public function bar(){
        echo &#39;bar&#39;.PHP_EOL;
    }
    public static function foo(){
        echo &#39;foo&#39;.PHP_EOL;
    }
}
 
A::bar();//会报错
A::foo();//正确
$obj = new A();
$obj -> foo();//正确
/* 
  bar()是一个非静态方法,应该由对象来调用,但用静态来调用此方法也可以执行,而严格状态下,此方法会执行,同时报错, 
  Strict Standards: Non-static method Human::easyeat() should not be called statically in........
  但是实例化的类是可以调用静态方法的。
*/
<?php
 
class A{
    public $name = &#39;kangbazi&#39;;
 
    public function bar(){
        echo &#39;bar&#39;.PHP_EOL;
    }
    public static function foo(){
        echo self::$name.PHP_EOL;//报错
    }
}
 
A::foo();
 
/*
    静态方法不能调用非静态属性 。不能使用self::调用非静态属性。
*/

短い要約を作成します:

最大の違いは記憶力です。

静的メソッドはプログラムの開始時にメモリを生成し、インスタンス メソッドはプログラムの実行中にメモリを生成します。

したがって、静的メソッドは直接呼び出すことができます。 , インスタンス メソッドはまずインスタンスを生成し、そのインスタンスを通じてメソッド を呼び出す必要があります。静的速度は非常に高速ですが、あまりにも高速すぎるとメモリを占有します。

どんな言語もメモリとディスク上で動作しますが、それがオブジェクト指向かどうかはソフトウェア層の問題であり、最下層は同じですが実装方法が異なります。

#静的メモリはプログラムの先頭で生成されるため連続的であり、インスタンスは離散空間に適用されるため、当然ながら静的メソッドほど高速ではありません。

そして

静的メモリは限られています 、多すぎるとプログラムは起動できません。

推奨チュートリアル:「

php チュートリアル

以上がPHP クラスの静的呼び出しとインスタンス化された呼び出しの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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