问题标签 [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.
python - 检查自定义 __getitem__ 方法的“key”参数是否是切片的pythonic/更快的方法是什么?
我有一个自定义序列类型。它本质上是一个列表和一个布尔标志的包装器,我希望它能够模拟通常的不可变序列行为。
我的问题是切片。我知道在 Python 3 中实现它的方法是有一个方法,如果是单个索引,__getitem__(key)
则返回一个项目,如果是切片对象,则返回一个切片序列。但是我应该如何区分这些情况呢?%key
%key
我基本上有两个假设。
但这是邪恶的,不是吗?或者
后者看起来更蟒蛇。MyCustomSequenceType.__init__(self, datas, flag)
它依赖于调用 len(datas)的事实,因此TypeError
如果%datas
是integer
. 但是,如果__init__
引发TypeError
另一个随机问题,它将无法追踪。还有http://wiki.cython.org/enhancements/numpy/getitem提示isinstance
更快(实际上更容易优化)。
那我该怎么办?
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 中。
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 来做它不想做的事情。它奏效了。却让坏事发生。
但我想听听更多关于这方面的意见。
python - 如何编写静态python getitem方法?
我需要改变什么才能使这项工作?
请注意,我__getitem__
在 type 上调用该方法A
。
php - 是否有一个神奇的类函数可以让类构造函数接受像关联数组这样的参数?
我有一些看起来像这样的代码:
这对我来说似乎有点多余。我可以将地址写入类以获取此构造函数吗?
(是的,我知道我可以在构造函数的括号之间创建数组,我只是好奇)
php - 是否有可能使用 PHPUnit 模拟对象来调用一个神奇的 __call() 方法?
我在测试中有一个模拟对象。真正的对象 PageRepository 使用 __call() 实现了一个神奇的方法,因此如果您调用 $pageRepository->findOneByXXXX($value_of_field_XXXX),它将在数据库中搜索与该参数匹配的记录。
有没有办法模拟该方法?
真正的方法调用看起来像这样:
测试看起来像这样:
但它不起作用—— PHPUnit 没有发现方法调用。让它看到该方法的唯一方法是在 PageRepository 中显式定义该方法。
php - 如何在 PHP 中实现 __isset() 魔术方法?
我正在尝试制作类似方法empty()
并isset()
使用方法返回的数据的函数。
到目前为止我所拥有的:
用法:
如果:
my_stuff
以上未设置,或者在以下情况下具有空值或零值empty()
- 该方法不存在(不确定是否需要,因为我认为无论如何您都会遇到致命错误)
?
php - &__get() 问题,再次。重大挫折正在发生
好吧,我很沮丧,因为我认为我已经解决了这个问题,或者之前已经成功地完成了这个。
快速初步:
- PHP 5.3.6。
- 错误报告增加到 11。(
-1
实际上;未来安全,所有错误/通知)
我有一个类,它聚合请求参数。对于咯咯笑,这里是一个精简版:
无论如何,原因arrg!
是,无论我尝试什么,只要$key
不存在,我总是会收到错误。我试过了:
有人告诉我,三元运算符不能产生引用,因此,这当然不起作用,但我们if
无论如何都从条件尝试中知道这一点。会发生什么,例如:
我在这里发疯了;也许我幻想了一个我实现这一目标的场景。是否不可能(不发出通知)成功地做到这一点?
澄清:我尝试过的事情
之前所提:
其他尝试:
php - JavaScript 中的魔术方法
JavaScript下是否有任何魔法(al)方法?
我对setter、getter和callables (函数/方法)很感兴趣,就像我们在PHP :__set
和&&中的那些。__get
__call
__callStatic
我在谷歌上搜索并搜索 StackOverflow,但没有结果。
请,如果有人被告知 - 谢谢!
php - 只读多维数组属性,PHP
我一直在ArrayAccess
和 PHP 的魔法 ( __get
,__set
) 开玩笑,现在我被困住了。
我正在尝试实现一个类,其中某些属性(即数组)是只读的。它们将由构造函数最初设置,但此后不应修改。
通过引用使用__get
魔法,我可以在属性中任意深度访问数组元素,我想当这些属性通过__set
.
问题是,当我访问数组元素的值时,PHP 调用__get
以通过引用返回数组的那一部分,我不知道它是读取还是写入操作。
(最糟糕的部分是我知道这会发生,但是考虑到属性是已实现对象的实例,我一直在愚弄ArrayAccess
作为一种可能的解决方法)
简单的例子:
和输出:
实际上,无论如何我只需要该值foo
(根据我的示例),但我需要知道这是一个写入操作,而不是读取。
我已经接受了一半,这是无法实现的,但我仍然充满希望。有谁知道我想要完成的事情是如何完成的?
我正在考虑一些可能的解决方法ArrayAccess
,但据我所知,我最终会回到这个位置,因为我将使用调用__get
.
更新:另一个有趣的一天ArrayAccess
。
(这是一个不同的问题,但我想它可以解决。发帖只是为了好玩。)