## 访问控制
对属性或方法的访问控制,也即可见性(visibility),是通过关键字 public,protected,private 实现的。
* public: 被定义为公有的类成员可以在任何地方被访问。
* protected: 被定义为受保护的类成员则可以被其自身以及其子类和父类访问。
* private: 被定义为私有的类成员则只能被其定义所在的类访问。
### 属性的访问控制
类属性可以定义为 public,protected,private 之一。如果用 var 定义,则被视为公有。
```
<?php
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
class MyClass2 extends MyClass
{
// 可以对 public 和 protected 进行重定义,但 private 而不能
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj2->public; // 这行能被正常执行
echo $obj2->protected; // 这行会产生一个致命错误
echo $obj2->private; // 未定义 private
$obj2->printHello(); // 输出 Public、Protected2 和 Undefined
?>
```
### 方法的访问控制
类中的方法可以被定义为 public,protected,private 如果没有设置这些关键字,则默认为 public
```
<?php
class MyClass
{
// 声明一个公有的构造函数
public function __construct(){}
// 声明一个公有的方法
public function myPublic(){}
// 声明一个受保护的方法
protected function myProtected(){}
// 声明一个私有的方法
private function myPrivate(){}
// 此方法默认为公有
function foo()
{
$this->myPublic();
$this->myProtected();
$this->myPrivate();
}
}
$obj = new MyClass;
$obj->myPublic(); // 这行能被正常执行
$obj->myProtected(); // 这行会产生一个致命错误
$obj->myPrivate(); // 这行会产生一个致命错误
$obj->foo(); // 公有,受保护,私有都可以执行
class MyClass2 extends MyClass
{
// 此方法默认为公有
function foo2()
{
$this->myPublic();
$this->myProtected();
$this->myPrivate(); // 这行会产生一个致命错误
}
}
$obj2 = new MyClass2;
$obj2->myPublic(); // 这行能被正常执行
$obj2->foo2(); // 公有的和受保护的都可执行,但私有的不行
?>
```
- 基本语法
- PHP标记
- 指令分隔符
- 从HTML中分离
- 注释
- 数据类型
- 布尔值
- 整数
- 浮点数
- 字符串
- 数组
- 对象
- 资源
- 空值
- 变量
- 基础
- 预定义变量
- 变量范围
- 可变变量
- 常量
- 常量语法
- 魔术常量
- 运算符
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 递增与递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
- 流程控制
- if条件结构
- switch条件结构
- while循环结构
- do-while循环结构
- for循环结构
- foreach循环结构
- 包含文件
- 函数
- 自定义函数
- 可变函数
- 匿名函数
- 递归函数
- 类与对象
- 基本概念
- 属性
- 方法
- 类常量
- 构造函数和析构函数
- 访问控制
- 继承
- 抽象类
- 接口
- Trait
- 重载
- 对象遍历
- 魔术方法
- Final关键字
- 命名空间
- 自动加载
- 错误处理
- 错误显示
- 错误日志
- 错误报告
- 自定义错误处理
- 异常处理
- 异常处理机制
- 扩展异常处理类
- 字符操作
- 数组操作
- 时间操作
- 表单操作
- GET提交
- POST提交
- 文件上传
- 会话控制
- COOKIE操作
- SESSION操作
- 文件操作
- 文件属性
- 读取文件
- 写入文件
- 文件管理
- 文件锁
- 目录处理
- 路径处理
- 网络操作
- HTTP协议
- Socket操作
- CURL操作
- PDO操作
- 介绍
- 连接管理
- 预处理语句
- 事务处理
- 错误处理
- 图像操作
- 正则表达式
- 标准推荐
- 包管理器
- 设计模式
- 常用算法
- 安全防御
- XSS防御
- CSRF防御