我有一个返回如下的对象。
print_r($all->getInfo());
//returns the following on browser.
User Object ( [_name:User:private] => Kanye, West [_email:User:private] => kanye@hotmail.com)
我想阅读名称和电子邮件,并将其设置为两个单独的变量,如下所示。
$email = $all->getInfo()._email;
$name= $all->getInfo()._name;
非常感谢任何帮助。
答案 0 :(得分:0)
你可以做这样的事情来获得对私人专家的访问。
class sampleClass {
private $property1 = 'name';
private $prooerty2 = 'email';
public function getProperty1(){
return $this->property1;
}
public function getProperty2(){
return $this->property2;
}
public function setProperty1($name){
}
$this->property1 = $name;
}
public function setProperty2($email){
$this->property2 = $email;
}
}
获取属性:
$classy = new sampleClass();
echo $classy->getProperty1;
echo $classy->getProperty2;
设置属性:
$classy->setProperty1('name1');
$classy->setProperty2('email2');
您还可以为__get和__set,more info使用魔术方法。
答案 1 :(得分:0)
如果您想要访问这些值,可以将其设置为public
(根据您尝试的操作,这可能不是最佳解决方案),或创建__get()
魔法方法
class foo
{
private $value = "foo";
private $value2 = "foo2";
public function __get($name)
{
switch ($name)
{
case "value";
return $this->$name;
default:
return null;
}
}
}
class bar
{
private $value = "bar";
}
$f = new foo;
$b = new bar;
echo "Result:" . $f->value . "<br/>";
echo "Result:" . $f->value2 . "<br/>";
echo "Result:" . $b->value . "<br/>";
这个yeilds
Result:foo
Result:
E_ERROR : type 1 -- Cannot access private property bar::$value -- at line 31
当然,您也可以创建get_name()
之类的功能,但是您必须为要访问的每个private
属性执行此操作。
如果要控制__get()
方法无法访问的内容和内容,可以添加一些逻辑。通过这种方式,您知道如果您尝试访问属性,则使用__get()
方法,而不必尝试确定方法名称是什么。