中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

靜態類與靜態變量如何在php中使用

發布時間:2020-12-18 14:27:55 來源:億速云 閱讀:165 作者:Leah 欄目:開發技術

靜態類與靜態變量如何在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,就可以不實例化類而直接訪問,不能通過一個對象來訪問其中的靜態成員(靜態方法除外),靜態成員屬于類,不屬于任何對象實例,但類的對象實例都能共享.

例子,代碼如下:

復制代碼 代碼如下:

<?php
Class Person{
    // 定義靜態成員屬性
    public static $country = "中國";
    // 定義靜態成員方法
    public static function myCountry() {
        // 內部訪問靜態成員屬性
        echo "我是".self::$country."人<br />";
    }
}
class Student extends Person {
    function study() {
        echo "我是". parent::$country."人<br />";
    }
}
// 輸出成員屬性值
echo Person::$country."<br />";  // 輸出:中國
$p1 = new Person();
//echo $p1->country;   // 錯誤寫法
// 訪問靜態成員方法
Person::myCountry();   // 輸出:我是中國人
// 靜態方法也可通過對象訪問:
$p1->myCountry();
 
// 子類中輸出成員屬性值
echo Student::$country."<br />"; // 輸出:中國
$t1 = new Student();
$t1->study();    // 輸出:我是中國人
?>


運行該例子,輸出:
中國
我是中國人
我是中國人
中國
我是中國人

小結:在類內部訪問靜態成員屬性或者方法,使用 self::(注意不是 $slef),代碼如下:

復制代碼 代碼如下:

slef:: $country

slef:: myCountry()

在子類訪問父類靜態成員屬性或方法,使用 parent::(注意不是 $parent),代碼如下:

復制代碼 代碼如下:

parent:: $country

parent:: myCountry()

外部訪問靜態成員屬性和方法為 類名/子類名::,代碼如下:

復制代碼 代碼如下:

Person::$country

Person::myCountry()

Student::$country

但靜態方法也可以通過普通對象的方式訪問.
例子,聲明靜態變量,代碼如下:

復制代碼 代碼如下:

<?PHP
   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;
   }
?>


例子,使用靜態變量的例子,代碼如下:

復制代碼 代碼如下:

<?PHP
   function Test()
   {
   static $w3sky = 0;
   echo $w3sky;
   $w3sky++;
   }
?>


現在,每次調用 Test() 函數都會輸出 $w3sky 的值并加一.

靜態變量也提供了一種處理遞歸函數的方法,遞歸函數是一種調用自己的函數,寫遞歸函數時要小心,因為可能會無窮遞歸下去,必須確保有充分的方法來中止遞歸,一下這個簡單的函數遞歸計數到 10,使用靜態變量 $count 來判斷何時停止.

例子,靜態變量與遞歸函數,代碼如下:

復制代碼 代碼如下:

<?PHP
   function Test()
   {
   static $count = 0;
   
   $count++;
   echo $count;
   if ($count < 10) {
   Test();
   }
   $count--;
   }
?>


注:靜態變量可以按照上面的例子聲明,如果在聲明中用表達式的結果對其賦值會導致解析錯誤.

關于靜態類與靜態變量如何在php中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

永修县| 洛浦县| 桑植县| 通州市| 凯里市| 双柏县| 新泰市| 磴口县| 巴中市| 桐城市| 开远市| 杭锦后旗| 泸水县| 河西区| 利川市| 迭部县| 神池县| 宜阳县| 阳朔县| 西吉县| 平山县| 舒兰市| 阿拉善盟| 莱芜市| 图们市| 郸城县| 西华县| 舟山市| 闸北区| 青龙| 石棉县| 华容县| 乐清市| 闻喜县| 新龙县| 资溪县| 洛川县| 当涂县| 宣汉县| 绥中县| 清新县|