PHP-CPP开发扩展(五)

PHP-CPP是一个用于开发PHP扩展的C++库。本节讲解如何在C++中实现PHP类。

类和对象

类和对象

怎样在PHP-CPP里写出PHP的类呢?很简单,看下面的例子:

首先,C++类必须继承自 ;其次,当我们将类添加到扩展对象时,还必须指定要从PHP访问的所有方法;最后再注册导出类。

我们先测试:

输出:

访问修饰符

我们还可以对导出的方法添加访问修饰符:

第二个参数支持设置访问修饰符,默认是public;第三个参数和普通函数一样,支持设置参数类型。

支持的访问修饰符:

有一点需要注意:C++里要导出的方法,必须全是Public的, 即使我们在PHP中将它们标记为私有或受保护。因为我们写的方法由PHP-CPP库调用,如果将它们设为私有,它们将对库不可见。

抽象类、Final类

声明类为Final很简单,只需要在初始化导出类的时候声明一下即可:

那么怎么声明一个抽象类呢?上面的例子里 都传入了真正的C ++方法的地址,但是抽象方法通常没有实现,那么我们需要怎么提供指向方法的指针?幸运的是,在PHP-CPP里注册抽象方法不用提供指向C ++方法的指针。

示例: 抽象类原申明:

我们在test.php尝试去实例化 类,提示:

注:官方示例里初始化导出类里没有加 ,测试的时候发现还是可以实例化的,只是调用抽象方法才报错。

构造函数和析构函数

在C++代码里,PHP的构造函数和析构函数本质上是普通方法。明白了这点,就不难实现了。

示例:

如果需要构造函数为私有的,只需要在注册的时候加个flag:

如果要禁止被clone,可以:

接口

接口(Interface)由于不需要具体方法的实现,我们可以通过与定义类的方式类似的方式来实现。唯一的区别是我们不使用 ,而是一个 实例。

继承

implement 实现

我们除了可以在PHP代码去实现接口或者继承类,也可以在C++里实现。该 对象有 和 ,可用于指定基类和实现的接口。我们需要传入之前配置的类或接口。我们来看一个例子。

测试:

extends 继承

PHP的继承与C++的继承没有直接关系,必须显示使用 进行继承。

还是接着上面的例子说明。

注:注册类( )需要放到extends方法的后面,也就是不能先注册父类再使用extends,否则无法继承。建议实际编程的时候注册统一放到最后面。

魔术方法

在PHP-CPP里,仅 需要显示的在 里注册,其他的魔术方法像 、 、 等都不需要注册。

测试:

(未完待续)

想第一时间获取最新动态,欢迎关注关注 ,不定期为您呈现技术干货。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G09PL800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券