>백엔드 개발 >PHP 튜토리얼 >PHP 개체, 패턴 및 사례의 고급 기능에 대한 사례 분석

PHP 개체, 패턴 및 사례의 고급 기능에 대한 사례 분석

墨辰丷
墨辰丷원래의
2018-05-29 16:48:191366검색

이 글에서는 주로 PHP 객체의 고급 기능, 패턴 및 사례를 소개하고, PHP 객체지향 프로그래밍에서 정적 속성 및 메서드, 추상 클래스, 인터페이스, 인터셉터, 복제된 객체 등의 개념과 간단한 구현 방법을 다음과 같은 형태로 분석합니다.

자세한 내용은 다음과 같습니다.

고급 기능

포함:

1. 정적 메서드 및 속성(객체 대신 클래스를 통해 데이터 및 함수에 액세스)
2. 추상 클래스 및 인터페이스(설계, 구현 분리)
3. 오류 처리(예외)
4. 최종 클래스 및 메서드(제한된 상속)
5. 소멸자 메서드(객체 소멸 전 정리) . 객체 복제(객체 복사본 생성)
8. 객체를 문자열로 구문 분석합니다.

PS, 메모리의 관점에서 코드를 보는 방법을 배웁니다. 컴퓨터의 미세한 세계를 상상해 보세요.

정적 메서드의 작은 예

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

팁:

1 정적 메서드는 해당 속성이 객체에 속하므로 클래스의 일반 속성에 액세스할 수 없지만 정적 속성에는 액세스할 수 있습니다.

2. 객체에서는 정적 메서드를 호출할 수 없으므로 정적 메서드에서는 의사 변수 $this를 사용할 수 없습니다.


정적 메소드의 대표적인 예

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

위 내용은 이 글의 전체 내용이므로, 모든 분들의 학습에 도움이 되기를 바랍니다.


관련 권장 사항:

php 객체 지향 프로그래밍, php 객체 지향


php 객체 지향 복제 객체


php에서 객체 직렬화, php 객체 직렬화


위 내용은 PHP 개체, 패턴 및 사례의 고급 기능에 대한 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.