PHP マジック関数 __call() の使用法_PHP チュートリアル
PHP のいわゆるマジック関数は、簡単に言うと、PHP で特定の名前を持つメソッドです。すべて 2 つのアンダースコアで始まり、特定の時間に達すると、PHP インタープリターが自動的にそのメソッドを見つけて実行します。最も一般的なマジック関数は、もちろんコンストラクター メソッド __construct です。
PHP でのメソッド呼び出しは次のように動作します。まず、PHP インタープリターはクラスのメソッドを検索します。メソッドが存在する場合、PHP はそれを呼び出します。そうでない場合は、クラスのマジック関数 __call が呼び出されます (このメソッドが存在する場合)。 __call が失敗した場合は、親クラスのメソッドが呼び出されます。
赤い唇と白い歯でこれを言うのは少し変態的すぎるように思えます。次のコードを見てみましょう:
コードは次のとおりです | コードをコピー |
クラステスト{ |
このテストクラスのテストには、不要な文字を出力するコンストラクターが 1 つだけあり、他には何もありません。
この時点で、インスタンス化して * メソッドを呼び出します。これは何を行うと思いますか?私たちはすぐにそれを実行し、観察しました:
コードをコピー | |
$send = 新しいテスト();
$send->atomBomb(); |
デバッグ エラー: test.php 行 9 – 未定義メソッド test::atomBomb() の呼び出し
コードをコピー | |
……
クラステスト{
echo “関数名:”,$name,”n arg:”.$arg;
$send = 新しいテスト(); |
これはコンストラクターです! //これはコンストラクター自体によって出力されます
//以下は__call関数による出力です
コードをコピー | |
引数:配列 |
コードは次のとおりです | コードをコピー |
クラス DBObject{ プライベート $id = 0; プライベート $テーブル; private $fields = array(); function __construct( $table, $fields ) { $this->table = $table; foreach( $fields as $key ) $this->fields[ $key ] = null; } function __call( $method, $args ) { if ( preg_match( "/set_(.*)/", $method, $found ) ) { if ( array_key_exists( $found[1], $this->fields ) ) { $this->fields[ $found[1] ] = $args[0]; true を返します; } } else if ( preg_match( "/get_(.*)/", $method, $found ) ) { if ( array_key_exists( $found[1], $this->fields ) ) { return $this->fields[ $found[1] ]; } } false を返します; } 関数 insert() { グローバル $db; $fields = $this->table."_id, "; $fields .= join( ", ", array_keys( $this->fields ) ); $inspoints = array( "0" ); foreach( array_keys( $this->fields ) as $field ) $inspoints []= "?"; $inspt = join( ", ", $inspoints ); $sql = "INSERT INTO ".$this->table." ( $fields ) VALUES ( $inspt )"; $values = array(); foreach( array_keys( $this->fields ) as $field ) $values []= $this->fields[ $field ]; $sth = $db->prepare( $sql ); $db->execute( $sth, $values ); $res = $db->query( "SELECT last_insert_id()" ); $res->fetchInto( $row ); $this->id = $row[0]; $row[0] を返します; }コード> //以下の 3 つの削除方法は、更新、1 つ削除、すべて削除です (戦場のメモ) } $book = new DBObject( '本', array( '著者', 'タイトル'、'発行者' ) ); $book->delete_all(); $book->set_title( "PHP ハック" ); $book->set_author( "ジャック ヘリントン" ); $book->set_publisher( "オライリー" ); $id = $book->insert(); echo ( "新しい書籍 ID = $idn" ); $book->set_title( "ポッドキャスティングのハック" ); $book->update(); $book2 = new DBObject( '本', array( '著者', 'タイトル'、'発行者' ) ); $book2->load( $id ); echo( "Title = ".$book2->get_title()."n" ); $book2->delete( );…… |

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
