php - 权限修饰符的问题
天蓬老师
天蓬老师 2017-04-11 09:48:59
[PHP讨论组]

一直搞不懂 什么时候使用该使用public private protected哪个 网上很多形象的例子也都懂 只是说明了怎么用 但是没有说具体什么时候用哪个 为什么不都用public?自己写的类都是自己用 如果都用public 在实际开发中这样会出什么问题吗?一直搞不懂这个问题
class Woman{
public $name = "gaojin";
protected $age = "22";
private $height = "170";
public function info(){

echo $this->name;

}
}
$w = new Woman();
echo $w->info();
echo $w->name;

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(5)
伊谢尔伦

现在我们举个例子:有个类实现了一个功能,做算术除法运算。

class count(){
    public $a = 0;
    public $b = 0;
    
    public function setNumber($a,$b){
        $this->a = $a;
        $this->b = $b;
        echo $this->compute();
    }
    
    private function compute(){
        return $this->a/$this->b;
    }
}

其中我们先定义变量a和b都为0;

然后实现了一个设置他们值的方法,同时输出计算结构,计算的过程由另一个compute方法实现。

现在正常该这么用这个类:

$obj = new count();
$obj->setNumber(1,2);

现在我们的compute方法是private,如果外面这么调用:

$obj->compute();

那么必然发生错误。

现在,如果我们把compute方法设置为public。

如果有个人他这么调用

$obj = new count();
$obj->compute();
$obj->setNumber(1,2);

问题出现了。由于开始我们给变量a和b都设置了值为0,那么除数岂不是出现了0.更加容易出错。

所以一个类中一些方法有必要隐藏起来不给外面人调用。

PHPz

拿一个工厂举例子,你作为一工厂老板,你的专利技术,自然不想被别人看到,以免被伪造的可能。所以你用private修饰,这个就只有工厂(类)里面能使用。然后就是protected,你工厂经营的不错,开了蛮多分店,所以自然的,你总工厂和你的子工厂,当然都直到并且能使用你这项专利技术。然后就是public,一些无关紧要,或者可以让别人仿造或者大众化的技术或产品,其它人都可以从你这里得到,这样说不知道你理解不?

ringa_lee
  1. PHP文档:访问控制

  2. PHP:面向对象这个去找“访问控制”那段

  3. 直接去搜PHP 访问控制

  4. 简单来说,构建一个类时,对外提供的调用接口用public,用到的数据变量或者function不是接口的就要声明private,如果涉及到多个类有了继承关系,子类需要继承或者父类需要访问的,声明为protected。

伊谢尔伦

其实这个算是一种设计的规范吧。这个在团队开发比较常见。虽然实现功能,怎么都行,但是团队互相规范就是依靠代码来实现了。我举个通俗的例子来说把:

假设A要问B取个值回来,B的要求就是要A听过a,b两个参数;

对于A而言,B只要开放给A的就两个,一个赋值参数;一个返回参数;至于B里面一系列的运算逻辑就没必要给A了。怕A乱用。毕竟每个人的思维不一样,写法也不一样。

黄舟

public 自己,子类,外部都可以访问
protected 受保护的类,自己,和与自己相关的链上的都可以访问(不管是子类还是其父类),外部不能访问
private 只能自己访问

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号