Maison  >  Article  >  développement back-end  >  Analyse de cas de fonctionnalités avancées d'objets, de modèles et de pratiques PHP

Analyse de cas de fonctionnalités avancées d'objets, de modèles et de pratiques PHP

墨辰丷
墨辰丷original
2018-05-29 16:48:191339parcourir

Cet article présente principalement les fonctionnalités avancées des objets, modèles et pratiques PHP, et analyse les concepts et la simplicité des propriétés et méthodes statiques, des classes abstraites, des interfaces, des intercepteurs et des objets clonés dans la programmation orientée objet PHP sous la forme de Exemples. Pour la méthode de mise en œuvre, les amis qui en ont besoin peuvent se référer à

comme suit :

Les fonctionnalités avancées

incluent :

1. Méthode et attributs statiques (accès aux données et fonctionnalités via des classes au lieu d'objets)
2. Classes et interfaces abstraites (conception, séparation de l'implémentation)
3. Gestion des erreurs (exceptions)
4. Classes finales et méthodes (restrictions Héritage)
5. Intercepteur (délégation automatique)
6. Méthode Destructeur (nettoyage avant destruction de l'objet)
7. Cloner l'objet (créer une copie de l'objet)
8. Analyser l'objet dans une chaîne

PS, apprenez à regarder le code du point de vue de la mémoire. Imaginez le monde microscopique des ordinateurs.

Un petit exemple de méthode statique

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

conseils :

1. méthode Les propriétés normales d'une classe ne sont pas accessibles car ces propriétés appartiennent à un objet, mais les propriétés statiques sont accessibles.
2. Nous ne pouvons pas appeler de méthodes statiques dans les objets, nous ne pouvons donc pas utiliser la pseudo variable $this dans les méthodes statiques.

Grand exemple de méthode statique

<?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();

Ce qui précède est tout le contenu de cet article, j'espère vous pouvez en tirer des leçons.


Recommandations associées :

programmation orientée objet php, php orientée objet

Objet clone orienté objet php

Sérialisation d'objets en php, sérialisation d'objet php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn