phpにおける静的クラスと静的変数の用法の区別分析
3744 ワード
本論文の例では,phpにおける静的クラスと静的変数の用法の違いを解析した.皆さんの参考にしてください.具体的な分析は以下の通りである.
staticは静的オブジェクトまたは静的変数を定義するものであり、staticが定義する変数またはクラスメソッドの特性については、本論文の関連例を見てから明らかにする.
1.オブジェクト$object=new Class()を作成し、変数/メソッドがアクセス可能であることを前提として、"->"呼び出し:$object->attribute/functionを使用します.
2.クラスメソッド/変数を直接呼び出す:class::attribute/functionは、静的/非静的であってもよいが、前提条件がある.
A.変数の場合、その変数にアクセスする必要がある.
B.メソッドであれば、そのメソッドがアクセスできるほか、満足する必要がある.
①静的方法である、特別な条件はない.
②非静的方法である場合は、$thisを用いる方法を変更する必要がある、すなわち、非静的変数/方法を呼び出すことはない、もちろん、静的変数/方法を呼び出すことは問題ない.
次に$object->...とclass::...の違いを見てみましょう.
1.$object->を使用するには、コンストラクション関数を実行してオブジェクトを作成する必要があります.
2.class:::...静的メソッド/変数を呼び出し、コンストラクション関数を実行するオブジェクトを作成する必要はありません.
3.class:::...非静的メソッド/変数を呼び出し、コンストラクタ作成オブジェクトを実行する必要もありません.
そして変なところが出てきて、2と3が同じである以上、静的方法/変数の存在には何の意味があるのだろうか.
静的static:クラスメンバーまたはメソッドがstaticであることを宣言すると、クラスをインスタンス化せずに直接アクセスすることができ、1つのオブジェクトでその中の静的メンバーにアクセスすることはできない(静的メソッドを除く)、静的メンバーはクラスに属し、いかなるオブジェクトインスタンスにも属しないが、クラスのオブジェクトインスタンスは共有できる.
例として、コードは次のとおりです.
この例を実行して、出力:
中国
私は中国人です.
私は中国人です.
中国
私は中国人です.
小結:クラス内で静的メンバー属性またはメソッドにアクセスし、self:::($slefではないことに注意)を使用します.コードは次のとおりです.
子クラスで親クラスの静的メンバー属性またはメソッドにアクセスするには、parent::($parentではないことに注意)を使用します.コードは次のとおりです.
外部アクセス静的メンバーのプロパティとメソッドは、クラス名/サブクラス名:、コードは次のとおりです.
しかし、静的な方法は、通常のオブジェクトによってアクセスすることもできる.例:静的変数を宣言します.コードは次のとおりです.
例:静的変数を使用する例です.コードは次のとおりです.
現在、Test()関数を呼び出すたびに$w 3 skyの値が出力され、1が加算.
静的変数も再帰関数を処理する方法を提供し、再帰関数は自分の関数を呼び出すものであり、再帰関数を書くときは注意しなければならない.無限再帰する可能性があるので、再帰を中止するのに十分な方法を確保しなければならない.
例として、静的変数と再帰関数、コードは以下の通りです.
注意:静的変数は、上記の例に従って宣言することができます.宣言で式の結果で値を割り当てると、解析エラーが発生します.
本稿で述べたphpプログラム設計に役立つことを願っています.
staticは静的オブジェクトまたは静的変数を定義するものであり、staticが定義する変数またはクラスメソッドの特性については、本論文の関連例を見てから明らかにする.
1.オブジェクト$object=new Class()を作成し、変数/メソッドがアクセス可能であることを前提として、"->"呼び出し:$object->attribute/functionを使用します.
2.クラスメソッド/変数を直接呼び出す:class::attribute/functionは、静的/非静的であってもよいが、前提条件がある.
A.変数の場合、その変数にアクセスする必要がある.
B.メソッドであれば、そのメソッドがアクセスできるほか、満足する必要がある.
①静的方法である、特別な条件はない.
②非静的方法である場合は、$thisを用いる方法を変更する必要がある、すなわち、非静的変数/方法を呼び出すことはない、もちろん、静的変数/方法を呼び出すことは問題ない.
次に$object->...とclass::...の違いを見てみましょう.
1.$object->を使用するには、コンストラクション関数を実行してオブジェクトを作成する必要があります.
2.class:::...静的メソッド/変数を呼び出し、コンストラクション関数を実行するオブジェクトを作成する必要はありません.
3.class:::...非静的メソッド/変数を呼び出し、コンストラクタ作成オブジェクトを実行する必要もありません.
そして変なところが出てきて、2と3が同じである以上、静的方法/変数の存在には何の意味があるのだろうか.
静的static:クラスメンバーまたはメソッドがstaticであることを宣言すると、クラスをインスタンス化せずに直接アクセスすることができ、1つのオブジェクトでその中の静的メンバーにアクセスすることはできない(静的メソッドを除く)、静的メンバーはクラスに属し、いかなるオブジェクトインスタンスにも属しないが、クラスのオブジェクトインスタンスは共有できる.
例として、コードは次のとおりです.
Class Person{
//
public static $country = " ";
//
public static function myCountry() {
//
echo " ".self::$country."
";
}
}
class Student extends Person {
function study() {
echo " ". parent::$country."
";
}
}
//
echo Person::$country."
"; // :
$p1 = new Person();
//echo $p1->country; //
//
Person::myCountry(); // :
// :
$p1->myCountry();
//
echo Student::$country."
"; // :
$t1 = new Student();
$t1->study(); // :
?>
この例を実行して、出力:
中国
私は中国人です.
私は中国人です.
中国
私は中国人です.
小結:クラス内で静的メンバー属性またはメソッドにアクセスし、self:::($slefではないことに注意)を使用します.コードは次のとおりです.
slef:: $country
slef:: myCountry()
子クラスで親クラスの静的メンバー属性またはメソッドにアクセスするには、parent::($parentではないことに注意)を使用します.コードは次のとおりです.
parent:: $country
parent:: myCountry()
外部アクセス静的メンバーのプロパティとメソッドは、クラス名/サブクラス名:、コードは次のとおりです.
Person::$country
Person::myCountry()
Student::$country
しかし、静的な方法は、通常のオブジェクトによってアクセスすることもできる.例:静的変数を宣言します.コードは次のとおりです.
function foo(){
static $int = 0;// correct
static $int = 1+2; // wrong (as it is an expression)
static $int = sqrt(121); // wrong (as it is an expression too)
$int++;
echo $int;
}
?>
例:静的変数を使用する例です.コードは次のとおりです.
function Test()
{
static $w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
現在、Test()関数を呼び出すたびに$w 3 skyの値が出力され、1が加算.
静的変数も再帰関数を処理する方法を提供し、再帰関数は自分の関数を呼び出すものであり、再帰関数を書くときは注意しなければならない.無限再帰する可能性があるので、再帰を中止するのに十分な方法を確保しなければならない.
例として、静的変数と再帰関数、コードは以下の通りです.
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>
注意:静的変数は、上記の例に従って宣言することができます.宣言で式の結果で値を割り当てると、解析エラーが発生します.
本稿で述べたphpプログラム設計に役立つことを願っています.