为了账号安全,请及时绑定邮箱和手机立即绑定

大神能否解释下 “受保护的属性与私有属性不允许外部调用,在类的成员方法内部是可以调用的”这句话?何为外部调用和内部调用啊?

$car = new Car();
echo $car->name;   //调用对象的属性
echo $car->color;  //错误 受保护的属性不允许外部调用
echo $car->price;  //错误 私有属性不允许外部调用

正在回答

5 回答

其实就是封装,这样做比较安全,不容易给人修改,查查封装就右以理解了

1 回复 有任何疑惑可以回复我~

这个要配合前面定义的类来理解

class Car {
    //定义公共属性
    public $name = '汽车';

    //定义受保护的属性
    protected $corlor = '白色';

    //定义私有属性
    private $price = '100000';
}

在calss Car的花括号{}里面调用就是内部调用,在{}外面调用就是外部调用,只有public可以外部调用,所以才会出现第二个和第三个错误的现象!

1 回复 有任何疑惑可以回复我~
class A {
    protected $name = 'aaa';
    protected function getName() {
        return 'hello';
    }
    public function say() {
        return $this->getName();
    }
}

$a = new A();
echo $a->name;        // error
echo $a->getName();   // error
echo $a->say();       // success

wish you understand !

2 回复 有任何疑惑可以回复我~

在定义类的时候,有一个花括号{},在花括号里调用就属于内部调用,在花括号外面调用就属于外部调用。

4 回复 有任何疑惑可以回复我~

首先类的属性有三种:public 、protected、private。

public可以在任何地方被调用,而受保护属性和私有属性则不一样。

私有属性private不允许外部调用,指的的是该属性只能在你声明的类中调用,你声明了Car这个类,就是只能在class Car{}中调用,离开这个类,就不能调用了。

如果实在要调用,可以使用友元函数来进行调用。

而受保护属性protected不仅可以在你声明的类中调用,还可以在它的子类中调用。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

大神能否解释下 “受保护的属性与私有属性不允许外部调用,在类的成员方法内部是可以调用的”这句话?何为外部调用和内部调用啊?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信