问题标签 [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.
php - 这是一个谜题: __set($value, $name) 在存在匹配 $obj->$key 的 setter 时不调用,但在不存在时调用
这是上下文:
如果$key
是有效键,__set($name, $value)
则不调用。如果$key
不是一个有效的密钥,它就是。这是我的套装的样子:
在__set($name, $value)
方法所属的对象中,所有属性都是私有的并带有下划线。因此,对于键“名称”,将有以下内容:
我知道它没有被调用,因为我尝试在$method = 'set' . ucfirst($name);
. 该异常在$name
没有引用有效的 setter 时被命中,但在没有引用时未被命中。应该是每次都被击中。有人知道这里发生了什么吗?
php - __isset() 对它自己的对象的魔术函数
我知道你可以做到这一点
然后可以用来执行以下操作
但是有没有办法做到这一点
$obj
我可以在它自己的对象上使用__isset()
魔术方法来控制状态的返回。
python - __rsub__ 和 __rtruediv__ 带分数
我正在尝试__rsub__
在我创建的名为 Fraction 的类中使用该函数。
这是分数类代码:
现在,如果我使用__radd__
或分别__rmul__
使用:return self + other
或return self * other
,它将执行所需的结果。但是,通过简单地更改运算符来做__rsub__
和__rtruediv__
不工作。我怎样才能解决这个问题?
本质上,调用函数的代码是:
谢谢你的帮助!
php - 魔术方法在 ArrayObjects 中不起作用?
我的代码遇到了一个我无法解释的问题。我唯一能想到的是魔法方法在 ArrayObjects 中不起作用。例如,给定以下类:
以下几行给了我一个错误“注意:未定义的索引:测试......”
然而这些行工作正常:
我疯了还是这是一个已知问题?
php - 跟踪令人困惑的 PHP 问题(可能是 __set/__get 魔术?)
我正在用 Propel 做各种各样的事情,这可能有点边缘情况——特别是我发现与表名关联的类名被缓存在某处,并且由于我重建了一个具有不同类名但表名相同的模型(用于单元测试目的)推进是正确的泡菜。(对于这个问题,您不需要 Propel 经验;只需了解 PHP,尤其可能是魔术调用)。
为了调试这个问题,我发现 Propel 在设置列值时会为表填充一个“tablemap”类。我的目的是找出这个填充发生在代码中的哪个位置,这样我就可以清除 Propel 中缓存的 tablemap(s)。
具体来说,TestOrganiser 类有一个生成的父 BaseTestOrganiser,它有一个列设置方法,因此:
根据评论, $map->getTables() 的值作为该$this->modifiedColumns[] = TestOrganiserPeer::NAME
行的结果从空变为非空。但是,这个类或其子类或父类中没有 __set() 方法,所以我很困惑这里可以触发什么代码。
有任何想法吗?
php - PHP:类中的静态只读属性
今天是个好日子!
我的问题是:我需要为类中的静态变量重载标准获取和设置......但 php 中没有提供这样的功能......它在 2008 年被问及仍未实现......只读......
我的问题:有没有办法让静态属性可以从外部读取,但可以防止修改?
我不能使用 const 因为一些变量包含数组。
也许有一些解决方法?
是的,我知道我可以让它像 aaa::Get('qwe') 但那不好......
python - 在python中为任何对象创建无穷大和负无穷大
我正在开发一个库,该库实现了一个适用于任何有序数据类型的数据结构——一个范围集。当您允许正无穷和负无穷时,许多操作(如反转)变得有趣。
一个目标是让 datetime 对象与这个模块一起工作,并且为了支持非数字对象的无穷大,我创建了 INFINITY 和 NEGATIVE_INFINITY:
不幸的是,这不适用于在 cmp() 操作左侧的日期时间对象:
我曾希望我可以通过使用 cmp 包装器来解决这个限制,它只是确保我的对象总是被调用,但我真的想使用.sort()
会导致在这些对象之间调用 cmp 的方法。
有没有办法创建一个真正小于任何其他对象,并且真正大于任何其他对象的对象?
php - PHP魔术方法示例
我在 Zend PHP 学习指南中有这个问题,但找不到正确的解释......
根据指南,解决方案应为“ b,c,A,B,C,c: CC,b,c,A,B,C
”。我不知道为什么-也许你知道?我的意图是第一次调用 $m->a 会导致结果“a”,但这显然是错误的......
javascript - Javascript:是否有可能在创建对象/字符串时自动触发函数?
这个问题是直截了当的。就像在 PHP 中我们有魔术函数一样__construct()
,我可以在 javascript 中使用任何相关的函数或 hack 吗?
例子:
我期待着你的回答。非常感谢您的帮助。
[X]
python - 在 appengine 多模型上覆盖 __setitem__ 是否安全?
我正在为谷歌应用引擎制作一个垃圾邮件过滤器库,它使用应用引擎钩子在一些数据put()
进入数据存储区之前对其进行修改。为此,我创建了一个子类化 PolyModel 类的模型,希望可检查的类应该子类化。
但是对于类中的某些数据,我想在值更改时做一些事情,为此我必须覆盖__setitem__
. 但我相信 sdk 使用它来确定模型属性的变化、应用过滤器等,因此更改覆盖__setitem__
可能会破坏这一点。解决这个问题的最佳方法是什么?