PHP超载" ="操作员
有没有办法使等价运算符过载? 假设我有此代码: $variable1 = "a"; $variable1 = "c"; 我想每次将某些东西分配给$variable1时都保存到日​​志文件,而不必做类似的事情: $variable1 = "a"; add_to_some_logfile("a"); $variable1 = "c"; add_to_some_logfile("c"); 有没有办法覆盖等价运算符,以便除了将值分配给变量之外做其他操作? 解决方案 否. PHP不支持操作员的过载,除了少数例外(如 @nikic所指出:" PHP支持某些操作员的过载,例如[[], - >和(字符串),还允许对某些语言构造(例如for foreach). php Overload =操作员 但在 http://pecl.php.net/package/package/operator PHP扩展该操作员超载: +, - , *,/,%,>,. +=, -
0 2023-06-02
编程技术问答社区
php是否支持运算符重载?
PHP支持操作员是否超载? 我正在尝试创建一个约会的类,我想将其与另一个对象进行比较,而无需使用方法或属性. 这就是我要做的: $obj1 = new myClass('2016-08-15'); $obj2 = new myClass('2016-02-06'); if ($obj1 > $obj2){ ... } 我知道如何进行日期比较,我需要知道的只是如何使操作员超载>, 谢谢. 解决方案 PHP不支持操作员过载. 有一个古老的扩展,可以以类似于Python的方式进行此操作.您可以找到它在这里. 话虽如此,如今最好的选择就是只使用常规方法进行比较. 其他解决方案 PHP对"超载"的解释与大多数面向对象的语言不同.传统上,超载具有具有相同名称但不同数量和类型参数的多种方法的能力. 我希望此链接能帮助您了解概念, http://php.net/manual/manual/en/langue.oop.oop5. O
0 2023-05-29
编程技术问答社区
php overload = operator
可能的重复: php 中的操作员多重载 有没有办法超载=运算符? 所以我想要以下内容: class b{ function overloadis(){ // do somethng } } $a = new b(); $a = 'c'; 在上面的示例中,我希望当$ a ='c'时;被称为,该方法Overloadis首先调用,然后如果执行或流产该操作(将'c'分配给$ a)应该功能. 可以做到吗? thnx提前 鲍勃 解决方案 否. PHP不支持操作员的过载,除了一些例外(如@Nikic所指出:" PHP支持某些操作员的过载,例如[[], - >和(字符串),并且还允许过载某些语言构造(例如foreach).). 其他解决方案 您可以使用class MyClass { private $a; public function __set($classProperty, $value) { if($classProp
0 2023-05-27
编程技术问答社区
在PHP中是否可以重载运算符?
具体来说,我想创建一个数组类,并想超载[]运算符. 解决方案 如果您使用的是php5(并且应该是),请查看 spl arrayObject 类.该文档不太好,但是我认为,如果您扩展了ArrayObject,您将拥有"假"数组. 编辑:这是我的快速示例;恐怕我没有宝贵的用例: class a extends ArrayObject { public function offsetSet($i, $v) { echo 'appending ' . $v; parent::offsetSet($i, $v); } } $a = new a; $a[] = 1; 其他解决方案 实际上,最佳解决方案是实现ArrayAccess接口的四种方法: http://php.net/manual/manual/en/class.arlayaccess.phppp 如果您也想在" foreach"的上下文中使用对象,则必须实现"
2 2023-05-26
编程技术问答社区
停止perl重载或打印引用的内存 "地址"
我有一个我创建的类,该类使""运算符打印出一个不错的对象的格式形式. . 但是,现在,我想实际获取诸如: 之类的内存地址 Some_class=HASH(0xb0aff98) ,如果我尚未覆盖""运算符,这通常是我通常会使用print "$some_object". 是否有某种方法可以绕过被覆盖的方法,或者失败,只需获取此对象的内存地址吗? 解决方案 使用 overload::StrVal($o) .. use overload '""' => sub { "Hello, World!" }; my $o = bless({}); print($o, "\n"); # Hello, World! print(overload::StrVal($o), "\n"); # main=HASH(0x62d038) 其他解决方案 两个选项: 使用 overload::StrVal overload::St
0 2023-05-24
编程技术问答社区
未使用smallint[]列上的GIN索引或错误 "运算符不唯一"
create table test( id serial primary key, tagged smallint[] ); tagged列上有杜松子酒索引,带有_int2_ops操作员类: CREATE INDEX ix ON test USING GIN(col _int2_ops); 当我运行此查询时: select * from test where tagged @> ARRAY[11] order by id limit 100; EXPLAIN ANALYZE显示: Limit (cost=0.43..19524.39 rows=100 width=36) (actual time=25024.124..25027.263 rows=100 loops=1) -> Index Scan using test_pkey on test (cost=0.43..508404.37 rows=2604 width=36)
4 2023-05-23
编程技术问答社区
具有隐式转换和运算符重载的模板类,但没有内联
基于隐式转换在使模板类超载的转换时, 我能够编写以下完美工作的代码(简化示例): namespace my_library { template struct Number { T n; inline Number(T n) : n(n) { } friend Number operator+(const Number &a, const Number &b) { return Number(a.n + b.n); } }; } int main() { return (int) (4 + my_library::Number(3)).n; // returns 7 } 我要做的就是做到这一点,以便operator+在Number的定义(但留在标题文件中)中不会插入时,而一切仍然以相同的方式工作 - 请参阅中的表达式.功能.请注意,它要求整数4被隐
0 2023-05-22
编程技术问答社区
Java-创建一个伪本地类型
在股票交易中,数量通常是整数(例如5x股票,10倍期权等).使用加密货币,数量是分数(例如0.01比特币).在这两种情况下,通常都有一个最小单元(例如100股股票的倍数). 我想将此逻辑包裹在Quantity类中.但是: java本地类型(例如double)是 final ,所以我不能扩展它们 java不支持操作员过载,因此算术将是丑陋的 java不支持typedefs,所以我不能用double将double 包裹 所以我想我的问题是,如果我想创建类似于本地类型的东西(很多实例,逐个传递,很多算术),是否有"经典" Java解决方案?从内存中,c#具有struct类型,该类型是通过逐值传递的,Java中是否有类似的东西? 谢谢, 编辑:是否可以从C ++代码中导入本机类型,并有效绕过Java? 解决方案 是的,可以在Java中声明Typedef,并保证类型校正,但没有句法复杂性和声明新Java类的运行时间开销. 作为用户,您可以通过编写类
0 2023-05-20
编程技术问答社区
操作符+的典型实现涉及到额外的移动构造器
由 我比较了两个不同版本的二进制operator+实现的版本C1>.考虑我们在类X的定义内部. 版本1 friend X operator+(X lhs, const X& rhs) { lhs += rhs; return lhs; } 版本2 friend X operator+(const X& lhs, const X& rhs) { X temp(lhs); temp += rhs; return temp; } friend X operator+(X&& lhs, const X& rhs) { lhs += rhs; return std::move(lhs); } 在两种情况下,operator+=的定义如下: X& operator+=(const X& rhs) { ... // whate
按值重载操作符的结果是使用移动的值
编译使用运算符过载的以下生锈代码 use std::ops::{Add}; #[derive(Show)] struct Point { x: int, y: int } impl Add for Point { type Output = Point; fn add(self, other: Point) -> Point { Point {x: self.x + other.x, y: self.y + other.y} } } fn main() { let p: Point = Point {x: 1, y: 0}; let pp = p + p; } 由于P: 的所有权,导致编译器错误导致编译器错误 :21:18: 21:19 error: use of moved value: `p` :21 let pp = p + p;
2 2023-05-20
编程技术问答社区
为什么在有多个参数的重载运算符+中通过常量引用传递?
我正在执行操作员+多个参数,如下所示. #include using namespace std; class Integer{ int value; public: Integer(int i) {value=i;}; int getValue() { return value;}; friend Integer operator+ (Integer & a, Integer & b){ Integer I (a.value+b.value); return I; }; }; int main() { Integer a(1), b(2), c(3); Integer d = a+b+c; cout
0 2023-05-20
编程技术问答社区
在Python中,如何覆盖算术运算符"/"以产生:1/0 => Math.inf?
在Python中,当我运行操作:1/0时,其默认行为正在生成一个例外:" ZerodivisionError:Zero float Disecom by Zero" 如何超载此默认行为,以便我得到: 1/0 => Math.inf 解决方案 您需要定义自己的类,然后在该定义方法中__truediv__(/)和__floordiv__(//)至少.例如,如果仅定义这两个+,则无法使用(请参见下面的错误). import math class MyFloat: def __init__(self, val): self.val = val def __truediv__(self, other): if other.val == 0: return math.inf return self.val / other.val def __floordiv__(self, o
10 2023-05-15
编程技术问答社区
在Ruby中使用重载括号[]访问变量
嗨,我想做以下操作.我只想超载[]方法以访问实例变量...我知道,这根本没有意义,但是我想这样做是出于某种奇怪的原因:p 这将是这样的... class Wata attr_accessor :nombre, :edad def initialize(n,e) @nombre = n @edad = e end def [](iv) self.iv end end juan = Wata.new('juan',123) puts juan['nombre'] 但是,这引发了以下错误: Overload.rb:11:in`[]':未定义的方法'iv'for#(nomethoderror) 我该怎么做? 编辑 我也找到了这个解决方案: def [](iv) eval("self."+iv) end 解决方案 变量和消息生活在不同的
4 2023-05-15
编程技术问答社区
重载运算符,本例中重载运算符的目的是什么?
我一直在尝试了解此代码中超载运算符的使用,但是,我无法围绕它.我不完全理解超载运算符的目的或为什么需要它的目的.我知道这是一个新手问题,但是如果有人可以解释,我会非常感谢. const int Card::operator+(const Card& B) { if ((faceValue ==1 || B.faceValue == 1) && (faceValue + B.faceValue)
2 2023-05-15
编程技术问答社区
在haskell中的任何工作运算符重载例子
我想超载任何操作员.我想做一个简单的功能 x == y 返回x. 或x == y返回x+y.没关系.您能告诉我任何简单的操作员过载示例吗?不幸的是,我在网络上找不到任何示例. 例如;当我调用树时,a ==树 返回5(它总是返回5.我选择它,它与任何事物无关) 或当我打电话3 == 4时 返回:7 我尝试了以下代码(我从haskell.org找到了),但无法编译. class Eq a where (==) ::a -> a -> Int instance Eq Integer where x == y = 5 instance Eq Float where x == y = 5 以下代码都不适用: 数据树A =节点A |空 类树一个 (==)::树A->树A-> int 实例树整数在其中 x == y = 1 我犯错误: Ambiguous occurrence `Eq' It could refer to either `Mai
0 2023-05-15
编程技术问答社区
程序没有调用正确的重载运算符
我拥有类目录,该目录与类文件的对象一起做事,然后是超载运算符,例如: class Directory { std::vector name, timeOfCreation; std::vector arr; public: Directory(std::string); Directory(const Directory&); ~Directory(); Directory operator += (File); Directory operator += (Directory); Directory operator -= (File); Directory operator ~(); File operator [] (int); operator int(); friend bool operator % (Directory, File);
0 2023-05-15
编程技术问答社区
操作员重载。Ostream/Istream
我在我的C ++类的实验室分配中遇到了一些麻烦. 基本上,我正在尝试获得" cout 不幸的是,我必须使用格式" cout main.cpp: #include #include "weight.h" using namespace std; int main( ) { weight w1(6); weight w2(10); weight w3; w3=w1+w2; cout using namespace std; class weight { public: int num; weight(); weight(int); weight operator+(weight); }; #endif
0 2023-05-15
编程技术问答社区