博客列表 >PHP类与对象,设计类和抽象类,接口

PHP类与对象,设计类和抽象类,接口

阿心
阿心原创
2020年04月30日 10:28:41593浏览

类与对象

  1. <?php
  2. //类与对象
  3. //类成员方法
  4. //工作类
  5. class User
  6. {
  7. public $name='黄金左脚';
  8. public static $age=30;
  9. function Demo1()
  10. {
  11. //老方法不推荐这样写:
  12. //$user=new User();
  13. //echo $user->name;
  14. //新特性:直接使用PHP系统定好的$this->就可以了。
  15. echo $this->name;
  16. echo '<br>今年的年龄是:'. self::$age;//这种方式也不推荐。推荐使用Demo3()
  17. }
  18. //closuer 用于代表 匿名函数 的类.允许在匿名函数创建后对其进行更多的控制
  19. //可以限定类型(string $dep,Closure $closure)
  20. function Demo2($closure,$dep)//顺序跟传参一样
  21. {
  22. //添加私有属性(不推荐)
  23. //$deposit=50000;
  24. //global $deposit
  25. //新特性通过传参来实现(推荐)不过传参时至少需要两个参数。一个会报错
  26. echo $closure().$dep;
  27. }
  28. public static function Demo3()
  29. {
  30. echo self::$age;
  31. }
  32. }
  33. $user=new User();
  34. $user->Demo1();
  35. echo '<hr>';
  36. $have=function()
  37. {
  38. echo '有房有车,年薪:';
  39. };
  40. $deposit=500000;
  41. //这里传参的顺序需要注意下,还有只有一个参数好像也会出错
  42. $user->Demo2($have,$deposit);
  43. echo '<br>';
  44. $user->Demo3();

类成员访问控制:作用域

  1. <?php
  2. //类成员访问控制:作用域
  3. class User
  4. {
  5. public $name='王霸丹';
  6. //protected为受保护的,禁止外部访问
  7. protected $tel='13500135000';
  8. // private为私有的,禁止继承和外部访问
  9. private $birth='2020-02-20 20:20:02';
  10. //public static function stat();非抽象方法会报错
  11. //本类中可以访问本类中的任何方法
  12. public static $age=30;
  13. public function Demo1()
  14. {
  15. echo $this->birth;
  16. }
  17. protected function Demo4()
  18. {
  19. echo '我是单身汪';
  20. }
  21. }
  22. //extends继承 /// 多态
  23. class My extends User
  24. {
  25. protected $address='china';
  26. protected $bank=11001100;
  27. private $pass=123456;
  28. public function Demo2()
  29. {
  30. echo $this->name,'<br>',$this->tel,'<br>';
  31. //echo $this->birth;//birth是私有不被继承,所以不会被打印
  32. }
  33. public function Demo3()
  34. {
  35. echo '我的年龄是:',self::$age;
  36. echo "<br>目前:";
  37. $user=new User();
  38. $user->Demo4();
  39. echo "<br>过来N年后,我已经是:";
  40. static $age=60;
  41. echo $age,'现在卡号是:',$this->bank;
  42. echo $age,'现在卡号密码是:',$this->pass;
  43. //parent,它指的就是派生类在 extends声明中所指的基类的名字。这样做可以避免在多个地方使用基类的名字。
  44. echo '<br>';
  45. // 二类成员: 子类有权访问的父类成员类型, public, protected
  46. // 三种操作: 子类对父类的三种操作: 继承, 重写, 扩展
  47. // 1. 继承: 父类的二类成员自动成为子类的成员
  48. // 2. 重写: 覆写与父类/基类同名的成员(属性, 方法)
  49. // 3. 扩展: 子类添加自身的方法来增加/扩展父类的功能
  50. // 重写父类成员
  51. echo parent::Demo4().$this->address.parent::Demo1();
  52. }
  53. }
  54. $user=new User();
  55. $user->Demo1();
  56. echo '<br>';
  57. $my=new My;
  58. $my->Demo2();
  59. $my->Demo3();

最终方法和最终类 final

  1. <?php
  2. //最终方法和最终类 final
  3. //可以理解:final禁止某个了或方法被重写
  4. //final class User//这种方法就禁止了class Name里面的方法重写
  5. class User
  6. {
  7. public $age=30;
  8. public function Demo1()
  9. {
  10. // 打印类和方法
  11. echo __METHOD__,'<br>';
  12. }
  13. }
  14. class Name
  15. {
  16. public function Demo1()
  17. {
  18. // 打印类名和(类和方法名)
  19. echo __CLASS__.__METHOD__;
  20. }
  21. }
  22. $user = new User;
  23. $user->Demo1();
  24. $name=new Name;
  25. $name->Demo1();

抽象类

  1. <?php
  2. // 抽象类: 部分分离了" 设计(抽象类中完成)与实现(工作类中完成)"
  3. //抽象类不能被实例化,关键字“abstract”.语法:abstract function xx();
  4. //只要类里面存在一个抽象方法,这个类就叫抽象类
  5. abstract class Test
  6. {
  7. protected $age=30;
  8. protected function Deom1()
  9. {
  10. echo $this->age;
  11. }
  12. abstract protected function Demo2();
  13. }
  14. //Test是抽象类,所以不能被实例化(不能单独运行)
  15. //new Test;//报错为不能实例化
  16. //工作类同样可以是抽象类
  17. class Test1 extends Test
  18. {
  19. //实现类继承后必须实现抽象类.否则报错
  20. //继承后需要使用请改为public
  21. public function Demo2()
  22. {
  23. echo '测试下。。。';
  24. }
  25. }
  26. class Test2 extends Test1
  27. {
  28. }
  29. $test1=new Test1();
  30. $test1->Demo2();

接口

  1. <?php
  2. //接口:关键字:interface
  3. //完成分离:设计与实现;
  4. // 使用与类相似的语法: 抽象方法, 常量, 构造方法(魔术方法的一种)。 接口允许多继承
  5. //可以是单接口。也可以是多接口
  6. interface iUser
  7. {
  8. const NAME='阿蒙';
  9. //方法需要public
  10. public static function Demo1();
  11. }
  12. interface iName
  13. {
  14. public function Demo2();
  15. }
  16. //接口继承关键字implements
  17. //实现类
  18. class iUser1 implements iUser,iName
  19. {
  20. public static function Demo1()
  21. {
  22. echo '测试下。。';
  23. }
  24. public function Demo2()
  25. {
  26. echo '这是demo2';
  27. echo iUser::NAME;
  28. }
  29. }
  30. $iuser=new iUser1();
  31. $iuser->Demo1();
  32. $iuser->Demo2();
总结:刚开始写作业的时候碰到很多钉子,导致迟迟不能解决,迟迟不能交作业。等到研究明白了,才发现。这些作业确实是非常的简单。不过有一点,应该跟时间有关系,应该多敲一下代码涨点记性。要不然一看代码就懂,一写代码就忘。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议