分析php面向對象中static靜態屬性和靜態方法的調用方法

PHP static靜態屬性和靜態方法

Static(靜態)關鍵字

聲明類屬性或方法爲靜態,就可以不實例化類而直接訪問。靜態屬性不能通過一個類已實例化的對象來訪問(但靜態方法可以)。

爲了兼容 PHP 4,如果沒有指定訪問控制,屬性和方法默認爲公有。

由於靜態方法不需要通過對象即可調用,所以僞變量 $this 在靜態方法中不可用。
靜態屬性不可以由對象通過 -> 操作符來訪問。

用靜態方式調用一個非靜態方法會導致一個 E_STRICT 級別的錯誤。

就像其它所有的 PHP 靜態變量一樣,靜態屬性只能被初始化爲文字或常量,不能使用表達式。所以可以把靜態屬性初始化爲整數或數組,但不能初始化爲另一個變量或函數返回值,也不能指向一個對象。

自 PHP 5.3.0 起,可以用一個變量來動態調用類。但該變量的值不能爲關鍵字 self,parent 或 static

詳細介紹

<?php

class QiPaService
{

    static public $name = '奇葩天地網';
    public $url = 'www.qipa250.com';

    //靜態方法
    public static function XiaoQipa()
    {
        echo self::$name;
        //echo $this->url;  
        //這裏報錯,靜態方法不能調用非靜態屬性,因爲 $this代表實例化對象,而這裏是類,不知道 $this 代表哪個對象
    }

    public function DaQiPa()
    {
        echo $this->url;
        //普通方法調用靜態屬性,同樣使用self關鍵詞
        echo self::$name;
    }

}

$qipa = new QiPaService();

//對象可以訪問靜態方法
$qipa->XiaoQipa();

$qipa->DaQiPa();

//對象訪問靜態屬性。不能這麼訪問$qipa->name,因爲靜態屬性的內存位置不在對象裏
$qipa::$name;

$qipa->url;//對象可以訪問普通屬性

$qipa::XiaoQipa();
//DaQiPa()方法有$this時出錯;沒有$this時能出結果,會有警告
$qipa::DaQiPa();

//靜態方法不需要實例化即可調用
QiPaService::XiaoQipa();
?>

結論:

1)靜態屬性不需要實例化即可調用。因爲靜態屬性存放的位置是在類裏,調用方法爲"類名::屬性名";
(2)靜態方法不需要實例化即可調用。同上
(3)靜態方法不能調用非靜態屬性。因爲非靜態屬性需要實例化後,存放在對象裏;
(4)靜態方法可以調用非靜態方法,使用 self 關鍵詞。php裏,一個方法被self:: 後,它就自動轉變爲靜態方法;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章