一、手抄课堂笔记1203.md
二、编程代码,抄写课堂案例
<?php
// 访问控制,实现类的封装
// 1. 创建类
class Demo4
{
// 2. 添加类成员
public $site;
// private $name = 'Peter Zhu';
// 如果不想让该属性在类的外部被访问,可以将该属性的访问控制符修改为:
// private 私有成员, protected 受保护成员
// private $role;
protected $role;
public function getInfo()
{
return '我是: ' . $this->site . $this->role;
}
// 构造方法
public function __construct($site, $role)
{
$this->site = $site;
$this->role = $role;
}
// 外部无权访问, 是为了防止非法访问, 并不代表禁止访问
// 为这样的属性创建一个访问器方法, 来过滤用户的访问请求
// public function getRole()
// {
// 仅允许用户名是'admin'的用户访问,其它访问返回: 无权访问
// $username = $_GET['username'] ?? '';
// if (isset($username) && $username === 'admin') {
// return $this->role;
// } else {
// return '无权访问';
// }
// }
// public function getName()
// {
// return isset($this->name) ? $this->name : '不存在该属性';
// }
// 魔术方法: __get($name), 属性重载
public function __get($name)
{
// 仅允许用户名是'admin'的用户访问,其它访问返回: 无权访问
$username = $_GET['username'] ?? '';
if (isset($username) && $username === 'admin') {
return isset($this->$name) ? $this->$name : '属性未定义';
} else {
return '无权访问';
}
}
}
// 3. 访问类成员
$obj = new Demo4('www.php.cn', '讲师');
echo $obj->role;
// 使用访问器方法
//echo $obj->getRole();
echo '<br>';
//echo $obj->name;
三、OOP(Object Oriented Progrmming)编程的三大步骤
1、创建类
2、添加类成员
(1)添加类属性:变量前加访问限制符
(2)添加类方法:方法前加访问限制符
3、访问类成员
(1)获取对象:类的实例化
(2)对象绑定:访问类成员
四、总结:对于属性重载魔术方法有些疑问
属性重载魔术方法中的代码 return isset($this->$name) ? $this->$name : '属性未定义属性重载魔术方法中的代码 return isset($this->$name) ? $this->$name : '属性未定义 '
其中$this->$name 跟一般的表述有所不同,一般会写成$this->name name之前是没有$的,不知道这是为什么?
如果换成$this->name,在不传参情况下,返回“无权访问”,如果传参“?username=admin”,就会报错。
看来正确的形式应该是$this->$name,但是不知道为什么?
a