注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

江志祥的博客

可恶的中国银行,信用卡像病毒啊,取消那么难,,,

 
 
 

日志

 
 

PHP __set __get  

2012-05-12 12:51:13|  分类: 计算机-php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

public就是共有,private就是私有,protected是保护的

public共有,顾名思义,就是 谁都可以去访问这个属性,
而 private不能,只能在类的内部试用,
protected是保护的,只能在类的内部,或者该类的子类,也就是派生类里试用

它是私有的
假如我们定义了一个 类里的一个变量的属性,$a,,如果我们在类中访问它的时候 就需要用 $this 关键字,这个大家应该都知道吧
也就是 用$this->a才能访问这个属性
例如,,
class My{
public $a;
functinon ask($v){
$this->a=$v;
echo $this->a;
}
}这个大家应该能看明白吧,定义一个My类,一个 ask函数, 然后通过$this关键字访问属性$a;
这里 我用的是 public修饰符,也就是共有的,,那么,,在类外部能不能访问访问一个属性 是由这个关键字来决定的,
public,private;
private只能在当前类中试用,
再写一个例子
class name
{
   var $b;
$a = new name();
$a -> b= 'value';
echo $a -> b;
}
var修饰符是PHP4中试用的,在PHP5里也可以用,但是最好是不要用var; 这个 $b属性并么有给他什么限制,所以默认为共有的,
所以可以在类的外部试用
但是,听说从类的外部直接访问 一个 属性是,怎么说,算比较不好吧
还是上面的例子,
class name{
private $b;
}
$a=new name();
$a->b;
echo $a->b;
当你执行这个类的时候,会出错,提示你 $b是一个 私有的属性不能访问,
这个时候 如果我们加上一段这样的代码;
function __GET($b){
     return $this->$b;
}
就可以成功;
class name{
private $b=1;
function __GET($b){
     return $this->$b;
}
}
$a=new name();
$a->b;
echo $a->b;

为什么呢,因为,,   我们功过 __GET取得到私有的属性$b;
但是这个时候 是不能直接改变$b的值的 ,这个是时候就用到__SET函数了
这个时候 输出的值是1
然后再加这样一句代码
function __SET($b,$value){
return $this->$b=$value;
}
完整代码为
class name{
private $b=1;
function __GET($b){
     return $this->$b;
}
function __SET($b,$value){
return $this->$b=$value;
}

}
$a=new name();
$a->b=5;
echo $a->b;
这个时候输出的就是 5;
那么楼主可能问的是 如果有多个私有属性,那么该如何访问,

那么 是不是有两个 或者多个变量的时候 ,还能识别呢?
其实 一样的,基本上是一样的,,__GET和__SET是可以自己识别的,,
看看这个例子
<?php

/**
* @author [斯人]
* @个人主页:http://blog.zczc1.com
* @copyright 2008
*/

class name{
private $b=1;
private $c=2;
function __GET($b){
     return $this->$b;
}
function __SET($b,$value){
return $this->$b=$value;
}
}
$a=new name();
$a->b=5;
echo $a->b."<br>";
$a->c=4;
echo $a->c;
?>

  评论这张
 
阅读(846)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017