小弟初学php,对于赋值运算——尤其是+=,-=,&=等——和魔术方法联合使用不太理解。希望大神能讲下魔术方法的原理。
例如:有个类A,私有成员v,魔术方法定义如下
class A
{
private $v;
public function __set($name, $val)
{
$v = $val;
}
}//abc.php
$a = new A;
$a->v += 1;
$a->v += 2;最终$v等于3么?
如果这么写是错误的,正确的代码是什么呢?
魔术方法的原理是什么呢,尤其在自赋值运算符上?
例如:有个类A,私有成员v,魔术方法定义如下
class A
{
private $v;
public function __set($name, $val)
{
$v = $val;
}
}//abc.php
$a = new A;
$a->v += 1;
$a->v += 2;最终$v等于3么?
如果这么写是错误的,正确的代码是什么呢?
魔术方法的原理是什么呢,尤其在自赋值运算符上?
解决方案 »
- 请问linux 环境php怎么绑定gd
- 网站显示访客上次访问时间应该如何实现?
- 找一ubb或编辑器,在线等
- html中图片路径 php
- 急!求助PHP的问题
- 在WEB上怎么判断下载已经完成?
- 读取session中数组问题
- 看了一天SVG,累死人,散分,顺便问个问题
- 为什么一定要登陆二次才能登陆????请大家帮忙!在线等待!!!!
- 我写的转换字符串中的特定代码的函数,有错误。
- [color=#FF0000]Fatal error: Allowed memory size of 1073741824 bytes exhausted
- 模块libmysql.dll已加载,但找不到Dllregisterserver入口点,请确认libmysql.dll为
class A
{
private $v;
public function __set($name, $val)
{
$this->$name = $val;
} public function __get($name){
return $this->$name;
}
}
//abc.php
$a = new A;
$a->v += 1;
$a->v += 2;
echo $a->v;
?>
$a->v += 1;
相当于
$a->v = $a->v +1;$a->v += 2;
相当于
$a->v = $a->v+ 2;
$a->v=$a->v+1;
会先取v的值,然后加1,再给v赋值。
但因为class A中的v是private,类中也没有__get,那么是无法取到v值的。
class A
{
private $v;
public function __set($name, $val)
{
$v = $val;
}
}
//abc.php
$a = new A;
$a->v += 1;
$a->v += 2
你的代码是有问题的,$v=$val; 应该改成$this->v = $val; 你的__set有$name参数,所以不应该写死$v。而使用$this->$name = $val;参考1楼的代码就可以了。