【问题标题】:Problem with __get and __set code__get 和 __set 代码有问题
【发布时间】:2011-05-29 21:00:07
【问题描述】:

我不知道我在哪里做错了。谁能给我看看?

<?php 
    class something
    {
        public $attr1;
        private $attr2;

        public function __get($name)
        {
            return $this->$name;
        }

        public function __set($name,$value)
        {
            $this->$name = $value." added something more";
        }
    }

    $a = new something();

    $a->$attr1 = "attr1";
    $a->$attr2 = "attr2";

    echo $a->$attr1; //what I would expect is attr1 as output
    echo $a->$attr2; //what I would expect is attr2 added something more as output
?>

【问题讨论】:

标签: php


【解决方案1】:

在访问对象属性时删除$的多个实例:

$a->$attr1 = "attr1";          $a->attr1 = "attr1";
$a->$attr2 = "attr2";          $a->attr2 = "attr2";

echo $a->$attr1;               echo $a->attr1;
echo $a->$attr2;               echo $a->attr2;

【讨论】:

  • 谢谢,但出于某种原因,这是输出:attr1 attr2 added something more added something more。为什么它添加了两次“添加了一些东西”?
  • @Braveyard:你能运行你在ideone.com上尝试的代码并发布链接吗?我得到的输出是attr1attr2 added something more
  • @Braveyard:您删除了太多$ 实例(在__get__set 函数中)。只删除我的答案中显示的那些。见this page for an explanation
  • 好吧,看来我在 __set 函数中做了一些不同的事情,我正在调用 $this-&gt;name 而不是 $this-&gt;$name
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 2011-06-10
  • 2010-12-09
  • 2016-06-09
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 2020-01-25
相关资源
最近更新 更多