スコープ解決演算子 (::)
今日 joomla のソースコードを見ていて気づきました。この演算子はクラスの非静的メソッドにもアクセスできることがわかりました。本当に驚きません。私は常に、スコープ解決演算子はクラスの静的メソッドと静的メンバー変数にのみアクセスできると考えていました。
信じられない方は、これを証明できる簡単なテスト コードを次に示します。
コードをコピーします コードは次のとおりです。
class A{
private $_name = 'A'; 🎜>function __construct(){
echo 'A コンストラクト
';
}
function test(){
echo 'A test()
' ;
}
}
クラス B は A{
private $_name = 'B'
function __construct(){
parent::__construct(); 'B コンストラクト
';
}
関数 test(){
echo 'B test()';
}
}
A::test( );
echo '#########
';
このコードを入力した結果は次のとおりです。 :
コードをコピー
コードは次のとおりです: A test()
##### ##B test()
クラス A の test() とクラス B の test は静的メソッドではありませんが、「クラス名::メソッド」の形式で実行できます。 name (パラメータリスト)」 正しい呼び出しです。その効果は、クラスのインスタンスを新規作成し、このインスタンスを使用して
test メソッドを呼び出すのと同じです。
コードをコピーします
コードは次のとおりです。 class A{
private $_name = 'A'; 🎜>function __construct(){echo 'A コンストラクト
';
}
function test(){
echo 'A test()
' , $this ->$_name,'
'
}
}
クラス B は A{
private $_name = 'B'; __construct (){
parent::__construct();
echo 'B コンストラクト
';
}
関数 test(){
echo 'B test()' , $this ->_name,'
'
}
}
A::test(); echo '######### ';
B::test();
上記のコードを実行した結果は次のとおりです:
コピーcode
コードは次のとおりです:
致命的エラー: D:wwwtestscoperefe.php の 9 行目でオブジェクト コンテキストにないときに $this を使用します [html] _name を使用してメンバー変数 $_name に直接アクセスすることはできません。では、それを self::$_name に変更するだけでよいでしょうか。 上記のコードを以下のように変更してください[code]
class A{private $_name = 'A';
function __construct(){
echo 'A コンストラクト
';
}
function test(){
echo 'A test()
', self::$_name,'
';
}
}
クラス B は A{
private $_name = 'B';
function __construct(){
parent::__construct(); echo 'B コンストラクト
';
}
function test(){
echo 'B test()', $this->_name,'
' ;
}
}
A::test();
echo '#########
'; ;
上記のコードを再度実行すると、結果は次のようになります:
コードをコピーします
コードは次のとおりです:
test() 致命的エラー: 未宣言の静的プロパティへのアクセス: A::$_name (D:wwwtestscoperefe.php の 9 行目)
ああ、それ現在のクラスの非静的メソッドにアクセスするにはセルフキーを使用できないことがわかります。 このメソッドを正しく呼び出すには、次の 2 つの方法があります。1. まずクラスをインスタンス化し、次に $this->_name を使用してオブジェクトを直接呼び出します。 、メンバー変数 $_name を static に設定します。
誰もが上記の問題を正しく処理できると思います。
実際、私が本当に言いたいことは次のとおりです:
メソッドが静的に設定されていない場合。その場合、最も安全な方法は、インスタンス オブジェクトを使用して呼び出しを行うことです。メソッドの実装を変更する場合、クラスの
非静的メンバーが必要になる場合があるため、より安全です。変数 (メソッドの実装を変更するときに、クラス名を使用して直接呼び出すことをほとんど忘れているため)。
私の謙虚な意見。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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