Heim  >  Artikel  >  Backend-Entwicklung  >  Fallanalyse erweiterter Funktionen von PHP-Objekten, -Mustern und -Praktiken

Fallanalyse erweiterter Funktionen von PHP-Objekten, -Mustern und -Praktiken

墨辰丷
墨辰丷Original
2018-05-29 16:48:191273Durchsuche

In diesem Artikel werden hauptsächlich die erweiterten Funktionen, Muster und Praktiken von PHP-Objekten vorgestellt und die Konzepte und Einfachheit statischer Eigenschaften und Methoden, abstrakter Klassen, Schnittstellen, Interceptoren, geklonter Objekte usw. in der objektorientierten PHP-Programmierung analysiert In Form von Beispielen können sich Freunde, die sie benötigen, auf

wie folgt beziehen:

Zu den erweiterten Funktionen

gehören:

1. Statische Methode und Attribute (Zugriff auf Daten und Funktionalität über Klassen statt über Objekte)
2. Abstrakte Klassen und Schnittstellen (Design, Implementierungstrennung)
3. Fehlerbehandlung (Ausnahmen)
4. Endgültige Klassen und Methoden (Einschränkungen Vererbung)
5. Interceptor (automatische Delegation)
6. Destruktormethode (Bereinigung vor Objektzerstörung)
7. Objekt klonen (eine Kopie des Objekts erstellen)
8 . Analysieren Sie das Objekt in eine Zeichenfolge

PS, lernen Sie, den Code aus der Perspektive des Gedächtnisses zu betrachten. Stellen Sie sich die mikroskopische Welt der Computer vor.

Kleines Beispiel einer statischen Methode

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

Tipps:

1. Statische Methoden können nicht sein Auf normale Eigenschaften in einer Klasse hat zugegriffen, da diese Eigenschaften zu einem Objekt gehören, auf statische Eigenschaften kann jedoch zugegriffen werden.
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();

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, das wird so sein für die Lernhilfe aller nützlich sein.


Verwandte Empfehlungen:

php-objektorientierte Programmierung, PHP-objektorientierte Programmierung

PHP-objektorientiertes Klonobjekt

Serialisierung von Objekten in PHP, PHP-Objektserialisierung

Das obige ist der detaillierte Inhalt vonFallanalyse erweiterter Funktionen von PHP-Objekten, -Mustern und -Praktiken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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