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

溫馨提示×

溫馨提示×

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

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

php如何使用靜態方法

發布時間:2021-07-27 10:38:00 來源:億速云 閱讀:169 作者:chen 欄目:編程語言

本篇內容介紹了“php如何使用靜態方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在php中,通過static關鍵字修飾的成員方法被稱為靜態方法,調用靜態方法可以使用“類名::靜態方法()”語法,也可以直接實例化一個變量,然后使用“變量名->函數名”的方法調用。

本教程操作環境:windows7系統、PHP7.1版,DELL G3電腦

在 PHP 中,通過 static 關鍵字修飾的成員屬性和成員方法被稱為靜態屬性和靜態方法,這里可以將它們統稱為靜態成員,類中的靜態成員與類中的一般成員不同,靜態成員不會被實例化到對象中,也就是說我們不需要實例化一個類,就可以通過類來訪問靜態成員。

在類中聲明靜態變量很容易,我們可以在類的普通成員前加一個 static 關鍵字,就可以將這個普通成員變成靜態成員了。這樣一來,我們可以在不實例化類的情況下,直接訪問類中的這些靜態成員。訪問靜態成員的語法格式如下:

類名::$靜態屬性
類名::靜態方法()

其中::符號被稱為范圍解析操作符,用于訪問靜態成員、靜態方法和常量,還可以用于覆蓋類中的成員和方法。

或者直接實例化一個變量,然后使用“變量名->函數名”的方法調用。

由于靜態方法不需要類的實例化就能夠被調用,而普通方法和普通屬性都必須先聲明一個對象才可以訪問,因此,在靜態方法里面始終是不能使用普通方法和訪問普通變量的。

關于靜態方法要牢牢記住一點:“靜態方法是屬于整個類的。”

class Star{
public static function getName($name){
return '隊員姓名'.$name;
}
}
echo Star::getName('kate');  //隊員姓名kate
$star = new Star();
echo $star->getName('jim');  //隊員姓名jim

靜態方法的優點:

(1)在代碼的任何地方都可以用(假設可以訪問該類);

(2)類的每個實例都可以訪問類中定義的靜態屬性,可以利用靜態屬性來設置值,該值可以被類的所有對象使用;

(3)不需要實例對象就能訪問靜態屬性或方法。

<?php
$pdo = new PDO('mysql:host=localhost;dbname=mydb','root');  // 生成一個 PDO(PHP Data Object) 對象
class ShopProduct{
    private $title;             // 屬性也稱為成員變量,用來存放對象之間互不相同的數據
    private $producerMainName;  // 所有的屬性都設置為 private,不允許外部直接訪問這些屬性,然后提供方法來取得需要的值
    private $producerFirstName;
    protected $price;           // 阻止外面直接訪問該屬性,可以被子類訪問
    private $discount = 0;
    private $id = 0;

    // 創建對象時,構造方法會被自動調用,構造方法可以確保必要的屬性設置,并完成任何需要準備的工作
    public function __construct($title,$mainName,$firstName,$price){
        $this->title = $title;      // 使用偽變量$this給每個變量賦值
        $this->producerMainName = $mainName;
        $this->producerFirstName = $firstName;
        $this->price = $price;
    }

    /**
     * @return mixed 這種只返回屬性值的方法稱為“訪問方法”,也稱為 getter 和 setter
     */
    public function getProducerFirstName()
    {
        return $this->producerFirstName;
    }

    /**
     * @return mixed 獲取 姓 的訪問方法
     */
    public function getProducerMainName()
    {
        return $this->producerMainName;
    }

    /**
     * @param $num 打折的價格
     */
    public function setDiscount($num)
    {
        $this->discount = $num;
    }

    /**
     * @return int 折扣的訪問方法
     */
    public function getDiscount()
    {
        return $this->discount;
    }

    /**
     * @return mixed Book名或CD名的訪問方法
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * @return mixed 折扣后的價格
     */
    public function getPrice()
    {
        return ($this->price - $this->discount);
    }

    /**
     * @return string 作者
     */
    public function getProducer(){  // 方法讓對象執行任務
        return $this->producerMainName .' '. $this->producerFirstName;
    }

    /**
     * @return string 發票的摘要信息
     */
    public function getSummaryLine()
    {
        $base = "{$this->title} ( {$this->producerMainName},{$this->producerFirstName}) ";
        return $base;
    }

