问题标签 [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 - 魔术方法上的 @StaticMethod 或 @ClassMethod 装饰
我正在尝试将魔术方法装饰__getitem__
为课堂上的类方法。这是我尝试过的示例。我不介意使用 classmethod 或 staticmethod 装饰,但我不太确定该怎么做。这是我尝试过的:
但是,当我尝试打电话时,Settings['database']
我收到以下错误。
谁能告诉我我做错了什么。另外,有人可以建议是否有更好的方法来做到这一点?我什至尝试使用 MetaClasses,但收效甚微(因为我不太了解 python)。
提前致谢。
php - __get/__set/__call 使用 PHP 的性能问题
我有一个定制的 MVC PHP 框架,我正在重写它,并且对性能和魔术方法有疑问。对于框架的模型部分,我在想__get
/__set
魔术方法是否会导致太多的性能损失值得使用。我的意思是访问(读取和写入)模型数据将是最常见的事情之一。对于像 MVC 框架的模型部分这样的重度使用功能来说,使用__get
/__set
魔术方法对性能的影响太大了吗?
php - 用 __get() 和 __set() 模拟公共/私有属性?
我正在编写一个类,它使用__get()
并__set()
在主数组中存储和检索数组元素。我进行了检查以使某些元素变得难以捉摸,基本上是为了重新创建私有属性。
我注意到它似乎__get
拦截了对类属性的所有调用。这对我来说很糟糕,因为我希望有一个外部世界私有的变量(通过 get 不可用),但我试图通过直接从类中引用主数组来访问它。当然,主数组不在可获取属性的白名单中:(
有没有办法可以在使用__get()
and的 php 类中模拟公共和私有属性__set()
?
例子:
php - PHP - Zend 说避免魔术方法?
我正在阅读这个页面 - http://deaduseful.com/blog/posts/50-php-optimisation-tips-revisited
其中一项建议是避免使用从 Zend Performance PDF 中引用的魔术方法,该 PDF 没有给出建议避免使用它们的理由。
经过一些谷歌搜索(并在这里结束一个不相关的问题),我想知道是否有人在这方面有任何建议?
我在我的代码中经常使用 __get(),通常是为了保存我不经常使用的变量,例如
我可能有一个带有名称、描述、类别 ID、添加时间的表
我的 get 看起来像这样:
这似乎是一种很好的做事方式,因为我只会在需要时从数据库中获取一些东西,并且我可以引用诸如 $article->time_added 之类的东西,而不是摆弄数组。
这会被认为是不好的做法和服务器上的额外负载吗?
通常,如果子类与 get 中的某些内容不匹配,我会使用魔术方法扩展类并执行类似的操作。
这会是不好的做法并且对性能不利吗?扩展魔术方法时,我拥有的最大级别数是三个。
php - Python 等效于 PHP 的 __call() 魔术方法?
在 PHP 中,我可以这样做:
能够在 Python 中为我正在处理的项目执行此操作会很方便(需要解析大量令人讨厌的 XML,将其转换为对象并能够调用方法会很好。
Python有等价物吗?
php - __set 和字符串连接
我想知道这是否可能:
我已成功使用 __set() 魔术方法将值设置为类的属性:
所以我能够:
例如,当我想连接一个字符串时,问题就来了。似乎 __set() 没有被调用(实际上它没有被调用)。
这会输出“大家好”。我无法在第二个作业中执行 __set() 。阅读 php.net 它说:
因此,由于a_string已经存在,所以不会调用 __set。我的问题最后是......我怎样才能实现连接操作?
注意: 好的... Murphy 在我发布此消息后立即给了我答案...
答案(据我所知)是 PHP 无法确定a_string是否可用,因为我没有定义 __get() 方法。
定义 __get() 允许 php 找到 a_string 的当前值,然后使用 __set() 连接该值。
python - 向模块添加神奇的全局方法
我开始进入 Python 日志记录模块,但除非我希望所有消息都说“root”,否则我必须为每个模块创建一个记录器,而且一遍又一遍地这样做有点痛苦。
我在想,如果有一种神奇的__logger__()
方法可以为当前模块返回一个记录器,并在必要时创建它,那将会很方便。可以不带括号调用的魔术__logger__
变量会更好。我该怎么做呢?
例如,在一个名为 foo 的模块中,我可以调用__logger__.debug('this is a debug message for the foo module')
,它会在我的控制台中显示为:
DEBUG:foo:这是 foo 模块的调试消息
php - PHP 警告魔法方法 set() class.XMLHttpRequest.php
我有一个运行完美的 php 脚本,但出现 2 个错误:
这很重要吗?我可以让它消失吗?或修复?
提前致谢!
cakephp - 使用 beforeFilter 的 CakePHP 奇怪行为:我无法将变量设置为视图
好的,这将需要一些设置:
我正在研究一种在我的 cakePHP 驱动博客的 URL 中使用漂亮的帖子标题“slugs”的方法。
例如:/blog/post-title-here
而不是/blog/view_post/123
.
由于我显然不会为每篇文章都编写一个新方法,因此我试图巧妙地使用 CakePHP 回调来模拟 PHP 5__call()
魔术方法的行为。对于那些不知道的人,CakePHP 的调度程序会检查一个方法是否存在,并__call()
在控制器调用之前抛出一个 cakePHP 错误。
到目前为止我所做的:
为了充分披露(因为我不知道为什么会遇到问题),我有两条路线:
这些为 BlogPostsController 设置了一个别名,这样我的 url 看起来就不像/blog_posts/action
然后在 BlogPostsController 中:
beforeFilter
捕获不存在的动作并将它们传递给我的single_post
方法。 single_post
从模型中获取数据,并$post
为视图设置一个变量。
还有一种index
方法可以显示最近的 10 个帖子。
这是令人困惑的部分:
你会注意到$this->render
上面有一个方法被注释掉了。
- 当我不调用
$this->render('single_post')
时,视图呈现一次,但未设置$post
变量。 - 当我调用时
$this->render('single_post')
,视图会使用$post
变量 set 进行渲染,然后再次使用未设置的变量进行渲染。所以实际上我在同一个文档中得到了两个完整的布局,一个接一个。一个有内容,一个没有。
我试过使用一个名为的方法single_post
和一个名为的方法__single_post
,它们都有同样的问题。我希望最终结果是一个名为的方法__single_post
,这样就不能直接使用 url 访问它/blog/single_post
。
还
当帖子不存在时,我还没有编写错误处理代码(因此当人们在 url 中键入随机内容时,他们不会得到 single_post 视图)。在我弄清楚这个问题后,我打算这样做。
python - Python 神奇的 main() 签名,如 Perl 6
python 是否有任何方法可以轻松快速地制作 CLI 实用程序,而无需大量参数解析样板文件?
在 Perl 6 中,MAIN
sub的签名会自动解析命令行参数。
有没有办法在没有大量样板的情况下在 Python 中做类似的事情?如果没有,最好的方法是什么?我正在考虑一个函数装饰器,它将执行一些自省并做正确的事情。如果没有什么已经喜欢它,我在想像我下面的东西。这是一个好主意吗?