PHP オブジェクト指向の旅: 静的変数とメソッドの深い理解_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:41:35
オリジナル
774 人が閲覧しました

static キーワードは、属性またはメソッドがクラスの特定のインスタンスではなく、クラスに関連していることを宣言するため、このタイプの属性またはメソッドは「クラス属性」または「クラス メソッド」とも呼ばれます。

アクセス制御権限が許可されている場合は、このクラスのオブジェクトを作成せずに、クラス名と 2 つのコロン「::」を使用して直接呼び出すことができます。

static キーワードは変数とメソッドを変更するために使用できます。

インスタンス化せずに、クラス内の静的属性と静的メソッドに直接アクセスできます。

静的プロパティとメソッドは静的プロパティとメソッドにのみアクセスでき、非静的プロパティとメソッドにはクラスからアクセスできません。静的プロパティと静的メソッドが作成されるとき、呼び出すことができるこのクラスのインスタンスがまだ存在しない可能性があるためです。

静的属性はメモリ内に 1 つのコピーのみを持ち、すべてのインスタンスによって共有されます。

現在のクラスの静的メンバーにアクセスするには、self:: キーワードを使用します。
静的プロパティの公開機能

クラスのすべてのインスタンスは、クラス内の静的プロパティを共有します。

言い換えると、メモリ内に複数のインスタンスがあっても、静的属性のコピーは 1 つだけです。

以下の例では、カウンター $count 属性が設定されており、プライベートおよび静的な変更が行われています。このようにして、外部の世界は $count プロパティに直接アクセスできなくなります。プログラムを実行した結果、複数のインスタンスが同じ静的 $count 属性を使用していることもわかります。

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

class user{
private static $count = 0; //すべてのユーザーのログイン状態を記録します。
public function __construct(){
self::$ count = self::$count + 1;
}
public function getCount(){
return self::$count;
}
public function __destruct(){
self::$count = self: :$count -1 ;
}
}
$user1 = new user();
$user2 = new user();
$user3 = new user();
echo "今ここに ".$user1-> getCount()." user";
echo "
";
unset( $user3);
echo "ここに ".$user1->getCount()." user";
?>
;

プログラムの実行結果:
1
2

今ここに3人のユーザーがいます
今ここに2人のユーザーがいます jb51.net
静的属性が直接呼び出されます

静的プロパティはインスタンス化せずに直接使用でき、クラスが作成される前に直接使用できます。

使用するメソッドはクラス名::静的プロパティ名です。

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

class Math{
Public static $pi = 3.14;

}
//半径のある庭の面積を求めます3の。
$r = 3;
echo "半径 $r の面積は
";
echo Math::$pi * $r * $r ;

echo "

" ;
//ここでは 3.14 では十分な精度が得られないと思うので、より正確になるように設定しました。
Math::$pi = 3.141592653589793;
echo "半径 $r の面積は
";
echo Math::$pi * $r * $r ;
?>

プログラム実行結果:
1
2
3
4

半径3のエリアは
28.26
半径3のエリアは
28.2743338823

クラスは作成されず、静的プロパティを直接使用できます。静的プロパティはいつメモリ内に作成されますか? PHP には関連する情報がありません。 Java の概念を引用して説明することも普遍的である必要があります。

静的プロパティとメソッド。クラスが呼び出されたときに作成されます。クラスが呼び出されるときは、クラスが作成されるか、クラス内の静的メンバーが呼び出されることを意味します。
静的メソッド

静的メソッドは、クラスをインスタンス化せずに直接使用できます。

使用するメソッドはクラス名::静的メソッド名です。

数学的な計算を実行するために、この Math クラスの作成を続けましょう。最大値を計算する方法を設計します。これは数学的な演算であるため、このクラスをインスタンス化する必要はありません。このメソッドを使用できればさらに便利です。

このクラスは、静的メソッドを説明するためだけに設計されました。 PHP には、数値を比較するための max() 関数が用意されています。

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

class Math{

public static function Max($num1,$num2){
return $num1 > $num2 ? $num1 : $num2;
}
}
$a = 99;
$ b = 88;
echo "$a と $b の間の最大値を表示します";
echo "
";
echo Math::Max($a,$b);
echo "
";echo "
";echo "
";
$a = 99;
$b = 100;
echo "$ a と $ b の間の最大値が ";
echo " であることを示します< ;br>";
echo Math::Max($a,$b);
?>

プログラム実行結果:

$ a、$ bの最大値が
99であることを示す
$ a、$ bの最大値が
100であることを示す
staticメソッドによるstaticメソッドの呼び出し方法

最初の例は、静的メソッドが他の静的メソッドを呼び出すときに、クラス名を直接使用します。

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

// 最大値の比較を実装する数学クラス。
class Math{

public static function Max($num1,$num2){
return $num1 > $num1 : $num2;
}
public static function Max3($num1,$num2,$num3) {
$num1 = Math::Max($num1,$num2); $num2 = return $num1;
}
}
$a = 99;
$b = 77 ;
$c = 88;
echo "表示$a $b $c 最大値は ";
echo "
";
echo Math::Max3($a,$b,$c);
?>



プログラムの実行結果:
12


は、99 77 88 の最大値が
99
であることを示しています
self:: を使用して、現在のクラス内の他の静的メソッドを呼び出すこともできます。 (提案)

コードをコピーします

