tasoft / operation-overload
v0.8.1
2023-03-20 08:26 UTC
Requires
- php: >7.2
Requires (Dev)
- phpunit/phpunit: ^9|^6
This package is auto-updated.
Last update: 2024-09-20 11:48:40 UTC
README
你是否曾经想要对对象进行添加、减法或乘法操作?
这是一个关于https://wiki.php.net/rfc/userspace_operator_overloading的rfc文档
我已经创建了一个扩展,可以启用此功能。
安装
$ cd ~
$ git clone https://github.com/tasoftch/php-extension-operation-overload.git
$ cd php-extension-operation-overload/ext
$ phpize
$ ./configure --enable-tasoft_usr_op_overload
$ make
$ sudo make install
此操作将在您的机器上编译源代码。
接下来找到php.ini文件
$ php --ini
将列出扫描到的ini文件。
将以下行添加到该php.ini文件中:extension=tasoft_usr_op_overload
<?php var_dump( extension_loaded('tasoft_usr_op_overload') ); // Should be true
使用方法
此包附带一个头类
<?php use TASoft\Util\OperationOverloadingObject;
所有子类都可以实现PHP中的常用操作静态方法。
如果未安装扩展,类仍然存在,但会触发警告,操作重载不会工作。
声明了PHP接口,用于描述实现的操作重载。
- ArithmeticOperationOverloadingInterface.php(可选)
- BitwiseOperationOverloadingInterface.php(可选)
- CompareOperationOverloadingInterface.php(必需)
- StringOperationOverloadingInterface.php(可选)
对象不需要实现接口。如果存在请求的方法,则调用它,否则zend引擎产生一个致命错误。
示例
<?php use TASoft\Util\OperationOverloadingObject as OpOv; class Number extends OpOv { private $number; public function __construct($number) { $this->number = $number; } public static function __add($op1,$op2){ if($op1 instanceof Number) $op1 = $op1->number; if($op2 instanceof Number) $op2 = $op2->number; return $op1 + $op2; } } $n1 = new Number(23); $n2 = new Number(18); echo $n1 + $n2; // 41