博客列表 >对类与对象理解与应用(0115PHP开发学习)

对类与对象理解与应用(0115PHP开发学习)

小辰
小辰原创
2020年01月18日 16:10:25566浏览

1.第一部分

主要内容:
  • 创建类: class
  • 实例化: new
  • 引用当前类: self
  • 引用当前类实例: $this
  • 引用当前类的父类: parent
  • 对象访问符: ->
  • 范围解析符: 双冒号 ::
  • 类的继承与扩展: extends
  • 成员的访问限制符: private, protceted, public
    实例
    效果图
    代码
  1. <?php
  2. // 创建类sum
  3. class sum
  4. {
  5. //对公共变量进行赋值
  6. public $a =1;
  7. public $b =1;
  8. //创建函数
  9. public function sum($x,$y)
  10. {
  11. $c =$x + $y ;
  12. echo $c;
  13. }
  14. }
  15. /**
  16. * 访问当前类中的属性,实例化1
  17. */
  18. class mydemo
  19. {
  20. public $site = '1.朱老师不帅';
  21. public $date = '3.朱老师很帅';
  22. //private: 属于私有成员,只属于当前,只允许当前类访问,不允许子父类访问,外部也不行
  23. private $cat = '4.私有的猫';
  24. //protected:属于受保护的成员,不允许类外部访问,但可以在子类中访问
  25. protected $pig = '5.帅哥';
  26. public function getSite()
  27. {
  28. // 实例化类
  29. $obj = new mydemo();
  30. // 输出site属性
  31. return '2.反复强调:'.$q=$obj ->site;
  32. }
  33. // 运用当前类的实例$this
  34. public function getIn()
  35. {
  36. return $this ->site;
  37. }
  38. // 构造方法:实例化自动调用
  39. public function __construct ($date='555'){
  40. $this ->site = $date;
  41. }
  42. }
  43. $obj = new mydemo(333);
  44. // 访问site属性,并输出,因为构造方法先执行,实例化重新赋值site
  45. echo $obj ->site;
  46. echo "<br>";
  47. //重新实例化,没传参数,数值变成555
  48. echo $obj ->getSite();
  49. echo "<br>";
  50. echo $obj ->getIn();
  51. echo '<hr>';
  52. //外部无法访问我的猫cat属性
  53. echo '2.反复强调:'.$q=$obj ->site;
  54. // 访问下面无法访问的属性,下面的也显示不出来
  55. // echo $obj ->cat;
  56. // echo $obj ->pig;
  57. echo '<br>'.'无法显示的获取的部分';
  58. echo '<hr>';
  59. //对于继承的使用,继承mydemo类,继承所有满足条件的元素
  60. class Demo2 extends mydemo
  61. {
  62. // 对父类方法扩张
  63. public function getIn(){
  64. return parent:: getIn()."666". $this->hhh;;
  65. }
  66. // public function getIn()
  67. // {
  68. // return parent::getIn() . "讲师: " . $this->hhh;;
  69. // }
  70. public $hhh;
  71. public function __construct($hhh,$date)
  72. {
  73. parent::__construct($date='朱老师帅呆了');
  74. $this -> hhh = $hhh;
  75. }
  76. }
  77. $mobj = new Demo2(9,8);
  78. echo $mobj ->hhh;
  79. echo '<br>';
  80. echo $mobj ->getIn();
  81. echo '<br>';
  82. //通过构造方法赋的值,指这部分construct($hhh,$date),并不会改变类的属性元素
  83. echo $mobj ->date;
  84. ?>

2.对trait的应用

  • 方法集: trait, 代码复用, 突破类的单继承的限制
    效果图
    代码
  1. <?php
  2. // trait: 改变了单继承的模式,实现了代码复用
  3. trait Test
  4. {
  5. public function getInfo()
  6. {
  7. return '我是: ' . $this->site . ' 在学: ' . $this-> role;
  8. }
  9. }
  10. // 不能实例化
  11. // $o = new Test();
  12. // 1. 创建类
  13. class mydemo2
  14. {
  15. // 引用trait
  16. use Test;
  17. public $site;
  18. protected $role;
  19. public function __construct($site='', $role="")
  20. {
  21. $this->site = $site;
  22. $this->role = $role;
  23. }
  24. }
  25. // 基于mydemo2创建子类
  26. class Sub extends mydemo2
  27. {
  28. protected $shuai;
  29. // 重写了父类的__construct()
  30. public function __construct($site, $role, $shuai)
  31. {
  32. parent::__construct($site, $role);
  33. $this->shuai = $shuai;
  34. }
  35. // 重写了父类的getInfo()
  36. public function getInfo()
  37. {
  38. return parent::getInfo() . ', 我帅不帅: '. $this->shuai;
  39. }
  40. }
  41. class Sub99 extends Sub
  42. {
  43. }
  44. //实例化化,传值
  45. $sub = new Sub99('小辰', 'php开发', '帅');
  46. echo $sub->getInfo();

3.小结

通过这次实验,我对于类与对象有了进一步的理解,在第一部分,对于重新实例化,却没有值,所以没地二个结果产生影响。在做trait实验的时候,我把大括号,用成了中文状态下的括号,就一直出错,还好最后找出来问题了,另外基本基本就没有什么问题了。

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