国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison php教程 PHP開發(fā) Explication détaillée des fonctionnalités avancées de la programmation orientée objet PHP (interface, héritage, classe abstraite, destruction, clonage, etc.)

Explication détaillée des fonctionnalités avancées de la programmation orientée objet PHP (interface, héritage, classe abstraite, destruction, clonage, etc.)

Dec 30, 2016 am 10:01 AM

Les exemples de cet article décrivent les fonctionnalités avancées de la programmation orientée objet PHP. Partagez-le avec tout le monde pour votre référence, comme suit?:

Propriétés statiques

<?php
class StaticExample {
  static public $aNum = 0; // 靜態(tài)共有屬性
  static public function sayHello() { // 靜態(tài)共有方法
    print "hello";
  }
}
print StaticExample::$aNum;
StaticExample::sayHello();
?>

Sortie?: 0 bonjour

Commentaires?: les propriétés et méthodes statiques peuvent être appelées directement via les classes .

SELF

<?php
class StaticExample {
  static public $aNum = 0;
  static public function sayHello() { // 這里的static 和 public的順序可以顛倒
    self::$aNum++;
    print "hello (".self::$aNum.")\n"; // self 指向當(dāng)前類, $this指向當(dāng)前對(duì)象。
  }
}
StaticExample::sayHello();
StaticExample::sayHello();
StaticExample::sayHello();
?>

Sortie?:

hello (1)
hello (2)
hello (3)

Commentaires?: self pointe vers la classe actuelle, cela pointe à l'objet actuel. self peut appeler les propriétés et méthodes statiques de la classe actuelle. cela pointe vers l'objet actuel. self peut appeler les propriétés et méthodes statiques de la classe actuelle. cela peut appeler les propriétés et méthodes normales de la classe actuelle.

Attribut constant

<?php
interface Chargeable { // 接口,抽象類是介于基類與接口之間的東西
  public function getPrice();
}
class ShopProduct implements Chargeable {
  // ...
  protected $price;
  // ...
  public function getPrice() {
    return $this->price;
  }
  // ...
}
$product = new ShopProduct();
?>

Si la méthode getPrice n'est pas implémentée, une erreur sera signalée.

Erreur fatale?: La classe ShopProduct contient 1 méthode abstraite et doit donc être déclarée abstraite ou implémenter les méthodes restantes (Chargeable::getPrice)

Classes et interfaces héritées

<?php
class TimedService{ }
interface Bookable{ }
interface Chargeable{ }
class Consultancy extends TimedService implements Bookable, Chargeable { // 繼承類與接口
  // ...
}
?>

Classe abstraite

Regardons d'abord un morceau de code

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

Sortie?:

Document Object
(
)

Statique méthode

<?php
abstract class DomainObject {
  private $group; // 私有屬性group
  public function __construct() {
    $this->group = static::getGroup();//static 靜態(tài)類
  }
  public static function create() {
    return new static();
  }
  static function getGroup() { // 靜態(tài)方法
    return "default";
  }
}
class User extends DomainObject {
}
class Document extends DomainObject {
  static function getGroup() { // 改變了內(nèi)容
    return "document";
  }
}
class SpreadSheet extends Document { // 繼承之后,group也就與document相同了
}
print_r(User::create());
print_r(SpreadSheet::create());
?>

Sortie?:

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

champ final

rend la classe impossible à hériter et est pas beaucoup utilisé

<?php
final class Checkout { // 終止類的繼承
  // ...
}
class IllegalCheckout extends Checkout {
  // ...
}
$checkout = new Checkout();
?>

Sortie?:

Erreur fatale?: la classe IllegalCheckout ne peut pas hériter de la classe finale (Checkout)

la méthode finale ne peut pas être remplacée

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

Sortie?:

Erreur fatale?: impossible de remplacer la méthode finale Checkout::totalize( )

Destructeur

<?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() { // 析構(gòu)函數(shù)
    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; ); // 最后執(zhí)行析構(gòu)函數(shù),使用完之后執(zhí)行
?>

Sortie?:

ne rien faire

__méthode de clonage

Lors du clonage, exécutez

<?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() { // 克隆時(shí)候執(zhí)行
    $this->id = 0;
  }
}
$person = new Person( "bob", 44 );
$person->setId( 343 );
$person2 = clone $person;
print_r( $person );
print_r( $person2 );
?>

Sortie?:

Person Object
(
  [name:Person:private] => bob
  [age:Person:private] => 44
  [id:Person:private] => 343
)
Person Object
(
  [name:Person:private] => bob
  [age:Person:private] => 44
  [id:Person:private] => 0
)

Regardez Un exemple

<?php
class Account { // 賬戶類
  public $balance; // 余額
  function __construct( $balance ) {
    $this->balance = $balance;
  }
}
class Person {
  private $name;
  private $age;
  private $id;
  public $account;
  function __construct( $name, $age, Account $account ) {
    $this->name = $name;
    $this->age = $age;
    $this->account = $account;
  }
  function setId( $id ) {
    $this->id = $id;
  }
  function __clone() {
    $this->id  = 0;
  }
}
$person = new Person( "bob", 44, new Account( 200 ) ); // 以類對(duì)象作為參數(shù)
$person->setId( 343 );
$person2 = clone $person;
// give $person some money
$person->account->balance += 10;
// $person2 sees the credit too
print $person2->account->balance; // person的屬性account也是一個(gè)類,他的屬性balance的值是210
// output:
// 210
?>

Commentaires : L'apprentissage peut encore développer le cerveau Aujourd'hui, je comprends enfin pourquoi il existe plusieurs concepts de flèches $person-> compte->solde. L'attribut de compte ici est un objet.

__toString

<?php
class Person {
  function getName() { return "Bob"; }
  function getAge() { return 44; }
  function __toString() {
    $desc = $this->getName()." (age ";
    $desc .= $this->getAge().")";
    return $desc;
  }
}
$person = new Person();
print $person; // 打印時(shí)候集中處理
// Bob (age 44)
?>

Commentaires?: Il doit être valide uniquement s'il s'agit d'un print ou d'un echo, print_r affichera l'objet.

Person Object()

J'espère que cet article sera utile à tout le monde dans la programmation PHP.

Pour des explications plus détaillées sur les fonctionnalités avancées de la programmation orientée objet PHP (interfaces, héritage, classes abstraites, destruction, clonage, etc.), veuillez faire attention au site Web PHP chinois !

Déclaration de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276