关于PHP 类问题

<? 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];
?>

求哪位前辈看看,上面这段代码为甚显示不出东西来,也没有报错~

__get就类似于java的getter···就是说·获取类内部的私有属性的值···你echo的$names是局部变量··应该是会报错的···如果你是要显示内容的话···应该这么改··
$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; 这样就能获取了··

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-18
修改 __get 函数
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”继而判断即可

本回答被网友采纳
第2个回答  2013-02-18
$names;变量不存在,怎么会有显示呢
类里面的变量,只可以在类里面用
print_r($sp1);这个有结果展示

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网