Table des matières
继承
接口定义
Maison développement back-end tutoriel php php扩展开发笔记(8)继承和实现接口

php扩展开发笔记(8)继承和实现接口

Aug 08, 2016 am 09:22 AM
class exception parent zend

继承

我们自定义一个Exception类,php的代码:

<code><span><span>class</span><span>TestException</span><span>extends</span><span>Exception</span> {</span>}</code>
Copier après la connexion

代码实现:

<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>
Copier après la connexion

这里面主要就是实现了一个没有方法的自定义Exception类,并且继承了Exception这个类。采用了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>
Copier après la connexion

这个方法里面parent_name 传进来的时候必须是小写的,否则在寻找类名(zend_hash_find)的时候就会失败返回NULL,例如:

<code>test_exception_ce = zend_register_internal_class_ex(&tmp_ce, NULL, <span>"exception"</span> TSRMLS_CC); <span>//如果是Exception就会继承失败</span></code>
Copier après la connexion

接口定义

<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>
Copier après la connexion

以上就介绍了php扩展开发笔记(8)继承和实现接口,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser les classes et les méthodes en Python Comment utiliser les classes et les méthodes en Python Apr 21, 2023 pm 02:28 PM

Concepts et instances de classes et méthodes Classe (Class) : utilisé pour décrire une collection d'objets avec les mêmes propriétés et méthodes. Il définit les propriétés et méthodes communes à chaque objet de la collection. Les objets sont des instances de classes. Méthode : Fonction définie dans la classe. Méthode de construction de classe __init__() : La classe possède une méthode spéciale (méthode de construction) nommée init(), qui est automatiquement appelée lorsque la classe est instanciée. Variables d'instance : dans la déclaration d'une classe, les attributs sont représentés par des variables. Ces variables sont appelées variables d'instance. Une variable d'instance est une variable modifiée avec self. Instanciation : Créez une instance d'une classe, un objet spécifique de la classe. Héritage : c'est-à-dire qu'une classe dérivée (derivedclass) hérite de la classe de base (baseclass)

Causes et solutions aux exceptions ConcurrentModificationException en Java Causes et solutions aux exceptions ConcurrentModificationException en Java Jun 25, 2023 am 10:33 AM

En Java, lorsque plusieurs threads exploitent un objet de collection en même temps, une exception ConcurrentModificationException peut se produire. Cette exception se produit généralement lors de la traversée de la collection lors de la modification ou de la suppression d'éléments. Cela entraînera une incohérence de l'état de la collection, ce qui générera des anomalies. . Cet article examinera les causes et les solutions à cette exception. 1. Causes de l'exception Normalement, exception ConcurrentModificationException

Que signifie la classe en python ? Que signifie la classe en python ? May 21, 2019 pm 05:10 PM

Class est un mot-clé en python, utilisé pour définir une classe. La méthode de définition d'une classe : ajoutez un espace après la classe puis ajoutez le nom de la classe ; règles de nom de classe : mettez la première lettre en majuscule, utilisez la casse camel. nommage, tel que [class Dog()].

Remplacer le nom de classe d'un élément à l'aide de jQuery Remplacer le nom de classe d'un élément à l'aide de jQuery Feb 24, 2024 pm 11:03 PM

jQuery est une bibliothèque JavaScript classique largement utilisée dans le développement Web. Elle simplifie les opérations telles que la gestion des événements, la manipulation des éléments DOM et l'exécution d'animations sur les pages Web. Lorsque vous utilisez jQuery, vous rencontrez souvent des situations dans lesquelles vous devez remplacer le nom de classe d'un élément. Cet article présentera quelques méthodes pratiques et des exemples de code spécifiques. 1. Utilisez les méthodes RemoveClass() et AddClass(). JQuery fournit la méthode RemoveClass() pour la suppression.

Explication détaillée de l'utilisation de la classe PHP : rendez votre code plus clair et plus facile à lire Explication détaillée de l'utilisation de la classe PHP : rendez votre code plus clair et plus facile à lire Mar 10, 2024 pm 12:03 PM

Lors de l’écriture de code PHP, l’utilisation de classes est une pratique très courante. En utilisant des classes, nous pouvons encapsuler les fonctions et les données associées dans une seule unité, rendant le code plus clair, plus facile à lire et à maintenir. Cet article présentera en détail l'utilisation de PHPClass et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre comment appliquer des classes pour optimiser le code dans des projets réels. 1. Créer et utiliser des classes En PHP, vous pouvez utiliser le mot-clé class pour définir une classe et définir les propriétés et méthodes de la classe.

Framework d'implémentation PHP : Tutoriel de mise en route de Zend Framework Framework d'implémentation PHP : Tutoriel de mise en route de Zend Framework Jun 19, 2023 am 08:09 AM

Framework d'implémentation PHP : tutoriel d'introduction à ZendFramework ZendFramework est un framework de site Web open source développé par PHP et actuellement maintenu par ZendTechnologies. ZendFramework adopte le modèle de conception MVC et fournit une série de bibliothèques de code réutilisables pour servir l'implémentation d'applications Web2.0 et Web Serve. ZendFramework est très populaire et respecté par les développeurs PHP et propose une large gamme de

Comment utiliser l'ACL (Access Control List) pour le contrôle des autorisations dans Zend Framework Comment utiliser l'ACL (Access Control List) pour le contrôle des autorisations dans Zend Framework Jul 29, 2023 am 09:24 AM

Comment utiliser l'ACL (AccessControlList) pour le contrôle des autorisations dans Zend Framework Introduction : Dans une application Web, le contrôle des autorisations est une fonction cruciale. Il garantit que les utilisateurs ne peuvent accéder qu'aux pages et fonctionnalités auxquelles ils sont autorisés à accéder et empêche tout accès non autorisé. Le framework Zend fournit un moyen pratique d'implémenter le contrôle des autorisations, en utilisant le composant ACL (AccessControlList). Cet article explique comment utiliser l'ACL dans Zend Framework.

Erreur Vue : impossible d'utiliser v-bind pour lier correctement la classe et le style, comment le résoudre ? Erreur Vue : impossible d'utiliser v-bind pour lier correctement la classe et le style, comment le résoudre ? Aug 26, 2023 pm 10:58 PM

Erreur Vue : impossible d'utiliser v-bind pour lier correctement la classe et le style, comment le résoudre ? Dans le développement de Vue, nous utilisons souvent la directive v-bind pour lier dynamiquement la classe et le style, mais nous pouvons parfois rencontrer des problèmes, comme l'incapacité d'utiliser correctement v-bind pour lier la classe et le style. Dans cet article, je vais vous expliquer la cause de ce problème et vous proposer une solution. Tout d’abord, comprenons la directive v-bind. v-bind est utilisé pour lier V

See all articles