问题标签 [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 回答
3148 浏览

python - 检查自定义 __getitem__ 方法的“key”参数是否是切片的pythonic/更快的方法是什么?

我有一个自定义序列类型。它本质上是一个列表和一个布尔标志的包装器,我希望它能够模拟通常的不可变序列行为。

我的问题是切片。我知道在 Python 3 中实现它的方法是有一个方法,如果是单个索引,__getitem__(key)则返回一个项目,如果是切片对象,则返回一个切片序列。但是我应该如何区分这些情况呢?%key%key

我基本上有两个假设。

但这是邪恶的,不是吗?或者

后者看起来更蟒蛇。MyCustomSequenceType.__init__(self, datas, flag)它依赖于调用 len(datas)的事实,因此TypeError如果%datasinteger. 但是,如果__init__引发TypeError另一个随机问题,它将无法追踪。还有http://wiki.cython.org/enhancements/numpy/getitem提示isinstance更快(实际上更容易优化)。

那我该怎么办?

0 投票
1 回答
414 浏览

php - __sleep() 魔术方法中的 PHP 自动加载失败

我在 PHP 的魔术__sleep()方法中遇到了自动加载类的问题。不会发生自动加载,因此无法找到该类。为了调试它,我尝试调用spl_autoload_functions()它然后导致 PHP 出现段错误......

下面的示例代码演示了该问题。使用实例方法或静态方法具有相同的行为。这对我来说似乎很好用__destruct(),这很适合我的用例,但我很好奇这背后的原因。它是一个 PHP 错误,还是有一个合理的解释?

Foo.php, 就像一个自动加载目标

testcase.php

这可以通过将两个文件放在一个目录中并运行php testcase.php. 这发生在我的 PHP 5.3.3 和 5.2.10 中。

0 投票
9 回答
125428 浏览

php - 最佳实践:PHP 魔术方法 __set 和 __get

可能重复:
魔术方法是 PHP 中的最佳实践吗?

这些是简单的示例,但假设您的类中有两个以上的属性。

什么是最佳实践?

a) 使用 __get 和 __set

b) 使用传统的 setter 和 getter

在这篇文章中:http: //blog.webspecies.co.uk/2011-05-23/the-new-era-of-php-frameworks.html

作者声称使用魔术方法不是一个好主意:

首先,当时使用 PHP 的魔法函数(__get、__call 等)非常流行。乍一看,它们并没有什么问题,但实际上它们确实很危险。它们使 API 不清楚,无法自动完成,最重要的是它们很慢。他们的用例是破解 PHP 来做它不想做的事情。它奏效了。却让坏事发生。

但我想听听更多关于这方面的意见。

0 投票
2 回答
5941 浏览

python - 如何编写静态python getitem方法?

我需要改变什么才能使这项工作?

请注意,我__getitem__在 type 上调用该方法A

0 投票
1 回答
73 浏览

php - 是否有一个神奇的类函数可以让类构造函数接受像关联数组这样的参数?

我有一些看起来像这样的代码:

这对我来说似乎有点多余。我可以将地址写入类以获取此构造函数吗?

(是的,我知道我可以在构造函数的括号之间创建数组,我只是好奇)

0 投票
2 回答
11075 浏览

php - 是否有可能使用 PHPUnit 模拟对象来调用一个神奇的 __call() 方法?

我在测试中有一个模拟对象。真正的对象 PageRepository 使用 __call() 实现了一个神奇的方法,因此如果您调用 $pageRepository->findOneByXXXX($value_of_field_XXXX),它将在数据库中搜索与该参数匹配的记录。

有没有办法模拟该方法?

真正的方法调用看起来像这样:

测试看起来像这样:

但它不起作用—— PHPUnit 没有发现方法调用。让它看到该方法的唯一方法是在 PageRepository 中显式定义该方法。

0 投票
3 回答
8750 浏览

php - 如何在 PHP 中实现 __isset() 魔术方法?

我正在尝试制作类似方法empty()isset()使用方法返回的数据的函数。

到目前为止我所拥有的:

用法:

http://codepad.org/QuPNLYXP

如果:

  • my_stuff以上未设置,或者在以下情况下具有空值或零值empty()
  • 该方法不存在(不确定是否需要,因为我认为无论如何您都会遇到致命错误)

?

0 投票
3 回答
683 浏览

php - &__get() 问题,再次。重大挫折正在发生

好吧,我很沮丧,因为我认为我已经解决了这个问题,或者之前已经成功地完成了这个。

快速初步:

  • PHP 5.3.6。
  • 错误报告增加到 11。(-1实际上;未来安全,所有错误/通知

我有一个类,它聚合请求参数。对于咯咯笑,这里是一个精简版:

无论如何,原因arrg!是,无论我尝试什么,只要$key不存在,我总是会收到错误。我试过了:

有人告诉我,三元运算符不能产生引用,因此,这当然不起作用,但我们if无论如何都从条件尝试中知道这一点。会发生什么,例如:

我在这里发疯了;也许我幻想了一个我实现这一目标的场景。是否不可能(不发出通知)成功地做到这一点?


澄清:我尝试过的事情

之前所提:

其他尝试:

0 投票
0 回答
17805 浏览

php - JavaScript 中的魔术方法

JavaScript下是否有任何魔法(al)方法

我对settergettercallables (函数/方法)很感兴趣,就像我们在PHP :__set和&&中的那些。__get__call__callStatic

我在谷歌上搜索并搜索 StackOverflow,但没有结果。

请,如果有人被告知 - 谢谢!

0 投票
2 回答
1613 浏览

php - 只读多维数组属性,PHP

我一直在ArrayAccess和 PHP 的魔法 ( __get,__set ) 开玩笑,现在我被困住了。

我正在尝试实现一个类,其中某些属性(即数组)是只读的。它们将由构造函数最初设置,但此后不应修改。

通过引用使用__get魔法,我可以在属性中任意深度访问数组元素,我想当这些属性通过__set.

问题是,当我访问数组元素的值时,PHP 调用__get以通过引用返回数组的那一部分,我不知道它是读取还是写入操作。

最糟糕的部分是我知道这会发生,但是考虑到属性是已实现对象的实例,我一直在愚弄ArrayAccess作为一种可能的解决方法

简单的例子:

和输出:

实际上,无论如何我只需要该值foo根据我的示例),但我需要知道这是一个写入操作,而不是读取。

我已经接受了一半,这是无法实现的,但我仍然充满希望。有谁知道我想要完成的事情是如何完成的?

我正在考虑一些可能的解决方法ArrayAccess,但据我所知,我最终会回到这个位置,因为我将使用调用__get.


更新:另一个有趣的一天ArrayAccess

这是一个不同的问题,但我想它可以解决。发帖只是为了好玩。