ホームページ  >  記事  >  バックエンド開発  >  PHP権限制御のバグを詳しく解説

PHP権限制御のバグを詳しく解説

小云云
小云云オリジナル
2018-03-31 13:07:581433ブラウズ

この記事では、主に PHP 権限制御のバグについて詳しく説明し、主にテキストとコードの形式で説明します。これが皆さんのお役に立てれば幸いです。

class Human {
    private $money = 1000;    public function getMoney($people) {
        return $people->money;
    }    public function setMoney($people) {
        $people->money -= 500;
    }
}$zhangsan = new Human();$lisi = new Human();//echo $lisi->money; //报错// 让李四去打探张三的钱echo $lisi->getMoney($zhangsan),&#39;<br >&#39;; //1000// 让李四去改变张三的钱$lisi->setMoney($zhangsan); //减500echo $lisi->getMoney($zhangsan),&#39;<br >&#39;; //剩500
/* 
按理来说,李四不应该有权直接引用 张三私有的
但是,在上面的代码中,李四却显然引用和改张三的钱. 
这是因为: 
PHP在实现上,并不是以对象为单位来控制的权限. 
而是以类为单位,来控制的权限.
所以我们强调的是类内,类外,而不是对象内,对象外. 
*/
/* 
$lisi–>类–>Human类 
$lisi->setMoney()函数,也在Human类中, 
在同一个类内部,可以调用.
这也说明了,确实是以类为单位的. 
*/
class Human {
    private $money = 1000;    public function getMoney($people) {
        return $people->money;
    }    public function setMoney($people) {
        $people->money -= 500;
    }
}$zhangsan = new Human();$lisi = new Human();//echo $lisi->money; //报错// 让李四去打探张三的钱echo $lisi->getMoney($zhangsan),&#39;<br >&#39;; //1000// 让李四去改变张三的钱$lisi->setMoney($zhangsan); //减500echo $lisi->getMoney($zhangsan),&#39;<br >&#39;; //剩500

/*
論理的に言えば、Li Si には Zhang San の個人的なお金を直接引用する権利はないはずです

しかし、上記のコードでは、Li Si は明らかに Zhang San のお金を引用して変更しています
その理由は次のとおりです。 PHP の実装では、アクセス許可はオブジェクト単位で制御されません
しかし、アクセス許可はクラス単位で制御されます。

したがって、私たちが強調するのは、オブジェクト内とオブジェクトの外ではなく、クラス内とクラスの外です。


/*

$lisi–>Class–>Human クラス

$lisi->setMoney() 関数も Human クラスにあり、
同じクラス内で呼び出すことができます。

これも であることを示しています。これは確かにクラスに基づいています

*/


関連する推奨事項:

PHP オブジェクト指向のプライベート パーミッション コントロール_PHP チュートリアル

以上がPHP権限制御のバグを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。