首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP无法获取类属性

PHP无法获取类属性
EN

Stack Overflow用户
提问于 2017-02-05 03:41:46
回答 2查看 51关注 0票数 0

我正在学习PHP,并试图创建一个具有几个protected属性的基本类。我可以使用“魔术”设置器来设置它们,但是不能打印name属性。我已经读过了,这似乎是基本的东西,但出于某种奇怪的原因,输出是"name“而不是我传递的实际字符串。代码如下:

代码语言:javascript
运行
复制
    class Animal{
        protected $name;
        protected $color;
        protected $type;

        public function __set($attr, $value){
            switch ($attr){
                case "name":
                    $this->name = $attr;
                    break;

                case "color":
                    $this->color = $attr;
                    break;

                case "type":
                    $this->type = $attr;
                    break;
                default:
                    echo "attr not found in class";
            }

            printf ("set %s to %s <br>", $attr, $value);
        }

        public function __get($attr){
            if(property_exists($this, $attr)){
                return $this->$attr;
            }
        }

        public function run(){
            echo $this->name ." runs! <br>";
        }

        public function getName(){
            return $this->name."<br>";
        }
    }

$animal1 = new Animal();
$animal1->name = "Animal_1";
$animal1->color = "black";
$animal1->type = "common";

echo $animal1->getName();
echo $animal1->run();
echo $animal1->name;

这是输出:

代码语言:javascript
运行
复制
set name to Animal_1 
set color to black 
set type to common 
name
name runs! 
name

为什么我不能获取类的name属性,而只获取属性本身的名称呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-05 03:44:11

更改:

代码语言:javascript
运行
复制
$this->name = $attr;

至:

代码语言:javascript
运行
复制
$this->name = $value;

因为根据您的切换情况将$attr设置为"name“,我假设$value包含了您实际需要的内容。

同样的事情也适用于您的其余切换案例。

票数 7
EN

Stack Overflow用户

发布于 2017-02-05 03:47:11

您当前将该属性的值设置为其键:

代码语言:javascript
运行
复制
$this->name = $attr;

而应将该值设置为$value

代码语言:javascript
运行
复制
$this->name = $value;

这将防止可能发生的任何错误。

附言:我刚刚注意到已经有人发布了同样的解决方案。Woops :)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42044788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档