Maison  >  Article  >  développement back-end  >  Explication détaillée des mots-clés et méthodes magiques couramment utilisés en PHP orienté objet

Explication détaillée des mots-clés et méthodes magiques couramment utilisés en PHP orienté objet

墨辰丷
墨辰丷original
2018-05-26 11:07:32992parcourir

Cet article présente principalement l'explication détaillée des mots-clés et des méthodes magiques couramment utilisés en PHP orienté objet. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Mots clés couramment utilisés en PHP orienté objet

final

1.final ne peut pas modifier les attributs des membres (ce mot-clé n'est pas utilisé pour les constantes dans les classes)

2.final ne peut modifier que les classes et les méthodes

Fonction :

Les classes modifiées avec final ne peuvent pas être héritées par les sous-classes

Les méthodes modifiées avec final ne peuvent pas être remplacées par les sous-classes

Utilisé pour restreindre l'héritage des classes, utilisez final si la méthode n'est pas remplacée

<?php
//final修饰的类不能被继承
final class Person{
  var $name;
  var $age;
  var $sex;

  function __construct($name,$age,$sex){
    $this->name=$name;
    $this->age=$age;
    $this->sex=$sex;
  }

  function fun1(){
    echo $this->name;
  }
}

//Student类继承类用final修饰的Person类,所以会报错
class Student extends Person{
}

$stu=new Student("zs",20,"nan");

$stu->fun1();
?>

static (mot-clé statique)

1. Utiliser Les attributs membres statiques et les méthodes membres peuvent être modifiés, mais les classes ne peuvent pas être modifiées

2 Les attributs membres modifiés avec static peuvent être partagés par tous les objets de la même classe

3. en mémoire Dans le segment de données (initialisation du segment statique)

4. Les données statiques sont allouées à la mémoire lorsque la classe est chargée pour la première fois Lorsque la classe est réutilisée dans le futur, elle le sera. obtenu directement à partir du segment de données

5. Qu'est-ce qu'une classe chargée ? Tant que cette classe est utilisée dans le programme (ce nom de classe apparaît)

6. Les méthodes statiques (méthodes statiques modifiées) ne peuvent pas accéder aux membres non statiques (les membres statiques sont accessibles dans les méthodes non statiques)

Étant donné que les membres non statiques doivent être accessibles à l'aide d'objets, $this est utilisé pour accéder aux membres internes n'ont pas besoin d'être appelés avec des objets, il n'y a donc pas d'objet et $this ne peut pas représenter un objet. Elle est non statique. Les membres doivent également utiliser des objets

Si vous êtes sûr que les membres non statiques ne sont pas utilisés dans une méthode, vous pouvez déclarer cette méthode comme méthode statique

Remarque : Les membres statiques doivent utiliser des noms de classe Pour y accéder, ne créez pas d'objets, n'utilisez pas d'objets pour accéder

Nom de classe :: membre statique

Si vous utilisez des membres statiques dans une classe, vous pouvez utiliser self pour représenter cette classe

const

1 Il ne peut modifier que les attributs des membres

2. >

pour déclarer des attributs constants dans une classe 3. Méthode d'accès Identique aux attributs de membre statiques (utilisez class name::constant en dehors de la classe et self::constant à l'intérieur de la classe)

4. étant données des valeurs initiales lorsqu'elles sont déclarées

<?php
//定义一个类“人们”
class Person{
  protected $name;
  protected $age;
  protected $sex;
  static $country="中国";
  //声明一个常量
  const RUN="走";

  //构造方法
  function __construct($name,$age,$sex){
    $this->name=$name;
    $this->age=$age;
    $this->sex=$sex;
  }

  function getCountry(){
    //如果在类中使用静态成员,可以使用self代表本类
    return self::$country;
  }

  function say(){
    echo "我的名字:{$this->name},我的年龄:{$this->age},我的性别:{$this->sex}。<br>";
  }

  protected function eat(){
    echo "吃饭!<br>";
  }

  function run(){
    //在类的内部使用常量 self::常量
    echo self::RUN."<br>";
  }

  //声明静态的方法
  static function hello(){
    echo "你好<br>";
  }
}

Méthodes magiques couramment utilisées en PHP orienté objet

__call()

Fonction : Lors de l'appel d'une méthode qui n'existe pas dans l'objet, une erreur système apparaîtra, puis le programme se terminera.

Quand appeler automatiquement : il appellera automatiquement lors de l'appel d'une méthode qui n'existe pas dans un objet

Gérer certains appels d'erreur inexistants

Cette méthode nécessite deux paramètres

<?php
//定义一个类“人们”
class Person{
  protected $name;
  protected $age;
  protected $sex;
  static $country="中国";
  //声明一个常量
  const RUN="走";

  //构造方法
  function __construct($name,$age,$sex){
    $this->name=$name;
    $this->age=$age;
    $this->sex=$sex;
  }

  function getCountry(){
    //如果在类中使用静态成员,可以使用self代表本类
    return self::$country;
  }

  function say(){
    echo "我的名字:{$this->name},我的年龄:{$this->age},我的性别:{$this->sex}。<br>";
  }

  protected function eat(){
    echo "吃饭!<br>";
  }

  function run(){
    //在类的内部使用常量 self::常量
    echo self::RUN."<br>";
  }

  //处理一些不存在的错误调用
  //就会在调用一个对象中不存在的方法时就会自动调用
  function __call($methodName,$args){
    //$methodName调用不存在方法的方法名 $args里面的参数
    echo "你调用的方法{$methodName}(参数:";
    print_r($args);
    echo ")不存在<br>";
  }

