<? class Myclass{
private $name;
private $type;
private $content;
function __construct($name,$type){ $this->name=$name;
$this->type=$type;
$this->content=$name."|".$type;
}
function __get($content){
$names = explode("|",$content);
return $names;
}
}
$sp1=new Myclass('我的电脑','台式机');
echo $names[0];
echo $names[1];
?>
求哪位前辈看看,上面这段代码为甚显示不出东西来,也没有报错~
$names = explode("|",$content); 改为 $names = explode("|", $this->$content);
echo $sp1->$name; 这样就是获取到你实例化Myclass中的name属性的值··追问
按你说着做还是现实不出来
class Myclass{
private $name;
private $type;
private $content;
function __construct($name,$type){
$this->name = $name;
$this->type = $type;
$this->content = $name."|".$type;
}
function __get($content){
$names = explode("|", $this->$content);
return $names;
}
}
$sp1 = new Myclass('我的电脑','台式机');
print_r($sp1->name);
首先感谢的你耐心回答,我是个初学者,还一个问题问下,为什么这里用print_r就能输出东西,而echo就输不出来,而且输出的形式是一个数组,有没有调用$sp1->name直接就输出“我的电脑” ,还有就是以后在类的外部,要用到 多个 类的私有成员属性,都要把这些属性都链接成一个字符,然后再用__get()拆分?问题可能比较多,麻烦前辈教下我~
追答1.print_r是打印数组的··echo是不能输出数组的
2.因为当初并不知道你这个程序的意图·所以帮你改的·如果你是要打印我的电脑的话·应该这么改
function __get($content){
return $this->$content;
}
这样就可以echo $sp1->name; 这样就能获取了··
function __get($property_name){
if ($property_name == 'content') {
return explode("|",$this->$property_name);
}
}
在实例化后
$sp1=new Myclass('我的电脑','台式机');
$names = $sp1->content;
print_r($names);
或者
function __get($property_name){
if ($property_name == 'names') {
return explode("|",$this->content);
}
}
$names = $sp1->names;
print_r($names);
这样应该看明白了吧
另外注意变量范围追问
不还意思我是新手,还是有点没明白,$property_name这个变量时什么,我的类中没有这个成员属性呀
追答$property_name 是个参数,随便起啊,用来接收引用属性名称, 比如 $sp1->a 那么 $property_name 就 为 “a”继而判断即可
本回答被网友采纳类里面的变量,只可以在类里面用
print_r($sp1);这个有结果展示