0

PHPチュートリアルを行っていて、このコードを見つけました

Class Insurance
{
   function clsName()
   {
      echo get_class($this)."\n";
   }
}


$cl = new Insurance();
$cl->clsName();
Insurance::clsName();

herefunction clsName()のインスタンスを作成せずにアクセスしますInsuarance

Insurance::clsName();

しかし、定義から

スコープ解決演算子 (Paamayim Nekudotayim とも呼ばれます) または簡単に言えば、二重コロンは、クラスの静的、定数、およびオーバーライドされたプロパティまたはメソッドへのアクセスを許可するトークンです。

これらの項目をクラス定義の外から参照する場合は、クラスの名前を使用してください。

http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php

Web で検索しましたが、このコードが機能している理由について適切な説明が見つかりませんでしたか? 説明してください。

4

1 に答える 1

1

エラー報告 E_ALL で実行すると:

Insurance
<br />
<b>Strict Standards</b>:  Non-static method Insurance::clsName() should not be called statically in <b>[...][...]</b> on line <b>12</b><br />
<br />
<b>Notice</b>:  Undefined variable: this in <b>[...][...]</b> on line <b>5</b><br />
Insurance

問題は、なぜそれがまだ機能しているのかということです。ご覧の通り「保険」が表示されました。

When you do echo get_class($this)."\n"; when you call in a static context, PHP will run it like echo get_class(null)."\n";.

And if you read the behavior of get_class http://php.net/manual/en/function.get-class.php, The class is recognized because the function was call inside the class.

于 2015-02-12T16:30:33.510 に答える