博客列表 >12月3日-类与对象-PHP培训线上九期班

12月3日-类与对象-PHP培训线上九期班

邯郸易住宋至刚
邯郸易住宋至刚原创
2019年12月17日 15:26:30747浏览

一、手抄课堂笔记1203.md

二、编程代码,抄写课堂案例

  1. <?php
  2. // 访问控制,实现类的封装
  3. // 1. 创建类
  4. class Demo4
  5. {
  6. // 2. 添加类成员
  7. public $site;
  8. // private $name = 'Peter Zhu';
  9. // 如果不想让该属性在类的外部被访问,可以将该属性的访问控制符修改为:
  10. // private 私有成员, protected 受保护成员
  11. // private $role;
  12. protected $role;
  13. public function getInfo()
  14. {
  15. return '我是: ' . $this->site . $this->role;
  16. }
  17. // 构造方法
  18. public function __construct($site, $role)
  19. {
  20. $this->site = $site;
  21. $this->role = $role;
  22. }
  23. // 外部无权访问, 是为了防止非法访问, 并不代表禁止访问
  24. // 为这样的属性创建一个访问器方法, 来过滤用户的访问请求
  25. // public function getRole()
  26. // {
  27. // 仅允许用户名是'admin'的用户访问,其它访问返回: 无权访问
  28. // $username = $_GET['username'] ?? '';
  29. // if (isset($username) && $username === 'admin') {
  30. // return $this->role;
  31. // } else {
  32. // return '无权访问';
  33. // }
  34. // }
  35. // public function getName()
  36. // {
  37. // return isset($this->name) ? $this->name : '不存在该属性';
  38. // }
  39. // 魔术方法: __get($name), 属性重载
  40. public function __get($name)
  41. {
  42. // 仅允许用户名是'admin'的用户访问,其它访问返回: 无权访问
  43. $username = $_GET['username'] ?? '';
  44. if (isset($username) && $username === 'admin') {
  45. return isset($this->$name) ? $this->$name : '属性未定义';
  46. } else {
  47. return '无权访问';
  48. }
  49. }
  50. }
  51. // 3. 访问类成员
  52. $obj = new Demo4('www.php.cn', '讲师');
  53. echo $obj->role;
  54. // 使用访问器方法
  55. //echo $obj->getRole();
  56. echo '<br>';
  57. //echo $obj->name;

三、OOP(Object Oriented Progrmming)编程的三大步骤

1、创建类

2、添加类成员

(1)添加类属性:变量前加访问限制符

(2)添加类方法:方法前加访问限制符

3、访问类成员

(1)获取对象:类的实例化

(2)对象绑定:访问类成员

四、总结:对于属性重载魔术方法有些疑问

  1. 属性重载魔术方法中的代码 return isset($this->$name) ? $this->$name : '属性未定义属性重载魔术方法中的代码 return isset($this->$name) ? $this->$name : '属性未定义 '
  2. 其中$this->$name 跟一般的表述有所不同,一般会写成$this->name name之前是没有$的,不知道这是为什么?
  3. 如果换成$this->name,在不传参情况下,返回“无权访问”,如果传参“?username=admin”,就会报错。
  4. 看来正确的形式应该是$this->$name,但是不知道为什么?

a

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议