欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php static self

楊偉東1年前9瀏覽0評論

PHP面向?qū)ο缶幊讨校瑂tatic和self一直是讓初學(xué)者感到困惑的概念之一。

static表示靜態(tài)變量或者靜態(tài)方法,我們可以直接使用類名來調(diào)用,而不需要實例化一個對象。self則表示當(dāng)前類的實例,我們只能在使用它時通過類名來調(diào)用。

現(xiàn)在,讓我們通過一些具體的例子來更好地理解static和self。

class Person {
public static $name = "Tom";
public static function sayHello() {
echo "Hello, " . self::$name . "!</br>";
}
}
class Student extends Person {
public static $name = "Alice";
}
Person::sayHello(); //輸出:Hello, Tom!
Student::sayHello(); //輸出:Hello, Tom!

在上面的例子中,我們定義了一個Person類和一個Student類,兩個類中都定義了一個靜態(tài)變量$name。在Person類中,我們定義了一個靜態(tài)方法sayHello,用來打印 Hello, $name! 由于static變量是跟類相關(guān),因此我們可以通過self來引用Person類中的$name,使用Person::sayHello()調(diào)用sayHello方法將打印出 Hello, Tom!。

現(xiàn)在,我們通過Student::sayHello()來調(diào)用sayHello方法,我們期望看到的是 Hello, Alice!,但實際輸出結(jié)果是Hello, Tom!。這是因為雖然Student類中也定義了$name靜態(tài)變量,但sayHello方法中使用的是self,因此還是引用的是Person類中的$name靜態(tài)變量。

為了得到我們期望的 Hello, Alice!,我們可以在sayHello方法中使用static,而不是self。

class Person {
public static $name = "Tom";
public static function sayHello() {
echo "Hello, " . static::$name . "!</br>";
}
}
class Student extends Person {
public static $name = "Alice";
}
Person::sayHello(); //輸出:Hello, Tom!
Student::sayHello(); //輸出:Hello, Alice!

在上面的例子中,我們使用static代替self來引用靜態(tài)變量,然后通過Person::sayHello()和Student::sayHello()分別調(diào)用sayHello方法。最終的輸出結(jié)果就是 Hello, Tom! 和 Hello, Alice!。

事實上,static和self的區(qū)別不僅僅體現(xiàn)在引用靜態(tài)變量上,它們在引用靜態(tài)方法中也有不同的效果。這時候,我們需要通過觀察引用類型的變化來看到它們的差別。

class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who();
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); //輸出 B

在上面的例子中,我們定義了一個A類和一個B類。在A類中,我們定義了一個靜態(tài)方法who,輸出的是當(dāng)前類的名稱。在A類中還定義了一個名為test的靜態(tài)方法,其中調(diào)用了who方法,我們期望看到的結(jié)果是A::who(),即輸出A類的名稱。

現(xiàn)在,我們通過B::test()來調(diào)用test方法,我們期望看到的是 B 類的名稱,而不是 A 類的名稱。我們可以看到,輸出結(jié)果確實是B。這是因為在test方法中,使用的是static來調(diào)用who方法。如果使用的是self,輸出結(jié)果就會是A。

到這里,我們應(yīng)該對static和self有了更深入的理解,它們可以用來引用靜態(tài)變量,也可以用來引用靜態(tài)方法。但在使用它們的時候,我們需要有一個清晰的判斷,看什么情況下使用static,什么情況下使用self,以便我們得到我們期望的結(jié)果。