除非我完全误解,否则__get
and __set
方法应该允许→ get
和的重载set
。
例如,以下语句应调用该__get
方法:
echo $foo->bar;
$var = $foo->bar;
并且以下应使用该__set
方法:
$foo->bar = 'test';
这在我的代码中不起作用,并且可以通过以下简单示例重现:
class foo {
public $bar;
public function __get($name) {
echo "Get:$name";
return $this->$name;
}
public function __set($name, $value) {
echo "Set:$name to $value";
$this->$name = $value;
}
}
$foo = new foo();
echo $foo->bar;
$foo->bar = 'test';
echo "[$foo->bar]";
这只会导致:
[test]
die()
在那儿放一些电话表明它根本没打。
现在,我只是说了一下要解决的问题,并__get
在目前需要的地方手动使用它,但这不是很动态,并且需要知道“重载”代码实际上没有被调用,除非专门调用。我想知道这是否不是应该以我所理解的方式起作用,或者是为什么它不起作用。
正在运行php 5.3.3
。
__get
,__set
,__call
和__callStatic
当该方法或属性是不可访问的被调用。您$bar
是公开的,因此并非无法访问。
__set()
将数据写入不可访问的属性时运行。__get()
用于从无法访问的属性读取数据。
魔术方法不能替代吸气剂和吸气剂。它们只允许您处理方法调用或属性访问,否则将导致错误。因此,还有更多与错误处理有关的内容。还要注意,它们比使用正确的getter和setter或直接方法调用要慢得多。
问题内容: 这些是简单的示例,但是假设您的类中的属性多于两个。 什么是最佳做法? a)使用__get和__set b)使用传统的setter和getter 本文内容:http://blog.webspecies.co.uk/2011-05-23/the-new-era-of-php- frameworks.html 作者声称使用魔术方法不是一个好主意: 首先,那时使用PHP的魔术函数(get, c
Python 中有很多 __ 开始和结尾的特殊方法,它们多是所有类型都拥有的,通过实现这些 特殊方法可以实现很多有意思的功能,比如最常使用的 __str__、__repr__ 和 __unicode__ 这三个就可以用于输出对象的字符串结果。 GitHub 上有篇翻译不错: 翻译 原文 魔术方法与语法糖 Lisp 的语法极其简单,主要语法“S 表达式”非常接近于数学中的波兰表达式,写法如下: (+
考虑以下令人厌恶的类别: 然后,可以通过 lst调用map(,lst),即 但是,添加并不那么合作: 这种陌生感可以通过直接调用魔法方法来解决: 所以我的问题是,是什么给了我们?直接分配<code>__add_
本文向大家介绍php 魔术方法详解,包括了php 魔术方法详解的使用技巧和注意事项,需要的朋友参考一下 从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。PHP 将所有以 _ _(两个下划线)开头的类方法保留为魔术方法。 __toString() 和__invoke()
1.13.1 魔术方法: 在Python中的面向对象中有很多魔术方法如: __init__: 构造函数,在生成对象时调用 __del__: 析构函数,释放对象时使用 __str__: 使用print(对象)或者str(对象)的时候触发 __repr__: 在使用repr(对象)的时候触发 __setitem__ : 按照索引赋值:每当属性被赋值的时候都会调用该方法:self._
所以我试图摆脱我主要方法中的两个神奇数字。我试着让它们成为静态字段,但我只是得到了一个不同的checkstyle错误。我正在寻找一种方法,使我的主要方法完全符合checkstyle。 这些是我得到的检查风格错误: '2000'是个神奇的数字 “262”是一个神奇的数字 以下是我将其设置为静态字段时出现的checkstyle错误: 名称“Twoou”必须与模式“^[A-Z][A-Z0-9]*([A-