検索
ホームページバックエンド開発PHPチュートリアルPHPオブジェクト指向でよく使われるキーワードとマジックメソッドを詳しく解説

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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
トラフィックの高いウェブサイトのPHPパフォーマンスチューニングトラフィックの高いウェブサイトのPHPパフォーマンスチューニングMay 14, 2025 am 12:13 AM

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

PHPでの依存関係注射:初心者向けのコード例PHPでの依存関係注射:初心者向けのコード例May 14, 2025 am 12:08 AM

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

PHPパフォーマンス:アプリケーションを最適化することは可能ですか?PHPパフォーマンス:アプリケーションを最適化することは可能ですか?May 14, 2025 am 12:04 AM

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

PHPパフォーマンスの最適化:究極のガイドPHPパフォーマンスの最適化:究極のガイドMay 14, 2025 am 12:02 AM

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

PHP依存性噴射コンテナ:クイックスタートPHP依存性噴射コンテナ:クイックスタートMay 13, 2025 am 12:11 AM

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

PHPの依存噴射対サービスロケーターPHPの依存噴射対サービスロケーターMay 13, 2025 am 12:10 AM

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

PHPパフォーマンス最適化戦略。PHPパフォーマンス最適化戦略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPメールの検証:電子メールが正しく送信されるようにしますPHPメールの検証:電子メールが正しく送信されるようにしますMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。