您的位置:首页 > 编程语言 > PHP开发

PHP面向对象之旅:访问控制

2011-07-11 00:00 1116 查看
在PHP5中,可以在类的属性和方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。

下面表格显示了访问的权限。

修饰符同一个类中子类中全局
privateYes  
protectedYesYes 
publicYesYesYes(默认)

Private的访问权限

private 不能直接被外部调用,只能由当前对象调用。

比如你可以借钱给别人,但不希望别人知道你钱包里面有多少钱。我们把它用private隐藏起来。

<?
class You {
private $youMoney = 1000;
//借出钱的方法
public function loan($number)
{
if($this->youMoney >= $number)
{
$this->youMoney = $this->youMoney - $number;
echo "好,这里借给你 $number 元,可是我也不多了.<br>";
}
else
{
echo "我无法借 $number 元给你,我没有这么多钱<br>";
}
}
}
$you = new You();
$you->loan(300); //第一次借钱
$you->loan(600); //第二次借钱
$you->loan(500); //第三次借钱
//你不能知道我钱包里面的钱数,那是我的隐私.
echo $you->youMoney; //这个语句会出现异常.似有变量不能被外界访问.
?>

程序运行结果如下:

好,这里借给你 300 元,可是我也不多了.
好,这里借给你 600 元,可是我也不多了.
我无法借 500 元给你,我没有这么多钱
Fatal error: Cannot access private property You::$youMoney in E:\PHPProjects\test.php on line 28

protected的访问权限

protected 修饰的属性和方法只能被子类调用。外界无法调用。

<!--protected 演示
protected 修饰的属性和方法只能被子类调用.-->
<?
class You {
protected $youMoney = 1000;
//借出钱的方法
public function loan($number){
if($this->youMoney >= $number){
$this->youMoney = $this->youMoney - $number;
echo "好,这里借给你 $number 元,可是我也不多了.<br>";
}else{
echo "我无法借 $number 元给你,我没有这么多钱<br>";
}
}
}
// 继承后的类可以方法父类的protected属性.
class YouSelf extends You {
public function getMoney(){
return $this->youMoney;
}
}
$youSelf = new YouSelf();
$youSelf->loan(900); //借钱
echo "老婆,这里我还有.. ".$youSelf->getMoney()." 元";
//其他人就不允许问我了.
//echo youSelf->youMoney; //这个语句会出现异常.似有变量不能被外界访问.
?>

程序运行结果如下:

好,这里借给你 900 元,可是我也不多了.
老婆,这里我还有.. 100 元

public的访问权限

数据的隐藏和封装是能够帮助我们保护数据的安全性。

Public 修饰的属性和方法,可以被无限制的调用。

嘿。。你的钱,不安全了。

<?
class You {
public  $youMoney = 1000;
//借出钱的方法
public function loan($number)
{
if($this->youMoney >= $number)
{
$this->youMoney = $this->youMoney - $number;
echo "好,这里借给你 $number 元,可是我也不多了.<br>";
}
else
{
echo "我无法借 $number 元给你,我没有这么多钱<br>";
}
}
}
$you = new You();
// 不用借钱,想拿就拿吧.
$you->youMoney = $you->youMoney - 5000;
echo "我现在只有".$you->youMoney;
echo "<br>钱哪里去了我也不知道.";
// 数据危险的太多了,通过封装可以保护数据.
?>

程序运行结果如下:

我现在只有-4000
钱哪里去了我也不知道.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: