简体   繁体   中英

Undefined property in dynamic variable of a PHP class

I am trying to get a dynamic variable value in a PHP class but not sure how to do this. Here's my code:

<?php
class Test
{
    public $type = "added";

    public $date_added;

    public function set_status()
    {
        $this->date_added = "Pass";
    }

    public function get_status()
    {
        echo $this->date_{$type};
    }
}

$test = new Test();
$test->set_status();
$test->get_status();
?>

I am getting following error:

Notice: Undefined property: Test::$date_ in...

Notice: Undefined variable: type in ...

If I write echo $this->date_added; in place of echo $this->date_{$type}; then I get output "Pass".

How to fix it and do it properly?

Since you're using variable variables, put them in quotes, then concatenate:

echo $this->{'date_' . $this->type};
                    // not $type, use `$this->` since it's part of your properties

Or using via formatted string (double quotes will work as well) :

echo $this->{"date_{$this->type}"};
<?php
class Test
{
    public $type = "added";

    public $date_added;

    public function set_status()
    {
        $this->date_added = "Pass";
    }

    public function get_status()
    {
        echo $this->{'date_' . $this->type};
    }
}

$test = new Test();
$test->set_status();
$test->get_status();
?>

You can do it multiple ways, date_{$type} is not valid expression and to acccess the class property you have to use this keyword .

class Test
{
    public $type = "added";

    public $date_added;

    public function set_status()
    {
        $this->date_added = "Pass";
    }

    public function get_status()
    {
        $prop = 'date_'.$this->type;

        echo $this->{'date_'.$this->type}; # one way to do it
        echo $this->$prop;                  # another way to do it
        echo $this->{"date_{$this->type}"}; # another way to do it
    }
}

$test = new Test();
$test->set_status();
$test->get_status();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM