在PHP语言中,类成员的可见性控制通过哪些访问修饰符实现?请说明它们各自的作用范围以及相互之间的区别。
考察说明
考查PHP面向对象中访问控制修饰符的掌握情况,区分可见性范围。
回答思路
- 【回答框架 1】PHP访问控制修饰符有三种:public、protected、private。public表示所修饰的类成员(属性或方法)在任何地方都可以被访问,包括类外部、子类以及类内部。
- 【回答框架 2】protected表示所修饰的类成员只能在当前类内部以及该类的子类内部被访问,类外部无法直接访问。private表示所修饰的类成员只能在当前类内部被访问,子类和外部都不能访问。
- 【回答框架 3】在声明属性时,必须显式指定一个修饰符;而方法可以省略修饰符,缺省时默认为public。另外,静态成员同样适用这些修饰符。
- 【回答框架 4】在实际开发中,通常将需要对外暴露的接口设为public,内部实现细节用private或protected封装,以实现信息隐藏和面向对象设计原则。
- 【关键点 1】public:任何地方可访问。
- 【关键点 2】protected:当前类及子类内可访问。
- 【关键点 3】private:仅当前类内可访问。
- 【关键点 4】方法缺省修饰符时默认为public。
- 【易错点 1】易混淆private与protected:两者都不能从类外部访问,但protected允许子类访问,而private不允许。
- 【易错点 2】在子类中重写方法时,不能降低可见性,例如父类中public的方法不能在子类中改成private。
- 【易错点 3】PHP属性必须声明可见性,否则会报错。