ホームページ バックエンド開発 PHPチュートリアル PHP の 16 個のマジック メソッドをすべて知っていますか?

PHP の 16 個のマジック メソッドをすべて知っていますか?

Mar 11, 2021 am 11:18 AM
php

No.1 __construct()

定义:类的构造函数
解释:对象创建后第一个被自动调用的方法,通常被用来执行一些有用的初始化任务,例如在创建对象时对成员属性赋予初始值。
例子:
Class Person{
    public $name;
    public $age;
    public $sex;

    public function __construct($name = '', $sex = '男', $age = 28) {
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }}注意:如果子类中定义了构造函数则不会调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()
ログイン後にコピー
NO.2 __destruct() [不常见]
定义:类的析构函数
解释:与构造函数相反,在类销毁之前执行一些操作,比如关闭文件、释放结果等。
例子:
主动调用 unset( $obj )主动调用 $obj = NULL程序自动结束
ログイン後にコピー
NO.3 __call()
定义:在对象中调用一个不存在的方法时 自动调用
解释:为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用 __call() 方法来避免。
ログイン後にコピー
NO.4 __callStatic()
定义:同上 不同在于调用静态方法时 自动调用
ログイン後にコピー
NO.5 __get()
定义:可以在对象的外部获取私有成员属性的值
例子:private $name;function __construct($name="", $age=1){
    $this->name = $name;}public function __get($propertyName){   
    return $this->$propertyName;}// 通过Person类实例化的对象,并通过构造方法为属性赋初值$Person = new Person("小明", 60);// 直接访问私有属性name,自动调用了__get()方法可以间接获取echo "姓名:" . $Person->name . "<br>";
ログイン後にコピー
No.6 __set()
定义:与__get()类似 为私有属性赋值
例子:public function __set($propertyName, $value){
    $this->$propertyName = $value;}
ログイン後にコピー
No.7 __isset()
定义:在类外部 判断属性isset()例子:public function __isset($content) {
    echo "当在类外部使用isset()函数测定私有成员{$content}时,自动调用<br>";
    echo  isset($this->$content);}echo isset($person->name);
ログイン後にコピー
No.8 __unset()
定义:在类外部删除私有变量时自动调用
ログイン後にコピー
No.9 __sleep()
定义:执行serialize时会被自动调用
例子:public function __sleep(){
    $this->name = base64_encode($this->name);
    return ['name', 'age'];}echo serialize($person);
ログイン後にコピー
No.10 __wakeup()
定义:与__sleep类似 在执行unserialize()时被自动调用
ログイン後にコピー
No.11 __toString()
定义:当类被当成字符串输出时如何响应 例如 echo $obj; 应该显示些什么。

注意:此方法必须返回一个字符串,否则将发出一条 `E_RECOVERABLE_ERROR` 级别的致命错误。

警告:不能在 __toString() 方法中抛出异常。这么做会导致致命错误。
ログイン後にコピー
NO.12 __invoke()
定义:当尝试以调用函数的方式调用一个对象生效
例子:public function __invoke() {
    echo '拿我当函数用,我就会被自动调用';}$person = new Perseon();$person();
ログイン後にコピー
No.13 __set_state()
定义:调用var_export导出类时,该方法自动被调用。
ログイン後にコピー
No.14 __clone()
定义:当对象复制完成时调用
例子:public function __clone(){
    echo __METHOD__."你正在克隆对象<br>";
    $this->name = 'new name';
    $this->age = 18;}$copy_of_object = clone $object;
ログイン後にコピー
No.15 __autoload()
定义:尝试加载未定义的类
例子:function  __autoload($className) {  
    $filePath = “project/class/{$className}.php”;  
    // 判断文件是否可读
    if (is_readable($filePath)) {  
        require($filePath);  
    }  }  if (条件A) {  
    $a = new A();  
    $b = new B();  
    $c = new C();  
    // … 业务逻辑  } else if (条件B) {  
    $a = newA();  
    $b = new B();  
    // … 业务逻辑  }注意:这里可以只用require,因为一旦包含进来后,php引擎再遇到类A时,将不会调用__autoload,而是直接使用内存中的类A,不会导致多次包含。

扩展:<?phpclass autoloader {
  public static $loader;
  public static function init() {
    if (self::$loader == NULL)
      self::$loader = new self ();
    return self::$loader;
  }
  public function __construct() {
    spl_autoload_register ( array ($this, &#39;model&#39; ) );
    spl_autoload_register ( array ($this, &#39;library&#39; ) );
  }
  public function model($class) {
    $class = preg_replace ( &#39;/_model$/ui&#39;, &#39;&#39;, $class );
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/model/&#39; );
    spl_autoload_extensions ( &#39;.model.php&#39; );
    spl_autoload ( $class );
  }
  public function library($class) {
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/lib/&#39; );
    spl_autoload_extensions ( &#39;.library.php&#39; );
    spl_autoload ( $class );
  }}//callautoloader::init ();?>
ログイン後にコピー
No.16 __debugInfo()
定义:打印所需调试信息
例子:public function __debugInfo(){
    return [
        'message' => "姓名:".$this->name . " 年龄:".$this->age    ];}$person = new Person('tongfei', 28);var_dump($person);
ログイン後にコピー

【推荐学习:《PHP视频教程》】

以上がPHP の 16 個のマジック メソッドをすべて知っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

See all articles