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里,仅 需要显示的在 里注册,其他的魔术方法像 、 、 等都不需要注册。
测试:
(未完待续)
想第一时间获取最新动态,欢迎关注关注 ,不定期为您呈现技术干货。
领取专属 10元无门槛券
私享最新 技术干货