Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von Beispielen für die objektorientierte PHP-Schnittstelle, Vererbung, abstrakte Klassen, Zerstörung, Klonen und andere erweiterte Funktionen

Detaillierte Erläuterung von Beispielen für die objektorientierte PHP-Schnittstelle, Vererbung, abstrakte Klassen, Zerstörung, Klonen und andere erweiterte Funktionen

伊谢尔伦
伊谢尔伦Original
2017-06-29 09:36:101287Durchsuche

Dieser Artikel stellt hauptsächlichPHP-objektorientierteProgrammierungErweiterte Funktionen vor und analysiert die statischen Attribute, konstanten Attribute und Schnittstellen, die an der PHP-objektorientierten Programmierung beteiligt sind, in Form von Beispielen ., Vererbung, abstrakte Klasse, Zerstörung, Klonen und andere Konzepte und Nutzungstechniken, Freunde in Not können sich auf

Statische Attribute

<?php
class StaticExample {
  static public $aNum = 0; // 静态共有属性
  static public function sayHello() { // 静态共有方法
    print "hello";
  }
}
print StaticExample::$aNum;
StaticExample::sayHello();
?>
Ausgabe: 0 hallo

Kommentare: Statische

Eigenschaften und Methoden , die direkt über Klassen aufgerufen werden können.

2. SELF

<?php
class StaticExample {
  static public $aNum = 0;
  static public function sayHello() { // 这里的static 和 public的顺序可以颠倒
    self::$aNum++;
    print "hello (".self::$aNum.")\n"; // self 指向当前类, $this指向当前对象。
  }
}
StaticExample::sayHello();
StaticExample::sayHello();
StaticExample::sayHello();
?>
Ausgabe:

hello (1)
hello (2)
hello (3)
Kommentar: self zeigt auf die aktuelle Klasse, dies zeigt auf das aktuelle Objekt . self kann statische Eigenschaften und Methoden der aktuellen Klasse aufrufen. Dies zeigt auf das aktuelle Objekt. self kann statische Eigenschaften und Methoden der aktuellen Klasse aufrufen. Dadurch können die normalen Eigenschaften und Methoden der aktuellen Klasse aufgerufen werden.

3. Konstantenattribute

<?php
class ShopProduct {
  const AVAILABLE   = 0; // 只能用大写字母命名常量
  const OUT_OF_STOCK  = 1;
  public $status;
}
print ShopProduct::AVAILABLE;
?>
Ausgabe: 0

Kommentare: Konstanten können nur in Großbuchstaben geschrieben und direkt über Klassen aufgerufen werden .

4. Schnittstelle

<?php
interface Chargeable { // 接口,抽象类是介于基类与接口之间的东西
  public function getPrice();
}
class ShopProduct implements Chargeable {
  // ...
  protected $price;
  // ...
  public function getPrice() {
    return $this->price;
  }
  // ...
}
$product = new ShopProduct();
?>
Wenn die getPrice-Methode nicht implementiert ist, wird ein Fehler gemeldet.

Schwerwiegender Fehler: Die Klasse ShopProduct enthält 1 abstrakte Methode und muss daher als abstrakt deklariert werden oder die restlichen Methoden implementieren (Chargeable::getPrice)

5 Klassen und Schnittstellen

<?php
class TimedService{ }
interface Bookable{ }
interface Chargeable{ }
class Consultancy extends TimedService implements Bookable, Chargeable { // 继承类与接口
  // ...
}
?>

6. Abstrakte Klasse

Schauen wir uns zuerst einen Code an

<?php
abstract class DomainObject {
}
class User extends DomainObject {
  public static function create() {
    return new User();
  }
}
class Document extends DomainObject {
  public static function create() {
    return new Document();
  }
}
$document = Document::create();
print_r( $document );
?>
Ausgabe:

Document Object
(
)

7. Statische Methode

<?php
abstract class DomainObject {
  private $group; // 私有属性group
  public function construct() {
    $this->group = static::getGroup();//static 静态类
  }
  public static function create() {
    return new static();
  }
  static function getGroup() { // 静态方法
    return "default";
  }
}
class User extends DomainObject {
}
class Document extends DomainObject {
  static function getGroup() { // 改变了内容
    return "document";
  }
}
class SpreadSheet extends Document { // 继承之后,group也就与document相同了
}
print_r(User::create());
print_r(SpreadSheet::create());
?>
Ausgabe:

User Object
(
  [group:DomainObject:private] => default
)
SpreadSheet Object
(
  [group:DomainObject:private] => document
)

7 🎜>Die Klasse kann nicht vererbt werden und wird nicht häufig verwendet

Ausgabe:

<?php
final class Checkout { // 终止类的继承
  // ...
}
class IllegalCheckout extends Checkout {
  // ...
}
$checkout = new Checkout();
?>

Schwerwiegender Fehler: Die Klasse IllegalCheckout erbt möglicherweise nicht von der endgültigen Klasse (Checkout).

Endgültige Methode kann nicht überschrieben werden

Ausgabe:

<?php
class Checkout {
  final function totalize() {
    // calculate bill
  }
}
class IllegalCheckout extends Checkout {
  function totalize() { // 不能重写final方法
    // change bill calculation
  }
}
$checkout = new Checkout();
?>

Schwerwiegender Fehler: Endgültige Methode kann nicht überschrieben werden. Auschecken:: totalize( )

8 🎜>

9. Die Klonmethode

wird beim Klonen ausgeführt

<?php
class Person {
  protected $name;
  private $age;
  private $id;
  function construct( $name, $age ) {
    $this->name = $name;
    $this->age = $age;
  }
  function setId( $id ) {
    $this->id = $id;
  }
  function destruct() { // 析构函数
    if ( ! empty( $this->id ) ) {
      // save Person data
      print "saving person\n";
    }
    if ( empty( $this->id ) ) {
      // save Person data
      print "do nothing\n";
    }
  }
}
$person = new Person( "bob", 44 );
$person->setId( 343 );
$person->setId( &#39;&#39; ); // 最后执行析构函数,使用完之后执行
?>

Ausgabe:

Schauen Sie sich ein anderes Beispiel an

Kommentar: Lernen kann das Gehirn immer noch erweitern. Heute verstehe ich endlich, warum es mehrere Pfeilkonzepte $person->account->balance gibt. Das Kontoattribut ist hier ein Objekt. 10. toString

<?php
class Person {
  private $name;
  private $age;
  private $id;
  function construct( $name, $age ) {
    $this->name = $name;
    $this->age = $age;
  }
  function setId( $id ) {
    $this->id = $id;
  }
  function clone() { // 克隆时候执行
    $this->id = 0;
  }
}
$person = new Person( "bob", 44 );
$person->setId( 343 );
$person2 = clone $person;
print_r( $person );
print_r( $person2 );
?>

Kommentare: Es darf nur gültig sein, wenn es print oder echo ist, print_r gibt das Objekt aus.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für die objektorientierte PHP-Schnittstelle, Vererbung, abstrakte Klassen, Zerstörung, Klonen und andere erweiterte Funktionen. 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