  //声明静态的方法
  static function hello(){
    echo "你好<br>";
  }
}

$p=new Person("张三",20,"女");

$p->test(10,20,30);
$p->demo("aa","bb");
$p->say();
?>

__toString()

lors de la sortie directe de la référence de l'objet Appelé automatiquement , le moyen le plus rapide d'obtenir rapidement une représentation sous forme de chaîne

<?php
//定义一个类“人们”
class Person{
  protected $name;
  protected $age;
  protected $sex;
  static $country="中国";
  //声明一个常量
  const RUN="走";

  //构造方法
  function __construct($name,$age,$sex){
    $this->name=$name;
    $this->age=$age;
    $this->sex=$sex;
  }

  function say(){
    echo "我的名字:{$this->name},我的年龄:{$this->age},我的性别:{$this->sex}。<br>";
  }

  function __toString(){
    return self::$country."<br>{$this->name}<br>{$this->age}<br>{$this->sex}<br>".self::RUN;
  }
}

$p=new Person("张三",21,"女");
echo $p;
?>

__clone()

Les objets clones sont traités à l'aide de clone()

Original (objet original)

Copie (objet copié)

__clone() est une méthode qui est automatiquement appelée lors du clonage d'un object

Dès qu'un objet est créé, il doit y avoir une action d'initialisation, qui est similaire à la méthode constructeur __constuct

$this dans la méthode __clone() Le mot-clé représente l'objet copié , $qui représente l'objet d'origine

<?php
//定义一个类“人们”
class Person{
  var $name;
  protected $age;
  protected $sex;
  static $country="中国";
  //声明一个常量
  const RUN="走";

  //构造方法
  function __construct($name,$age,$sex){
    $this->name=$name;
    $this->age=$age;
    $this->sex=$sex;
  }

  function say(){
    echo "我的名字:{$this->name},我的年龄:{$this->age},我的性别:{$this->sex}。<br>";
  }

  function __clone(){
    $this->name="王五";
    $this->age=18;
    $this->sex="男";
  }

  function __destruct(){
    echo $this->name."<br>";
  }
}

$p=new Person("张三",21,"女");
$p->say();
//这并不能叫做克隆对象,因为在析构时只析构一次
/*$p1=$p;
$p1->name="李四";
$p1->say();*/

$p1= clone $p;
$p1->say();
?>

__autoload()

Remarque : D'autres méthodes magiques sont ajoutées à la classe. C'est la seule méthode qui n'est pas ajoutée à la classe

Tant qu'une classe est utilisée dans la page, tant qu'elle est utilisée, le nom de la classe sera. être automatiquement passé au paramètre


<?php
function __autoload($className){
  include "./test/".$className.".class.php";
}

  $o=new One;
  $o->fun1();  

  $t=new Two;
  $t->fun2();

  $h=new Three;
  $h->fun3();

?>

le fichier en test

one class.php

<?php
class One{
  function fun1(){
    echo "The Class One<br>";
  }
}
?>

two.class.php

<?php
class Two{
  function fun2(){
    echo "The Class Two<br>";
  }
}
?>

three.class.php

<?php
class Three{
  function fun3(){
    echo "The Class Three<br>";
  }
}
?>

Sérialisation d'objet (sérialisation) : Convertir un objet en chaîne binaire (l'objet est stocké en mémoire, facile à libérer)

Durée d'utilisation : 1. Lorsque des objets sont stockés dans des bases de données ou des fichiers pendant une longue période

2. Lors du transfert d'objets dans plusieurs fichiers PHP <.>

serialize(); Le paramètre est un objet et la chaîne binaire renvoyée est la chaîne binaire sérialisée

unserialize(); 🎜>

__sleep()

est la méthode appelée lors de la sérialisationFonction : Elle peut sérialiser partiellement un objet

Tant que cette méthode renvoie un tableau et qu'il y a plusieurs attributs membres dans le tableau, elle sérialisera plusieurs attributs membres. Si cette méthode n'est pas ajoutée, alors tous les membres sont sérialisés

.

__wakeup()

是在反序列化时调用的方法

也是对象重新诞生的过程

<?php
//定义一个类“人们”
class Person{
  var $name;
  protected $age;
  protected $sex;
  static $country="中国";
  //声明一个常量
  const RUN="走";

  //构造方法
  function __construct($name,$age,$sex){
    $this->name=$name;
    $this->age=$age;
    $this->sex=$sex;
  }

  function say(){
    echo "我的名字:{$this->name},我的年龄:{$this->age},我的性别:{$this->sex}。<br>";
  }

  function __clone(){
    $this->name="王五";
    $this->age=18;
    $this->sex="男";
  }

  //是在序列化时调用的方法,可以部分串行化对象
  function __sleep(){
    return array("name","age");
  }

  //是在反序列化时调用的方法,也是对象重新诞生的过程。可以改变里面的值
  function __wakeup(){
    $this->name="sanzhang";
    $this->age=$this->age+1;
  }

  function __destruct(){

  }
}
?>

read.php

<?php
  require "11.php";
  
  $str=file_get_contents("mess.txt");
  $p=unserialize($str);

  echo $p->say();
?>

write.php

<?php
  require "11.php";

  $p=new Person("张三",18,"男");

  $str=serialize($p);

  file_put_contents("mess.txt",$str);
?>

以上就是本文的全部内容,希望对大家的学习有所帮助。


相关推荐:

PHP中关键字interface和implements图文详解

详细讲解php 类、方法关键字教程

了解SQL INNER JOIN 关键字的相关知识

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