PHPオブジェクト指向でよく使われるキーワードとマジックメソッドを詳しく解説

怪我咯
リリース: 2023-03-13 11:16:01
オリジナル
1764 人が閲覧しました

1.construct()

インスタンス化されたオブジェクトが自動的に呼び出されます。 Construct は、construct とそのクラス名と関数名の関数が同時に存在する場合に呼び出され、もう一方は呼び出されません。

クラス名と関数名が付いている関数は古いバージョンのコンストラクターです。

2.destruct()

は、オブジェクトを削除するとき、またはオブジェクトの操作が終了するときに呼び出されます。

3.call()

オブジェクトはメソッドを呼び出します。メソッドが存在しない場合は、このメソッドを呼び出します

4.get()

オブジェクトのプロパティを読み取り、オブジェクトのプロパティがプライベートの場合、値を代入するときに

5.set()

Ifを呼び出します。オブジェクトのプロパティ プロパティが private の場合に呼び出されます

6.toString()

オブジェクトを印刷するときに呼び出されます。

7.clone()

は、次のようにオブジェクトのクローンを作成するときに呼び出されます: $a=new test(); $a1=clone $a;

8.sleep()

の場合、Serializeが前に呼び出されます。オブジェクト比較 大きいので、シリアル化中にいくつかのものを削除したい場合に使用できます。

9.wakeup()

は、オブジェクトの初期化作業を行うために、Unserialize 中に呼び出されます。

10.isset()

オブジェクトの属性が存在するかどうかを検出します。検出された属性がプライベートである場合に呼び出されます。

11.unset()

オブジェクト属性を削除する場合、削除されたオブジェクト属性がプライベートである場合に呼び出されます。

12.set_state()

var_export が呼び出されたときに呼び出されます。 set_state の戻り値を var_export の戻り値として使用します。

13.autoload()

オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドは無視されます。


以下のエディターでは、

PHP オブジェクト指向よく使用されるキーワードと魔法のメソッドについて詳しく説明します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして見てみましょう

オブジェクト指向 PHP 2 でよく使用されるキーワード。Final はクラスとメソッドのみを変更できます機能:

final で変更されたクラスはサブクラスに継承できません Final で変更されたメソッドはサブクラスによってオーバーライドできません

クラスの継承とメソッドの継承を制限するために使用されます。オーバーライドするには、final

<?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 (static キーワード) を使用します

1。およびメンバーメソッドは変更できますが、クラスは変更できません

2. static で変更されたメンバープロパティは同じクラスで変更できますすべてのオブジェクトが共有されます

3. 静的データはメモリ内のデータセグメントに保存されます (静的セグメントの初期化)

4 . 静的データは、クラスが初めてロードされるときにメモリに割り当てられ、後で使用されます。クラスがロードされると、データセグメントから直接取得されます

5. ロードされたクラスとは何ですか?このクラスがプログラム内で使用されている限り(このクラス名が表示されます)6. 静的メソッド(静的に変更されたメソッド)は非静的メンバーにアクセスできません(静的メンバーは非静的メソッドでアクセスできます)非静的メンバーはオブジェクトを使用してアクセスする必要があります。内部メンバーにアクセスするには、静的メソッドをオブジェクトで呼び出す必要がないため、非静的メンバーも使用できるオブジェクトはありません。オブジェクト

メソッド内で非静的メンバーが使用されていないことが確実な場合は、このメソッドを静的メソッドとして宣言できます

注: 静的メンバーにはクラス名を使用してアクセスする必要があり、

オブジェクトを作成

しないでください。オブジェクトアクセスは使用しない

クラス名::静的メンバー

クラスで静的メンバーを使用する場合、selfを使用してクラスを表すことができます

const

1。メンバー属性のみを変更できます。 2. クラス内で定数属性を宣言するには const を使用します

3. アクセス方法は静的メンバーのプロパティと同じです (クラス外では class name::constant を使用し、クラス内では self::constant を使用します)

4. 定数は必須です。宣言時に初期値が与えられる

<?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>";
  }
}
ログイン後にコピー

PHP オブジェクト指向でよく使われるマジックメソッド

call()

機能:オブジェクトに存在しないメソッドを呼び出す場合、システムエラーが表示され、プログラムが終了します。

自動的に呼び出す場合: オブジェクトに存在しないメソッドを呼び出すときに自動的に呼び出されます存在しないエラー呼び出しを処理しますこのメソッドには 2 つのパラメータが必要です

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

オブジェクト参照を直接出力するときに自動的に呼び出され、文字列表現を素早く取得する最速の方法

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

クローンオブジェクトはclone()を使用して処理されますOriginal(元のオブジェクト)Copy(コピーされたオブジェクト)

clone() は、オブジェクトのクローン作成時に自動的に呼び出されるメソッドです

オブジェクトが作成されるとすぐに、コンストラクターメソッド constuct に似た初期化アクションが必要です

在clone()方法中的$this关键字代表的是复本的对象,$that代表原本对象

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

注意:其它的魔术方法都是在类中添加起作用,这是唯一一个不在类中添加的方法

只要在页面中使用到一个类,只要用到类名,就会自动将这个类名传给这个参数

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

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

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

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

?>
ログイン後にコピー

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>";
  }
}
?>
ログイン後にコピー

对象串行化(序列化):将一个对象转为二进制串(对象是存储在内存中的,容易释放)

使用时间:

1.将对象长时间存储在数据库或文件中时

2.将对象在多个PHP文件中传输时

serialize(); 参数是一个对象,返回来的就是串行化后的二进制串

unserialize(); 参数就是对象的二进制串,返回来的就是新生成的对象

sleep()

是在序列化时调用的方法

作用:就是可以将一个对象部分串行化

只要这个方法中返回一个数组,数组中有几个成员属性就序列化几个成员属性,如果不加这个方法,则所有成员都被序列化

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オブジェクト指向でよく使われるキーワードとマジックメソッドを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート