php static靜態屬性和靜態方法的調用
發布:smiling 來源: PHP粉絲網 添加日期:2018-09-16 12:36:22 瀏覽: 評論:0
這里分析了php面向對象中static靜態屬性和靜態方法的調用。關于它們的調用(能不能調用,怎么樣調用),需要弄明白了他們在內存中存放位置,這樣就非常容易理解了。靜態屬性、方法(包括靜態與非靜態)在內存中,只有一個位置(而非靜態屬性,有多少實例化對象,就有多少個屬性)。
實例代碼如下:
- <?php
- header("content-type:text/html;charset=utf-8");
- class Human{
- static public $name = "小妹";
- public $height = 180;
- static public function tell(){
- echo self::$name;//靜態方法調用靜態屬性,使用self關鍵詞
- //echo $this->height;//錯。靜態方法不能調用非靜態屬性
- //因為 $this代表實例化對象,而這里是類,不知道 $this 代表哪個對象
- }
- public function say(){
- echo self::$name . "我說話了";
- //普通方法調用靜態屬性,同樣使用self關鍵詞
- echo $this->height;
- }
- }
- $p1 = new Human();
- $p1->say();
- $p1->tell();//對象可以訪問靜態方法
- echo $p1::$name;//對象訪問靜態屬性。不能這么訪問$p1->name
- //因為靜態屬性的內存位置不在對象里
- Human::say();//錯。say()方法有$this時出錯;沒有$this時能出結果
- //但php5.4以上會提示
- ?>
靜態屬性
靜態屬性也就是說它的值保持其值,比如在類中實例化了N個對象,那么你可以在構造函數中定義一個靜態屬性來記住對象的個數。類中的靜態屬性和靜態變量差不多,只不過在類中似乎又多了一個些使用上的限制罷了。讓我們看看一般的變量吧:
- <?php
- function test() {
- $n = 1;
- echo "The number is:$n<br />";
- $n++;
- }
- test();
- test();
- test();
- test();
- test();
- test();
- ?>
很顯然這個函數的結果如下:
- The number is:1
- The number is:1
- The number is:1
- The number is:1
- The number is:1
- The number is:1
但是如果你的程序是這樣:
- <?php
- function test() {
- static $n = 1;
- echo "The number is:$n<br />";
- $n++;
- }
- test();
- test();
- test();
- test();
- test();
- test();
- ?>
我們只不過在變量名加了個static關鍵字而已,結果就大大的不同了:
- The number is:1
- The number is:2
- The number is:3
- The number is:4
- The number is:5
- The number is:6
1.static關鍵字可以用來修飾變量、方法(靜態方法)
2.不經過實例化,就可以直接訪問類中static的屬性和static的方法。
3.static 的屬性和方法,只能訪問static的屬性和方法,不能訪問非靜態的屬性和方法。因為靜態屬性和方法被創建時,可能還沒有任何這個類的實例可以被調用。
4.在當前類中如果要訪問靜態成員可以使用self::關鍵字進行訪問。
5.在類中我們不能使用this關鍵來訪問靜態屬性,因為靜態屬性在對象可能還沒有實例化之前已經存在。
6.在類中靜態方法訪問靜態屬性,使用類名::靜態屬性名即可調用類中的靜態屬性。
靜態方法,代碼如下:
- <?php
- class test {
- private static $money = 2000;
- public static function getonemon() {
- return test :: $money;
- }
- public static function gettwomon() {
- self :: $money = self :: $money -1500;
- return self :: $money;
- }
- }
- echo "我現在余額為:";
- echo test :: getonemon();
- echo "<br>";
- echo "消費后,我的余額為:";
- echo test :: gettwomon();
- ?>
在這個示例里我們看到,使用了兩種方法來訪問靜態屬性$money的值:一種是前面都提到的類名::屬性值的形式,另外一種則是使用了self關鍵字。當然推薦使用self關鍵字這種方式,因為如果那天不高興了,我們修改的類名,那么如果你使用了第一種方式,你是不是還得修改下調用它的方法呢,當然你得在同一個類中,如果你是在子類中想調用父類的靜態屬性和方法,那就得使用parent::的方式了。
再說一下:
1:如果你想在靜態方法中調用其它靜態方法時,請使用方法是:類名::方法名的形式進行調用,還是那句,如果你在同一個類進行這樣的調用,就使用selft關鍵字進行調用吧。要不然你得的程序可就得報錯了。
2:php中靜態方法不能調用非靜態的屬性和非靜態方法,也不能使用類名::或者self::調用非靜態屬性。更不能使用$this->屬性名來調用,總之在靜態方法中只能調用靜態屬性或方法,非靜態的無法調用。
結論:
(1)、靜態屬性不需要實例化即可調用。因為靜態屬性存放的位置是在類里,調用方法為"類名::屬性名";
(2)、靜態方法不需要實例化即可調用。同上
(3)、靜態方法不能調用非靜態屬性。因為非靜態屬性需要實例化后,存放在對象里;
(4)、靜態方法可以調用非靜態方法,使用 self 關鍵詞。php里,一個方法被self:: 后,它就自動轉變為靜態方法;(會提示strict)
Tags: 靜態 屬性 方法
- 上一篇:PHP實現求解最長公共子串問題的方法
- 下一篇:最后一頁
相關文章
- ·PHP 類屬性 類靜態變量的訪問(2013-11-14)
- ·php類,構造函數 靜態變量實例(2014-06-06)
- ·PHP static靜態局部變量和靜態全局變量總結(2014-06-14)
- ·php中static 靜態變量和普通變量的區別(2016-08-18)
- ·php中類和對象:靜態屬性、靜態方法(2018-08-02)
- ·php 類中的常量、靜態以及非靜態屬性之間的區別(2018-08-02)
- ·php靜態成員方法和靜態的成員屬性的使用方法(2018-09-13)
- ·php __get(),__set()函數來實現對屬性的訪問(2013-11-28)
- ·php final static const成員屬性用法(2014-05-21)
- ·php類中protected與const屬性詳解(2014-06-13)
- ·php 遍歷對象屬性二種方法(2014-08-18)
- ·如何直接訪問php實例對象中的private屬性詳解(2018-09-13)
- ·PHP中關鍵字與魔術方法介紹(2014-01-05)

推薦文章
熱門文章
最新評論文章
- 寫給考慮創業的年輕程序員(10)
- PHP新手上路(一)(7)
- 惹惱程序員的十件事(5)
- PHP郵件發送例子,已測試成功(5)
- 致初學者:PHP比ASP優秀的七個理由(4)
- PHP會被淘汰嗎?(4)
- PHP新手上路(四)(4)
- 如何去學習PHP?(2)
- 簡單入門級php分頁代碼(2)
- php中郵箱email 電話等格式的驗證(2)