PHP拡張開発ノート(8) インターフェースの継承と実装
継承
Exception クラスをカスタマイズします。PHP コード:
<code><span><span>class</span><span>TestException</span><span>extends</span><span>Exception</span> {</span>}</code>
コード実装:
<code><span>#include "Zend/zend_exceptions.h"</span> zend_class_entry *test_exception_ce; PHP_MINIT_FUNCTION(test) { zend_class_entry tmp_ce; INIT_CLASS_ENTRY(tmp_ce, <span>"TestException"</span>, NULL); test_exception_ce = zend_register_internal_class_ex(&tmp_ce, zend_exception_get_default(TSRMLS_C), NULL TSRMLS_CC); <span>return</span> SUCCESS; }</code>
ここで主なことは、メソッドなしでカスタム Exception クラスを実装し、Exception クラスを継承することです。 _ex サフィックスが付いた zend_register_internal_class_ex
マクロが使用されます。このマクロの 2 番目のパラメーター zend_Exception_get_default
(ヘッダー ファイルに注意してください) は、親クラスを指定することもできます。 name 親クラスを指定するには、zend_register_internal_class_ex
の定義を確認できますzend_register_internal_class_ex
这个带有 _ex 后缀的宏,这个宏的第二个参数zend_exception_get_default
(注意头文件)指定了父类,还可以通过类名的方式来指定父类,可以看zend_register_internal_class_ex
的定义
<code><span>/* If parent_ce is not NULL then it inherits from parent_ce * If parent_ce is NULL and parent_name isn't then it looks for the parent and inherits from it * If both parent_ce and parent_name are NULL it does a regular class registration * If parent_name is specified but not found NULL is returned */</span> ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce, <span>char</span> *parent_name TSRMLS_DC) <span>/* {{{ */</span> { zend_class_entry *register_class; <span>if</span> (!parent_ce && parent_name) { zend_class_entry **pce; <span>if</span> (zend_hash_find(CG(class_table), parent_name, <span>strlen</span>(parent_name)+<span>1</span>, (<span>void</span> **) &pce)==FAILURE) { <span>return</span> NULL; } <span>else</span> { parent_ce = *pce; } } register_class = zend_register_internal_class(class_entry TSRMLS_CC); <span>if</span> (parent_ce) { zend_do_inheritance(register_class, parent_ce TSRMLS_CC); } <span>return</span> register_class; } <span>/* }}} */</span></code>
这个方法里面parent_name
传进来的时候必须是小写的,否则在寻找类名(zend_hash_find
<code>test_exception_ce = zend_register_internal_class_ex(&tmp_ce, NULL, <span>"exception"</span> TSRMLS_CC); <span>//如果是Exception就会继承失败</span></code>
parent_name
は渡されるときに小文字にする必要があります。それ以外の場合は、クラス名 ( > zend_hash_find
) は失敗し、NULL を返します。例: <code>zend_class_entry tmp_interface_ce;
INIT_CLASS_ENTRY(tmp_interface_ce, <span>"TestDataClass"</span>, test_data_interface_methodsd);
test_data_interface = zend_register_internal_class(&tmp_interface_ce TSRMLS_CC);
<span>/* TestDataClass implements Countable, ArrayAccess, IteratorAggregate */</span>
zend_class_implements(
test_data_interface TSRMLS_CC, <span>3</span>, spl_ce_Countable, zend_ce_arrayaccess, zend_ce_aggregate
);
<span>return</span> SUCCESS;</code>
ログイン後にコピー
インターフェース定義rrreee<code>zend_class_entry tmp_interface_ce; INIT_CLASS_ENTRY(tmp_interface_ce, <span>"TestDataClass"</span>, test_data_interface_methodsd); test_data_interface = zend_register_internal_class(&tmp_interface_ce TSRMLS_CC); <span>/* TestDataClass implements Countable, ArrayAccess, IteratorAggregate */</span> zend_class_implements( test_data_interface TSRMLS_CC, <span>3</span>, spl_ce_Countable, zend_ce_arrayaccess, zend_ce_aggregate ); <span>return</span> SUCCESS;</code>
上記は、PHP 拡張機能の開発ノート (8) の継承と実装インターフェイスを内容も含めて紹介したもので、PHP チュートリアルに興味のある友人の参考になれば幸いです。
🎜

ホット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)

