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

墨辰丷
リリース: 2023-03-28 07:06:01
オリジナル
942 人が閲覧しました

この記事では主にPHPオブジェクト指向でよく使われるキーワードやマジックメソッドについて詳しく紹介していますので、興味のある方は参考にしていただければ幸いです。

オブジェクト指向 PHP メソッドでよく使用されるキーワード

関数:

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

クラスの継承を制限するために使用されますメソッドがオーバーライドされていない場合は、final

static (static キーワード)

1 を使用します。ただし、クラス

2 ではありません。 staticで変更されたものは、同じクラスのすべてのオブジェクトで利用可能 共有


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

4. クラスの共有時に静的データがメモリに割り当てられます。初めてロードされ、将来クラスが使用されるときに使用されます。

5. ロードされたクラスとは何ですか?このクラスがプログラム内で使用されている限り(このクラス名が表示されます)

6. 静的メソッド(静的に変更されたメソッド)は非静的メンバーにアクセスできません(静的メンバーは非静的メソッドでアクセスできます)非静的メンバーはオブジェクトを使用してアクセスする必要があります。内部メンバーにアクセスするには、静的メソッドをオブジェクトで呼び出す必要がないため、非静的メンバーも使用できるオブジェクトはありません。オブジェクト メソッド内で非静的メンバーが使用されていないことが確実な場合は、このメソッドを静的メソッドとして宣言できます

注: 静的メンバーにはクラス名を使用してアクセスする必要があり、オブジェクトを作成したり、オブジェクトを使用したりしないでくださいアクセスするオブジェクト

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

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

const

1。メンバー属性のみを変更できます

2。 . クラス内で定数属性を宣言するには const を使用します

3. アクセス方法は静的メンバーのプロパティと同じです (クラス外では class name::constant を使用し、クラス内では self::constant を使用します)。宣言時に初期値が与えられる

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

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>";
  }

  //声明静态的方法
  static function hello(){
    echo "你好<br>";
  }
}
ログイン後にコピー

__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 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();
?>
ログイン後にコピー

__clone()

クローンオブジェクトはclone()を使用して処理されます

オリジナル(元のオブジェクト) Copy (コピーされたオブジェクト)

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

オブジェクトが作成されるとすぐに、初期化アクションと構築メソッドが必要です __constuct には同様の機能があります

__clone() メソッドの $this キーワードはコピー オブジェクトを表し、$that は元のオブジェクトを表します

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

__autoload()

注: その他 すべてのマジック メソッドがクラスに追加されます。これは、クラスに追加されない唯一のメソッドです。ページ内でクラスが使用され、クラス名が使用されている限り、クラス名はこのパラメーターに自動的に渡されます。 test

one.class.php

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

two.class.php

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

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

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

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

?>
ログイン後にコピー

three.class.php

<?php
class One{
  function fun1(){
    echo "The Class One<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中关键字interface和implements图文详解

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

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

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

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