コードは次のとおりです:// 最大値の比較を実装する数学クラス。
class Math{

public static function Max($num1,$num2){
return $num1 > $num1 : $num2;
}
public static function Max3($num1,$num2,$num3) {
$num1 = self::Max($num1,$num2); $num2 = return $num1;
}
}
$a = 99;
$b = 7 7;
$c = 88;
echo "表示$a $b $c 最大値は ";
echo "
";
echo Math::Max3($a,$b,$c);
?>



プログラムの実行結果:
1
2
は、99 77 88の最大値が99であることを示します

静的メソッドが静的プロパティを呼び出します

このクラスの静的プロパティを呼び出すには、クラス名::静的プロパティ名を使用します。



コードをコピーします

コードは次のとおりです:

//class Circle{ public static $pi = 3.14;
public static function CircleAcreage($r){
return $ r * $r * Circle::$pi;
}
}
$r = 3;
echo "半径 $r の円の面積は" Circle::circleAcreage($r);
?> ;



プログラム実行結果:
1

半径3の円の面積は28.26です

self:: を使用して、このクラスの静的プロパティを呼び出します。 (提案)




コードをコピーします

コードは次のとおりです:

//class Circle{ public static $pi = 3.14;
public static function CircleAcreage($r){
return $ r * $r * self::$pi;
}
}
$r = 3;
echo "半径 $r の円の面積は" Circle::circleAcreage($r);
?> ;



プログラムの実行結果:
1

半径3の円の面積は28.26です
静的メソッドは非静的プロパティを呼び出すことはできません

静的メソッドは非静的プロパティを呼び出すことはできません。 self:: を使用して非静的プロパティを呼び出すことはできません。



コードをコピーします

コードは次のとおりです:


//
class Circle{
public $pi = 3.14;

public static function CircleAcreage($r){
return $r * $r * self::pi;
}
}
$r = 3;
echo "半径 $r の円の面積は" . Circle::circleAcreage($r);
?>

プログラムの実行結果:
1

致命的なエラー: E:PHPProjectstest.php の 7 行目で未定義のクラス定数 'pi'

$this を使用して非静的プロパティの値を取得することもできません。

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

//
class Circle{
public $pi = 3.14;

public static function CircleAcreage($r){
return $r * $r * $this->pi;
}
}
$r = 3;
echo "半径 $r の円の面積は" Circle::circleAcreage($r);
?>

プログラムの実行結果:
1

致命的なエラー: E:PHPProjectstest.phpの7行目でオブジェクトコンテキストにないときに$thisを使用すると
静的メソッドが非静的メソッドを呼び出します

PHP5 では、静的メソッドで $this 識別子を使用して非静的メソッドを呼び出すことはできません。

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

//最大値の比較を実装する数学クラス。
class Math{
public function Max($num1,$num2){
echo "bad
";
return $num1 : $num2;
}
public static function Max3($num1) . ->Max($num1,$num2); >最大値は ";
echo "
";
echo Math::Max3($a,$b,$c);
? >



プログラム実行結果:

99 77 188の最大値が表示される
致命的エラー: E:test.phpの10行目でオブジェクトコンテキストにない場合に$thisを使用する

クラス内の非静的メソッドが self:: によって呼び出される場合、システムはこのメソッドを自動的に静的メソッドに変換します。

次のコードが実行され、結果が生成されました。 Max メソッドはシステムによって静的メソッドに変換されるためです。



コードをコピーします

コードは次のとおりです:

//最大値の比較を実装する数学クラス。

class Math{

public function Max($num1,$num2){ return $num1 > $num1 : $num2; } public static function Max3($num1,$num2,$num3){ $num1 = self::Max($num1,$num2);
$num2 = self::Max($num2,$num3);
$num1 = self::Max($num1,$num2);
return $ num1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "$a $b $c を表示します。最大値は";
echo "
"; echo Math::Max3($a,$b,$c);
?>



プログラムの実行結果:
1
2

は、99 77 188の最大値が
188
であることを示しています
次の例では、静的メソッド Max3 が self:: を使用して非静的メソッド Max を呼び出し、非静的メソッド Max が $this を通じて非静的プロパティ $pi を呼び出すようにします。
実行時にエラーが報告されました。このエラーは、前の例 3-1-9.php と同じです。今回は、非静的メソッド Max が静的メソッドによる非静的プロパティの呼び出しのエラーを報告しました。

これは、ここで定義した非静的メソッド Max がシステムによって自動的に静的メソッドに変換されることを証明しています。




コードをコピーします

コードは次のとおりです:


// 最大値の比較を実装する数学クラス。
class Math{
public $pi = 3.14;

public function Max($num1,$num2){
echo self::$pi; //ここでの呼び出しには問題はありません。
return $num1 > $num2 ? $num1 : $num2;
}
パブリック静的関数 Max3($num1,$num2,$num3){
$num1 = self::Max($num1,$num2);
$num2 = self :: Max ($num2, $num3); 188;
echo "$a $b $c の最大値を表示します";
echo "
";
echo Math::Max3($a,$ b,$c);
?>



プログラムの実行結果:
1
2

は、99 77 188 の最大値が
致命的なエラー: 宣言されていない静的プロパティへのアクセス: E:PHPProjectstest.php の 7 行目の Math::$pi であることを示します




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

www.bkjia.com

本当

http://www.bkjia.com/PHPjc/676925.html技術記事 static キーワードは、属性またはメソッドがクラスの特定のインスタンスではなく、クラスに関連していることを宣言するため、このタイプの属性またはメソッドは「クラス属性」または「クラス メソッド」とも呼ばれます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート