phpstatic::,phpstatic self

本文目錄一覽:

PHP類的靜態(static)方法和靜態(static)變數使用介紹

在php中,訪問類的方法/變數有兩種方法:

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都一樣,那靜態方法/變數存在還有什麼意義呢?

差異還是顯然存在的,如下:

1.

靜態變數

靜態成員只保留一個變數值,而這個變數值對所有的實例都是有效,也就是說,所有的實例共享這個成員。

2.

靜態方法

靜態方法可以直接使用class::…

來調用,而非靜態方法需要滿足一定限制條件才能使用class::..

的方法調用,如之前所述

php中static 靜態變數和普通變數的區別

static變數和普通變數的區別:

static全局變數與普通全局變數區別:static全局變數只初使化一次,防止在其他文件單元中被引用;

static局部變數和普通局部變數區別:static局部變數只被初始化一次,下一次依據上一次結果值;

static函數與普通函數區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝。

具體的可以看下這篇文章,希望對你有幫助

什麼時候該使用PHP的static屬性和方法

static在使用上,有兩種基本模式:

function test() {

static $prop;

}

class Test {

public static $prop;

}

function裡面的static,更像是function的一個私有屬性。function的static,只在該function內可見,對外是無法訪問到的。

類static,就不用解釋了。一個Class,在未實例化時,只存在靜態方法和靜態屬性。Class的static,是可被外部訪問的(私有或保護屬性,可通過介面訪問)。

static賦值,等號右邊只能賦值靜態常量、數組結構、字元串、數字。

function test() {

static $prop1 = [];

static $prop2 = PHP_SAPI;

static $prop3 = ‘prop3’;

static $prop4 = empty($_SERVER[‘HTTP_HOST’]); // 錯誤

static $prop5 = $_SERVER[‘HTTP_HOST’]; // 也錯誤

}

php static 方法有什麼好處

1、static方法就相當於普通的方法一模一樣,但是給方法分了個類。語義化代碼。

2、實例化class時不會重新將static方法聲明第二遍

比如:

class People{

    private $name;

    public __construct($name = “”){

        $this-name = $name;

    }

    //此方法就不適合用static方法,因為他要使用實例的成員變數name

    public function sayMyName(){

        echo “My name is “.$this-name;

    }

    //類似這種方法的就最好寫成static方法

    public static function isMe($obj){

        return get_class($obj) == “People” ? true : false;

    }

}

$me = new People(“s524797336”);

$me-sayMyName();//輸出s524797336

var_dump(People::isMe($me));//輸出bool true

//其實如果直接有個方法如下,他的作用跟static方法作用其實是一樣的

function isPeople($obj){

    return get_class($obj) == “People” ? true : false;

}

var_dump(isPeople($me));//輸出bool true

總而言之,他就是將普通方法封裝到了類裡面,就像上面,放到people類裡面就是isMe,在公用的裡面就是isPeople,雖然完成的事情是一樣的,但是意義不同

你可以把static方法當成某個class中的共用方法

php 類中的static有什麼作用

static 是C中很常用的修飾符,它被用來控制變數的存儲方式和可見性

static 聲明的變數在C語言中有兩方面的特徵:

1)、變數會被放在程序的全局存儲區中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。

2)、變數用static告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全局變數的區別。

2、問題:Static的理解

關於static變數,請選擇下面所有說法正確的內容:

A、若全局變數僅在單個C文件中訪問,則可以將這個變數修改為靜態全局變數,以降低模塊間的耦合度;

B、若全局變數僅由單個函數訪問,則可以將這個變數改為該函數的靜態局部變數,以降低模塊間的耦合度;

C、設計和使用訪問動態全局變數、靜態全局變數、靜態局部變數的函數時,需要考慮重入問題;

D、靜態全局變數過大,可那會導致堆棧溢出。

答案與分析:

對於A,B:根據本篇概述部分的說明b),我們知道,A,B都是正確的。

對於C:根據本篇概述部分的說明a),我們知道,C是正確的(所謂的函數重入問題,下面會詳細闡述)。

對於D:靜態變數放在程序的全局數據區,而不是在堆棧中分配,所以不可能導致堆棧溢出,D是錯誤的。

因此,答案是A、B、C。

3、問題:不可重入函數

曾經設計過如下一個函數,在代碼檢視的時候被提醒有bug,因為這個函數是不可重入的,為什麼?

unsigned int sum_int( unsigned int base )

{

unsigned int index;

static unsigned int sum = 0; // 注意,是static類型的。

for (index = 1; index = base; index++)

{

sum += index;

}

return sum;

}

答案與分析:

所謂的函數是可重入的(也可以說是可預測的),即:只要輸入數據相同就應產生相同的輸出。

這個函數之所以是不可預測的,就是因為函數中使用了static變數,因為static變數的特徵,這樣的函數被稱為:帶「內部存儲器」功能的的函數。因此如果我們需要一個可重入的函數,那麼,我們一定要避免函數中使用static變數,這種函數中的static變數,使用原則是,能不用盡量不用。

將上面的函數修改為可重入的函數很簡單,只要將聲明sum變數中的static關鍵字去掉,變數sum即變為一個auto 類型的變數,函數即變為一個可重入的函數。

當然,有些時候,在函數中是必須要使用static變數的,比如當某函數的返回值為指針類型時,則必須是static的局部變數的地址作為返回值,若為auto類型,則返回為錯指針。

php static和const

靜態的常量字元指針。

一個靜態的、值不能被改變的整型常量。靜態變數與全局變數差不多,就是函數執行完畢之後,這個變數的值仍然保留,下次調用該函數時,這個變數的值仍然存在。

const 是常量,即從程序運算開始到結束,數值不變的量。

static 用於變數,聲明這個變數的存儲單元靜態分配,從程序運算開始到結束這個變數的存儲單元不變化。static常用於全局量,一是存在裡面的值始終有效,不因進退出子程序數值消失,另外static的變數運算速度比非靜態分配的快。

常量是不出現在等號左邊的。例如輸出輸入格式里的字元串就是常量,程序里直接寫入的數據也是常量。

y = a * x + 300.0; 300.0 是常量. 常量在電腦里也被分配存放單元的,但值不可變。

百度貼吧里有好些吧是有關編程的。貼吧就是論壇–Forum 啊。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/197044.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 13:27
下一篇 2024-12-03 13:27

相關推薦

發表回復

登錄後才能評論