PHP的privata权限控制

不言
不言 原创
2023-03-24 20:32:02 1309浏览

这篇文章介绍的内容是关于PHP的privata权限控制 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

// private权限控制

// ===代码部分1===

class Human {
    public $mood = ''; // 心情,公有
    private $money = 1000; // 钱,私有

    public function showMoney() {
        return $this->money;
    }    private function secret() {
        echo '我小时候偷吃过一块肉';
    }    public function tellMe() {
        $this->secret();
    }
}
$lisi = new Human();
$lisi->mood = 'happy';
echo $lisi->mood,'<br >';
//钱定义为私有属性,在类Human{}外面调用,调用失败
//echo $lisi->money;
//$lisi-money = 500;
echo $lisi->showMoney();
echo '<br >';/*
showMoney是公共的,在此行可以调用.
showMoney中的 return $this->money;
这一句运行的环境是在 类{}的内部,因此有权限访问 money属性
*///$lisi->secret(); //报错$lisi->tellMe(); 
// 可以调用,因为在通过函数在类内调用的echo '<hr >';

/*
总结:private权限控制

只能在类{}内调用.
走出了{},调不动了.
*/



// 权限控制的bug

// ===代码部分2===

class Human2 {
    private $money = 1000;    public function getMoney($people) {
        return $people->money;
    }    public function setMoney($people) {
        $people->money -= 500;
    }
}$zhangsan = new Human2();$lisi = new Human2();//echo $lisi->money; 
//报错// 让李四去打探张三的钱echo $lisi->getMoney($zhangsan),'<br >';
 //1000// 让李四去改变张三的钱$lisi->setMoney($zhangsan); 
 //减500echo $lisi->getMoney($zhangsan),'<br >'; 
 //剩500print_r($zhangsan);

/*
奇怪之处在于,
zhangsan的钱,应该有zhangsan来调用getMoney和setMoney才能影响.

但是与我们讲private权限控制时的原则是符合的:
即:
调用的getMoney() public 有权
getMoney又在类{}内,有权读取私有属性money

调用的setMoney() public 有权
setMoney又在类{}内,有权修改zhangsan的私有属性money

*/

相关推荐:

PHP this绑定

以上就是PHP的privata权限控制 的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
上一条:PHP this绑定 下一条:PHP构造函数的继承