    /**
     * @param $id id 的訪問方法, setter
     */
    public function setId($id)
    {
        $this->id = $id;
    }

    // 根據查詢數據的數據類型,返回特定類型的 ShopProduct 對象,這個方法沒有使用任何實例的屬性和方法,因此把它定義為一個靜態方法(static),只要有一個有效的 PDO 對象,就可以在程序的任何地方調用這個方法。這個方法就像工廠一樣,可以接受原始數據產生特定類型的對象。
    public static function getInstance($id,PDO $pdo)
    {
        $stmt = $pdo -> prepare("SELECT * FROM products WHERE id=?");
        $stmt -> execute(array($id));
        $row = $stmt -> fetch();
        if(empty($row)){
            return null;
        }
        switch($row['type'])
        {
            case 'book' :
                $product = new BookProduct($row['title'],$row['first_name'],$row['main_name'],$row['price'],$row['num_pages']);
            break;
            case 'cd' :
                $product = new CdProduct($row['title'],$row['first_name'],$row['main_name'],$row['price'],$row['play_length']);
            break;
            default :
                $product = new ShopProduct($row['title'],$row['first_name'],$row['main_name'],$row['price']);
            break;
        }
        $product -> setId($row['id']);
        $product -> setDiscount($row['discount']);
        return $product;
    }
}

// 若派生類沒有定義構造方法,則它在實例化是會自動調用父類的構造方法。子類默認繼承父類所有的 public 和 protected 方法,但不繼承 private 方法和屬性
class BookProduct extends ShopProduct
{
    private $numPages;

    // 每個子類在設置自己的屬性前調用父類的構造方法,基類現在僅知道自己的數據,子類一般是父類的特列,應該避免告訴父類任何關于子類的消息。
    public function __construct($title,$mainName,$firstName,$price,$numPages)
    {
        // parent 關鍵字可以在任何復寫父類方法的方法中使用,通過在當前對象中調用父類的方法來拓展父類的功能 , 要應用一個類而不是對象的方法,使用 :: 而不是 ->
        parent::__construct($title,$mainName,$firstName,$price);
        $this -> numPages = $numPages;
    }

    /**
     * @param $numPages 書的頁數
     * @return mixed    總頁數
     */
    public function getNumberOfPages()
    {
        return $this->numPages;
    }

    /**
     *  子類(派生類)可以覆蓋和修改父類(基類或超類)的功能
     * @return string Book發票的摘要信息
     */
    public function getSummaryLine()
    {
        $base = parent::getSummaryLine();
        $base .= "page count - {$this->numPages}";
        return $base;
    }
}

class CdProduct extends ShopProduct
{
    private $playLength;

    public function __construct($title,$mainName,$firstName,$price,$playLength)
    {
        parent::__construct($title,$mainName,$firstName,$price);
        $this -> playLength = $playLength;
    }

    /**
     * @return int 播放時間
     */
    public function getPlayLength()
    {
        return $this -> playLength;
    }

    /**
     * @return string CD發票的摘要信息
     */
    public function getSummaryLine()
    {
        $base = parent::getSummaryLine();
        $base .= "playing time - {$this->playLength}";
        return $base;
    }
}

$product = ShopProduct::getInstance(1,$pdo);     // 該靜態方法根據傳入 id 的不同生成特定類型的對象
if($product){
    print "author : {$product -> getProducer()} </br>";              // author :Lun Xun
    print "summary line: {$product -> getSummaryLine()}</br>";      // summary line: Kong Yiji ( Xun,Lun) page count - 200
}

“php如何使用靜態方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

php
AI

武乡县| 杭州市| 宣威市| 十堰市| 珠海市| 唐河县| 孟村| 兴安县| 栾川县| 灵寿县| 阳信县| 潜山县| 洛扎县| 神木县| 怀柔区| 万载县| 璧山县| 宾阳县| 吴川市| 莱阳市| 罗定市| 抚州市| 洞头县| 梨树县| 收藏| 米脂县| 仙游县| 和龙市| 石家庄市| 虞城县| 玛纳斯县| 陇西县| 永定县| 如东县| 弥勒县| 四会市| 青浦区| 昌宁县| 河曲县| 平和县| 资中县|