検索

这篇文章详细的对php中的常用魔术方法进行了整理归纳,分享给大家供大家参考,具体内容如下

1、PHP把所有”__”开头的方法当做魔术方法,所以任何自定义的方法都不能是”__”开头
php提供的重载,是指动态的创建属性或方法。重载是通过魔术方法来实现的。这些魔术方法的参数不能饮用传递,__get(),__set(),__isset(),__unset(),实现类属性重载。
2、当访问类中不可访问的属性时,将调用__get()方法
3、当访问类中不可访问的属性时,根据不同的情况会调用__get(),__set(),__isset(),__unset(),其中当访问属性 时,使用函数isset()或empty()时,将调用__isset()方法使用unset()函数时,将调用__unset()方法。
4、这四个方法不能使用static关键词定义,在php5.3.0后,一个warning级别的警告将发生,当使用static方法定义这4个方法。
5、何谓不可访问的属性:(1)类中没有的属性,(2)私有变量在类外被访问。方法重载,通过__call()和__callstatic()来实 现,两者的区别是一个上下文环境是否是静态方法,后者在调用不可访问的静态方法时会被调用。__callstatic()是在php5.3.0中才被添 加。
6、__sleep()和__wakeup()
serialize()序列化时,会先检查是否存在__sleep()函数,如果存在,则先调用__sleep(),返回一个包含所有变量名称的数组,如果该方法不返回任何内容,则null被序列化,并产生一个notice级别的错误。
__wakeup()方法和__sleep()相反,在调用unserialize()时被调用
7、__toString(),让一个类决定它如何转换成字符串,在php5.2.0之前,这个方法只能结合echo或print方法生效,php5.2.0之后,可以结合printf()修饰,但修饰的时候也不能用类似%d之类的非字符修饰符。
8、__invoke(),当尝试以调用函数的方式调用对象时,将出发这个函数,只在php5.3之后生效。
9、__set_state()静态方法,当调用var_export()的时候,才会调用这个静态方法,php5.1.0之后生效。唯一参数是接收一个数组。
10、__construct()和__destruct(),构造函数和析构函数,构造函数主要用于类的初始化,析构函数在某个对象的所有引用都 删除后或者对象被显示的销毁时运行。在析构函数中不允许抛出异常,否则会出发一个fatal error,析构函数在脚本结束时调用,此时所有的http header都已经发出.
11、__clone(),对象复制,此方法不能直接被调用,必须通过clone关键字显示调用

代码:

//实例化对象时,会调用对象的__construct方法
$obj = new Object();
//给对象不存在的属性赋值时,会调用对象的__set方法
$obj->title = "hello";
//使用对象不存在的属性时,会调用对象的__get方法
echo $obj->title;
//调用对象不存在的方法时,会调用对象的__call方法
$obj->test("hello",123,567);
//调用不存在的类静态方法时,会调用类的__callStatic方法
Object::staticMethod("static","not found method");
//直接输出对象时,会调用对象的__toString方法
echo $obj;
//将一个对象当作函数一样使用时,会调用对象的__invoke方法
echo $obj("test");
//克隆对象时,会调用对象的__clone方法
$obj2 = clone $obj;
//判断对象属性是否存在时,会调用对象的__isset方法
var_dump(isset($obj->aaa));
//销毁对象属性时,会调用对象的__unset方法
unset($obj->aaa);
 
 
class Object{
 
  protected $array = array();
 
  function __construct()
  {
    echo __METHOD__."你正在实例化对象<br>";
  }
 
  function __set($name, $value)
  {
    $this->array[$name]=$value;
  }
 
  function __get($name)
  {
    return $this->array[$name];
  }
 
  function __call($name, $arguments)
  {
    var_dump($name,$arguments);
    return "magic function\n";
  }
 
  static function __callStatic($name, $arguments)
  {
    var_dump($name,$arguments);
    return "magic static function";
  }
 
  function __toString()
  {
    return __CLASS__.'<br>';
  }
 
  function __invoke($arguments)
  {
    var_dump($arguments);
    return __METHOD__.'<br>';
  }
 
  function __clone()
  {
    echo __METHOD__."你正在克隆对象<br>";
  }
 
  function __isset($name)
  {
    echo __METHOD__."你想判断有没有属性".$name."<br>";
    return 1;
  }
 
  function __unset($name)
  {
    echo __METHOD__."你想删除属性".$name."<br>";
  }
 
 
  function __destruct()
  {
    echo __METHOD__."你正在注销对象<br>";
  }
 
 
 
}

以上就是关于php中的常用魔术方法的全部内容,希望对大家的学习有所帮助。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

コンテンツセキュリティポリシー(CSP)ヘッダーとは何ですか?なぜ重要なのですか?コンテンツセキュリティポリシー(CSP)ヘッダーとは何ですか?なぜ重要なのですか?Apr 09, 2025 am 12:10 AM

XSS攻撃を防ぎ、リソースのロードを制限し、ウェブサイトのセキュリティを改善できるため、CSPは重要です。 1.CSPはHTTP応答ヘッダーの一部であり、厳格なポリシーを通じて悪意のある行動を制限します。 2。基本的な使用法は、同じ起源からのロードリソースのみを許可することです。 3.高度な使用法は、特定のドメイン名がスクリプトやスタイルをロードできるようにするなど、より微調整された戦略を設定できます。 4。CSPポリシーをデバッグおよび最適化するには、コンテンツセキュリティポリシーレポートのみのヘッダーを使用します。

HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか?HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか?Apr 09, 2025 am 12:09 AM

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

HTTPSとは何ですか、なぜWebアプリケーションにとって重要なのですか?HTTPSとは何ですか、なぜWebアプリケーションにとって重要なのですか?Apr 09, 2025 am 12:08 AM

HTTPSは、HTTPに基づいてセキュリティレイヤーを追加するプロトコルであり、主に暗号化されたデータを介してユーザーのプライバシーとデータセキュリティを保護します。その作業原則には、TLSの握手、証明書の確認、暗号化された通信が含まれます。 HTTPSを実装する場合、証明書管理、パフォーマンスへの影響、および混合コンテンツの問題に注意を払う必要があります。

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

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1

メモ帳++7.3.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 中国語版

SublimeText3 中国語版

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