$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;
}
}
答案 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