tasoft/operation-overload

v0.8.1 2023-03-20 08:26 UTC

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接口,用于描述实现的操作重载。

对象不需要实现接口。如果存在请求的方法,则调用它,否则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