国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

php中static靜態類與static 靜態變量用法區別

2024-04-25 20:36:57
字體:
來源:轉載
供稿:網友

static是定義一個靜態對象或靜態變量,關于static 定義的變量或類方法有什么特性我們看完本文章的相關實例后就見分曉了

1. 創建對象$object = new Class(),然后使用”->”調用:$object->attribute/function,前提是該變量/方法可訪問.

2. 直接調用類方法/變量:class::attribute/function,無論是靜態/非靜態都可以,但是有前提條件.

A. 如果是變量,需要該變量可訪問.

B. 如果是方法,除了該方法可訪問外,還需要滿足.

b1) 如果是靜態方法,沒有特殊條件.

b2) 如果是非靜態方法,需要改方法中沒有使用$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."人

";

}

}

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

但靜態方法也可以通過普通對象的方式訪問.

例子,聲明靜態變量,代碼如下:

<?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)

//開源代碼phpfensi.com

$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--;

}

?>

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

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 醴陵市| 罗平县| 商城县| 教育| 乐东| 咸宁市| 五家渠市| 双柏县| 泽普县| 富锦市| 滁州市| 密云县| 宁都县| 昌乐县| 泰宁县| 昌图县| 台北县| 贺兰县| 双江| 海南省| 鹤庆县| 沂源县| 湘西| 祁连县| 安义县| 阿克陶县| 镇康县| 大田县| 崇仁县| 岗巴县| 航空| 察隅县| 工布江达县| 彰化县| 抚松县| 乐安县| 佳木斯市| 丰县| 西吉县| 洪泽县| 江油市|