何人かの友人がそう言いました。もちろん、クラス A をまったくインスタンス化していないので、$this->_name を使用してメンバー変数 $_name に直接アクセスすることはできません。では、それを self::$_name に変更するだけでよいでしょうか。
function test(){
echo 'A test()
', self::$_name,'
'
}
}
class B extends A{
private $ _name = '; B';
function __construct(){
parent::__construct();
echo 'B コンストラクト
';
function test(){
echo 'B test()'; >_name,'
';
}
}
echo '#########
'; ();
上記のコードを再度実行すると、結果は次のようになります:
コードをコピーします
コードは次のとおりです:
A test() 致命的なエラー: 未宣言の静的プロパティへのアクセス: A ::$_name (D:wwwtestscoperefe.php の 9 行目)
ああ、現在のクラスの非静的メソッドにアクセスするために self キーワードを使用することはできないことがわかりました。
このメソッドを正しく呼び出すには、次の 2 つの方法があります:
1. まずクラスをインスタンス化し、次に $this->_name; を使用してオブジェクトを直接呼び出します。
2. メンバー変数 $ を変更します。 _name 静的に設定します
上記の問題は誰でも正しく処理できると思います。
実際、私が本当に言いたいことは次のとおりです:
インスタンス化せずにメソッドを呼び出せる場合は、このメソッドを static キーワードで変更した方がよいでしょう。メソッドを実装するときは、クラスの静的メンバー変数のみが呼び出されます。このようにすれば、上記の問題は発生しません。
メソッドが静的メソッドに設定されていない場合。その場合、最も安全な方法は、インスタンス オブジェクトを使用して呼び出すことです。メソッドの実装を変更するときに、
非静的メンバーを呼び出す必要がある場合があるためです。クラス内の変数 (メソッドの実装を変更するときに、クラス名を使用した直接呼び出しなどがあることをかなり忘れていたためです)。
個人的な謙虚な意見。
http://www.bkjia.com/PHPjc/322188.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/322188.html技術記事スコープ解決演算子 (::) 今日、joomla のソースコードを見ていて気づきました。この演算子はクラスの非静的メソッドにもアクセスできることがわかりました。本当に驚きません。いつも思ってた…