Php $ this-> $ propery_name和$ this-> propery_name之间有什么区别?

时间:2017-06-07 06:03:20

标签: php

    $protected_property_name = '_'.$name;
    if(property_exists($this, $protected_property_name)){
        return $this->$protected_property_name;
    }

我正在学习面向对象编程的教程,但是,教师提出了一个我以前没见过的新代码结构,但没有明确解释他为什么会这样做。如果你在if(声明)中注意到了 $ this-> $ protected_property_name语句有两个$符号一个用于$ this,另一个用于$ protected_property_name通常它应该只是 $ this-> protected_property_name,而在protected_property_name变量上没有美元符号。当我尝试从protected_property_name变量中删除$符号时,触发了错误。完整的代码看起来像这样

class Addrress{

  protected $_postal_code;

  function __get($name){
    if(!$this->_postal_code){
        $this->_postal_code = $this->_postal_code_guess();
    }

    //Attempt to return protected property by name  

    $protected_property_name = '_'.$name;
    if(property_exists($this, $protected_property_name)){
        return $this->$protected_property_name;
    }

    //Unable to access property; trigger error.
    trigger_error('Undefined property via __get:() '. $name);
    return NULL;        
}
}

2 个答案:

答案 0 :(得分:4)

我们假设我们有一个班级

class Test {
   public $myAttr = 1;
}
var $x = new Test();

我们可以访问公共属性,例如$ x-> myAttr。

如果我们在变量中有属性的名称,例如

,该怎么办?
$var = 'myAttr';

我们可以使用$ x-> $ var

访问属性的值

答案 1 :(得分:2)

这是一个示例类:

class Example {
    public $property_one = 1;
    public $property_two = 2;
}

您可以在以下代码中看到不同之处:

$example = new Example();
echo $example->property_one; //echo 1

$other_property = 'property_two';
echo $example->$other_property; // equal to $example->property_two and echo 2

非OOP示例:

$variable_one = 100;
$variable_name = 'variable_one';
echo $$variable_name; // equal to echo $variable_one and echo 100