ホットトピック









クラスとメソッドの概念とインスタンス クラス (Class): 同じプロパティとメソッドを持つオブジェクトのコレクションを記述するために使用されます。コレクション内のすべてのオブジェクトに共通のプロパティとメソッドを定義します。オブジェクトはクラスのインスタンスです。メソッド: クラスで定義された関数。クラス構築メソッド __init__(): クラスには init() という名前の特別なメソッド (構築メソッド) があり、クラスがインスタンス化されるときに自動的に呼び出されます。インスタンス変数: クラスの宣言において、属性を変数で表現したものをインスタンス変数と呼びます。インスタンス変数とは、self で修飾された変数です。インスタンス化: クラスのインスタンス、クラスの特定のオブジェクトを作成します。継承: つまり、派生クラス (派生クラス) は基本クラス (ベースクラス) を継承します。

Java では、複数のスレッドがコレクション オブジェクトを同時に操作すると、ConcurrentModificationException 例外が発生することがあります。この例外は通常、要素を変更または削除するときにコレクションを走査するときに発生します。これにより、コレクションの状態が不整合になり、異常なエラーがスローされます。 。この記事では、この例外の原因と解決策について詳しく説明します。 1. 例外の原因 通常はConcurrentModificationException例外

クラスとはPythonでクラスを定義するためのキーワードです クラスの定義方法:classの後ろにスペースを入れてからクラス名を追加します; クラス名のルール:最初の文字を大文字にします 複数の単語がある場合はキャメルケースを使用してください[class Dog()] などの名前付け。

jQuery は、Web 開発で広く使用されている古典的な JavaScript ライブラリで、イベントの処理、DOM 要素の操作、Web ページ上でのアニメーションの実行などの操作を簡素化します。 jQueryを使っていると要素のクラス名を置き換える場面がよくありますが、この記事ではその実践的な方法と具体的なコード例を紹介します。 1.removeClass() メソッドと addClass() メソッドを使用する jQuery には、削除用の RemoveClass() メソッドが用意されています。

PHP コードを記述するとき、クラスを使用するのは非常に一般的な方法です。クラスを使用すると、関連する関数とデータを 1 つのユニットにカプセル化できるため、コードがより明確になり、読みやすく、保守しやすくなります。この記事では、PHPClass の使用法を詳しく紹介し、クラスを適用して実際のプロジェクトでコードを最適化する方法を読者がよりよく理解できるように、具体的なコード例を示します。 1. クラスの作成と使用 PHP では、キーワード class を使用してクラスを定義し、クラス内のプロパティとメソッドを定義できます。

PHP 実装フレームワーク: ZendFramework 入門チュートリアル ZendFramework は、PHP によって開発されたオープン ソースの Web サイト フレームワークであり、現在 ZendTechnologies によって保守されています。ZendFramework は、MVC デザイン パターンを採用し、Web2.0 アプリケーションと Web サーブの実装に役立つ一連の再利用可能なコード ライブラリを提供します。 。 ZendFramework は PHP 開発者に非常に人気があり、尊敬されており、幅広い機能を備えています。

Zend Framework でのアクセス許可制御に ACL (AccessControlList) を使用する方法 はじめに: Web アプリケーションでは、アクセス許可制御は重要な機能です。これにより、ユーザーはアクセスを許可されたページと機能にのみアクセスできるようになり、不正アクセスが防止されます。 Zend フレームワークは、ACL (AccessControlList) コンポーネントを使用してアクセス許可制御を実装する便利な方法を提供します。この記事では、Zend Framework で ACL を使用する方法を紹介します。

Vue エラー: v-bind を使用してクラスとスタイルを正しくバインドできません。解決方法は? Vue 開発では、v-bind 命令を使用してクラスとスタイルを動的にバインドすることがよくありますが、v-bind を正しく使用してクラスとスタイルをバインドできないなどの問題が発生することがあります。この記事では、この問題の原因と解決策を説明します。まず、v-bind ディレクティブを理解しましょう。 v-bind は V をバインドするために使用されます
