问题标签 [magic-methods]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
251 浏览

php - 这是一个谜题: __set($value, $name) 在存在匹配 $obj->$key 的 setter 时不调用,但在不存在时调用

这是上下文:

如果$key是有效键,__set($name, $value)则不调用。如果$key不是一个有效的密钥,它就是。这是我的套装的样子:

__set($name, $value)方法所属的对象中,所有属性都是私有的并带有下划线。因此,对于键“名称”,将有以下内容:

我知道它没有被调用,因为我尝试在$method = 'set' . ucfirst($name);. 该异常在$name没有引用有效的 setter 时被命中,但在没有引用时未被命中。应该是每次都被击中。有人知道这里发生了什么吗?

0 投票
3 回答
470 浏览

php - __isset() 对它自己的对象的魔术函数

我知道你可以做到这一点

然后可以用来执行以下操作

但是有没有办法做到这一点

$obj我可以在它自己的对象上使用__isset()魔术方法来控制状态的返回。

0 投票
3 回答
1593 浏览

python - __rsub__ 和 __rtruediv__ 带分数

我正在尝试__rsub__在我创建的名为 Fraction 的类中使用该函数。

这是分数类代码:

现在,如果我使用__radd__或分别__rmul__使用:return self + otherreturn self * other,它将执行所需的结果。但是,通过简单地更改运算符来做__rsub____rtruediv__不工作。我怎样才能解决这个问题?

本质上,调用函数的代码是:

谢谢你的帮助!

0 投票
1 回答
542 浏览

php - 魔术方法在 ArrayObjects 中不起作用?

我的代码遇到了一个我无法解释的问题。我唯一能想到的是魔法方法在 ArrayObjects 中不起作用。例如,给定以下类:

以下几行给了我一个错误“注意:未定义的索引:测试......”

然而这些行工作正常:

我疯了还是这是一个已知问题?

0 投票
1 回答
129 浏览

php - 跟踪令人困惑的 PHP 问题(可能是 __set/__get 魔术?)

我正在用 Propel 做各种各样的事情,这可能有点边缘情况——特别是我发现与表名关联的类名被缓存在某处,并且由于我重建了一个具有不同类名但表名相同的模型(用于单元测试目的)推进是正确的泡菜。(对于这个问题,您不需要 Propel 经验;只需了解 PHP,尤其可能是魔术调用)

为了调试这个问题,我发现 Propel 在设置列值时会为表填充一个“tablemap”类。我的目的是找出这个填充发生在代码中的哪个位置,这样我就可以清除 Propel 中缓存的 tablemap(s)。

具体来说,TestOrganiser 类有一个生成的父 BaseTestOrganiser,它有一个列设置方法,因此:

根据评论, $map->getTables() 的值作为该$this->modifiedColumns[] = TestOrganiserPeer::NAME行的结果从空变为非空。但是,这个类或其子类或父类中没有 __set() 方法,所以我很困惑这里可以触发什么代码。

有任何想法吗?

0 投票
3 回答
5107 浏览

php - PHP:类中的静态只读属性

今天是个好日子!

我的问题是:我需要为类中的静态变量重载标准获取和设置......但 php 中没有提供这样的功能......它在 2008 年被问及仍未实现......只读......

我的问题:有没有办法让静态属性可以从外部读取,但可以防止修改?

我不能使用 const 因为一些变量包含数组。

也许有一些解决方法?

是的,我知道我可以让它像 aaa::Get('qwe') 但那不好......

0 投票
3 回答
970 浏览

python - 在python中为任何对象创建无穷大和负无穷大

我正在开发一个库,该库实现了一个适用于任何有序数据类型的数据结构——一个范围集。当您允许正无穷和负无穷时,许多操作(如反转)变得有趣。

一个目标是让 datetime 对象与这个模块一起工作,并且为了支持非数字对象的无穷大,我创建了 INFINITY 和 NEGATIVE_INFINITY:

不幸的是,这不适用于在 cmp() 操作左侧的日期时间对象:

我曾希望我可以通过使用 cmp 包装器来解决这个限制,它只是确保我的对象总是被调用,但我真的想使用.sort()会导致在这些对象之间调用 cmp 的方法。

有没有办法创建一个真正小于任何其他对象,并且真正大于任何其他对象的对象?

模块主页:https ://github.com/axiak/py-rangeset

0 投票
1 回答
1490 浏览

php - PHP魔术方法示例

我在 Zend PHP 学习指南中有这个问题,但找不到正确的解释......

根据指南,解决方案应为“ b,c,A,B,C,c: CC,b,c,A,B,C”。我不知道为什么-也许你知道?我的意图是第一次调用 $m->a 会导致结果“a”,但这显然是错误的......

0 投票
3 回答
287 浏览

javascript - Javascript:是否有可能在创建对象/字符串时自动触发函数?

这个问题是直截了当的。就像在 PHP 中我们有魔术函数一样__construct(),我可以在 javascript 中使用任何相关的函数或 hack 吗?

例子:

我期待着你的回答。非常感谢您的帮助。

[X]

0 投票
2 回答
97 浏览

python - 在 appengine 多模型上覆盖 __setitem__ 是否安全?

我正在为谷歌应用引擎制作一个垃圾邮件过滤器库,它使用应用引擎钩子在一些数据put()进入数据存储区之前对其进行修改。为此,我创建了一个子类化 PolyModel 类的模型,希望可检查的类应该子类化。

但是对于类中的某些数据,我想在值更改时做一些事情,为此我必须覆盖__setitem__. 但我相信 sdk 使用它来确定模型属性的变化、应用过滤器等,因此更改覆盖__setitem__可能会破坏这一点。解决这个问题的最佳方法是什么?