Blogger Information
Blog 53
fans 3
comment 0
visits 55162
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
12月3日-类与对象-PHP培训线上九期班
邯郸易住宋至刚
Original
748 people have browsed it

一、手抄课堂笔记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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:标识符字符串前面加了$符的都变量, $this是变量, $name也是... $this->name, 是访问当前类实例的name属性, name是属性的名称... $this->$name, 也是访问类实例的属性, 但属性名称任意字符串, 只不过是存储到了变量$name中, 所以, $name是对当前要访问的类实例属性的一个引用罢了, 与属性name无关, 如果还是感到困惑, 那么你可以换个变量名, 例如 , $this->$prop也是可以的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments