Heim >php教程 >PHP开发 >Erweiterte Funktionsanalyse von PHP-Objekten, -Mustern und -Praktiken

Erweiterte Funktionsanalyse von PHP-Objekten, -Mustern und -Praktiken

黄舟
黄舟Original
2016-12-14 10:37:231163Durchsuche

Die Beispiele in diesem Artikel beschreiben die erweiterten Funktionen der objektorientierten PHP-Programmierung. Teilen Sie es wie folgt mit allen als Referenz:

Zu den erweiterten Funktionen

gehören:

1. Statische Methoden und Eigenschaften (Zugriff auf Daten und Funktionen über Klassen statt über Objekte)
2. Abstrakte Klassen und Schnittstellen (Trennung von Design und Implementierung)
3. Fehlerbehandlung (Ausnahmen)
5 🎜>6. Zerstörungsmethode (Aufräumen vor Objektzerstörung)
7. Objekt klonen (eine Kopie des Objekts erstellen)
8. PS: Lesen lernen Aus dem Gedächtnis Betrachten Sie den Code aus einer anderen Perspektive. Stellen Sie sich die mikroskopische Welt der Computer vor.

Kleines Beispiel einer statischen Methode

Tipps:
<?php
class StaticExample{
  static public $aNum = 10;
  static public function sayHello(){
    print "hello";
  }
}
print StaticExample::$aNum."<br/>";
StaticExample::sayHello();

1. Statische Methoden können nicht auf gewöhnliche Attribute in der Klasse zugreifen, da diese Attribute dazu gehören zu einem Objekt, aber mit Zugriff auf statische Eigenschaften.

2. Wir können keine statischen Methoden in Objekten aufrufen, daher können wir die Pseudovariable $this nicht in statischen Methoden verwenden.

Großes Beispiel einer statischen Methode


<?php
class ShopProduct{
  private $title;
  private $producerMainName;
  private $producerFirstName;
  protected $price;
  private $discount = 0;
  private $id = 0;
  function __construct($title,$firstName,$mainName,$price){
    $this->title = $title;
    $this->producerFirstName = $firstName;
    $this->producerMainName = $mainName;
    $this->price = $price;
  }
  public function setID($id){
    $this->id = $id;
  }
  public static function getInstance($id,PDO $pdo){
    $query = "select * from products where id= &#39;$id&#39;";
    $stmt = $pdo->query($query);
    $row = $stmt->fetch();
    if(empty($row)){
      return null;
    }
    if($row[&#39;type&#39;] == "book"){
      $product = new BookProduct($row[&#39;title&#39;],
        $row[&#39;firstname&#39;],
        $row[&#39;mainname&#39;],
        $row[&#39;price&#39;],
        $row[&#39;numpages&#39;]
        );
    }else if($row[&#39;type&#39;] == "cd"){
      $product = new CdProduct($row[&#39;title&#39;],
        $row[&#39;firstname&#39;],
        $row[&#39;mainname&#39;],
        $row[&#39;price&#39;],
        $row[&#39;playLength&#39;]
        );
    }else{
      $product = new ShopProduct($row[&#39;title&#39;],
        $row[&#39;firstname&#39;],
        $row[&#39;mainname&#39;],
        $row[&#39;price&#39;]
        );
    }
    $product->setId($row[&#39;id&#39;]);
    $product->setDiscount($row[&#39;discount&#39;]);
    return $product;
  }
  public function getProducerFirstName(){
    return $this->producerFirstName;
  }
  public function getProducerMainName(){
    return $this->producerMainName;
  }
  public function setDiscount($num){
    $this->discount = $num;
  }
  public function getDiscount(){
    return $this->discount;
  }
  public function getTitle(){
    return $this->title;
  }
  public function getPrice(){
    return ($this->price - $this->discount);
  }
  function getProducer(){
    return $this->producerFirstName." ".$this->producerMainName;
  }
  function getSummaryLine(){
    $base = "$this->title({$this->producerMainName},";
    $base .= "{$this->producerFirstName})";
    return $base;
  }
}
class CdProduct extends ShopProduct{
  private $playLength;
  function __construct($title,$firstName,$mainName,$price,$playLength){
    parent::__construct($title,$firstName,$mainName,$price);//继承父类的构造函数
    $this->playLength = $playLength;
  }
  function getPlayLength(){
    return $this->playLength;
  }
  function getSummaryLine(){
    $base = parent::getSummaryLine();
    $base .= ":playing time {$this->playLength}";
    return $base;
  }
}
class BookProduct extends ShopProduct{
  private $numPages = 0;
  function __construct($title,$firstName,$mainName,$price,$numPages){
    parent::__construct($title,$firstName,$mainName,$price);
    $this->numPages = $numPages;
  }
  function getnumPages(){
    return $this->numPages;
  }
  function getSummaryLine(){
    $base = parent::getSummaryLine();
    $base .= ":page count {$this->numPages}";
    return $base;
  }
}
$dsn = "sqlite:C:/Users/Administrator/Desktop/shop.db";
$pdo = new PDO($dsn,null,null);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$obj = ShopProduct::getInstance(1,$pdo);
echo $obj->getSummaryLine();

Ich hoffe, dieser Artikel wird für alle hilfreich sein, die sich mit PHP-Programmierung befassen . Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn