ホームページ >バックエンド開発 >PHPチュートリアル >PHP の static キーワードが変数と関数に与える影響_PHP チュートリアル

PHP の static キーワードが変数と関数に与える影響_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:49:351097ブラウズ

php では、static は関数を定義できます。では、関数または変数の前に static を追加すると、関数と変数にどのような影響があるでしょうか。


1) グローバル変数 (外部変数) の記述の前に static を付けて、静的グローバル変数を構成します。グローバル変数自体は静的格納メソッドであり、静的グローバル変数も当然静的格納メソッドです。 どちらも保存方法に違いはありません。両者の違いは、非静的グローバル変数の有効範囲がソースプログラム全体であることです。ソースプログラムが複数のソースファイルで構成されている場合、非静的グローバル変数は各ソースファイルで有効になります。 静的グローバル変数はスコープを制限します。つまり、変数が定義されているソース ファイル内でのみ有効であり、同じソース プログラム内の他のソース ファイルでは使用できません。静的グローバル変数のスコープは 1 つのソース ファイルに限定され、そのソース ファイル内の関数でのみ共有できるため、他のソース ファイルでのエラーを回避できます。

2) 上記の分析から、ローカル変数を静的変数に変更すると、その保存方法が変更され、その有効期間が変更されることがわかります。グローバル変数を静的変数に変更すると、そのスコープが変更され、その使用範囲が制限されます。

3) 静的関数のスコープは、このファイル内のみで通常の関数とは異なります。現在のソースファイル内でのみ使用される関数は内部関数(static)として宣言し、内部関数を現在のソースファイル内に記述して定義する必要があります。現在のソースファイルの外で使用できる関数については、ヘッダーファイルに記述する必要があります。これらの関数を使用するソースファイルには、このヘッダーファイルが含まれている必要があります


PHP5.3.0 以降では、変数を使用してクラスを動的に呼び出すことができます。ただし、この変数の値をキーワード self、parent、または static にすることはできません。

例 #1 静的メンバーのコード例

コードは次のとおりです コードをコピー


クラスフー
{
パブリック静的 $my_static = 'foo';

パブリック関数 staticValue() {
return self::$my_static;
}
}

クラス Bar は Foo を拡張します
{
パブリック関数 fooStatic() {
親を返す::$my_static;
}
}


print Foo::$my_static . " ";

$foo = 新しい Foo();
print $foo->staticValue() " ";
print $foo->my_static . " ";

$foo::$my_static を印刷します。 $classname = 'Foo';

print $classname::$my_static . " "; // PHP 5.3.0 以降では動的に呼び出すことができます

Bar::$my_static を印刷します。 $bar = 新しい Bar();

print $bar->fooStatic() " ";

?>

例 #2 静的メソッドのコード例

クラス Foo {

パブリック静的関数 aStaticMethod() {

// }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // PHP 5.3.0 以降

?>




クラスでの Static キーワードの使用に関して、PHP マニュアルには次の規則が記載されています。

1. クラスのインスタンスを作成せずに直接アクセスできるように、クラスのメンバーまたはメソッドを静的として宣言します。静的メンバー (静的メソッドを除く) には、オブジェクトを通じてアクセスできません。

2. 静的メソッドはオブジェクトを通じて呼び出す必要がないため、疑似変数 $this は静的メソッドでは使用できません。

3. -> 演算子を使用してオブジェクトから静的プロパティにアクセスすることはできません。
4. :: メソッドを使用して非静的メソッドを呼び出すと、E_STRICT レベルのエラーが発生します。
次に、第 4 条に焦点を当てましょう。
動作環境:(Win32)PHP/5.3.3

コードは次のとおりですコードをコピー面接の質問の静的キーワード
クラスフー{


Public static $my_static = 'foo';//静的メンバーを宣言します


パブリック関数 staticValue() {//静的メソッド
return self::$my_static;//
}
パブリック関数 run(){//非静的メソッド
"abc
" を返します。 }
パブリック関数 callrun() {
return self::run();//self:: を使用して非静的メソッドを呼び出します
                                                }

}

echo Foo::$my_static

echo Foo::run();//className::method 名を使用して非静的メソッドを呼び出す
echo Foo::callrun();


質問コード: 次のコード( )の演算結果を記述してください


コードは次のとおりですコードをコピー
関数 dewen(){

$k=追加番号(100); $k+=add_number(100); printf("%d",$k); 0 を返す;

}


関数 add_number($n){
静的 $i=100;
$i+=$n;
$i を返します。 }



一見、単純な自分の足し算だと思いました。結果は 400 であると思っていましたが、答えは間違っていたことがわかりました。最後に、よく見てコードを入力し、実行すると 500 であることがわかりました。 $i+=$n を 2 回出力し、前の $i を計算しました。1 回目は 100、もう 1 回目は 200 でした。問題は静的であることがわかります。そこで百度は静的キ​​ーワードを見て、突然気づきました。

静的キーワード機能:
PHP での静的変数の使用範囲はさらに広く、クラス、メソッド、または変数の前に static 修飾子を追加できるだけでなく、関数の内部変数に static キーワードを追加することもできます。 static 修飾子が追加された変数の値は、関数が実行された後でも失われません。つまり、次回この関数が呼び出されたときも、変数は元の値を保持します。例:

コードは次のとおりです

コードをコピー

03 {
01 02 関数テスト()
04 静的 $var1 =1;

05 $var1 +=2

06 $var1 をエコーし​​ます。

07 }

08

09テスト();

10テスト();

11テスト();

12?>

実行結果は以下の通りです:

3 5 7

要約:

静的グローバル変数と通常のグローバル変数の違いは何ですか:
静的グローバル変数は、他のファイル単位で参照されないように 1 回だけ初期化されます。 静的ローカル変数と通常のローカル変数の違いは何ですか:
静的ローカル変数は 1 回だけ初期化され、次回は前の結果値に基づいて初期化されます。 静的関数と通常の関数の違いは何ですか:
静的関数はメモリ内にコピーを 1 つだけ持ちますが、通常の関数は呼び出されるたびにコピーを維持します

http://www.bkjia.com/PHPjc/632692.html

tru​​ehttp://www.bkjia.com/PHPjc/632692.html技術記事 PHPでは、staticは静的変数であり、関数を定義でき、変数はグローバル静的変数です。では、関数または変数の前にstaticを追加すると、関数と変数はどうなるでしょうか...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。