博客列表 >PHP基础概念:继承、扩展和trait方法集

PHP基础概念:继承、扩展和trait方法集

李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰原创
2021年02月21日 13:41:04828浏览

一、类的组成部分:

1.类有关键字:class
2.类的名字:通常首字母大写
3.类的扩展关键字:extends
4.类的主体有大括号包括{}

二、类通常包含属性和方法

1.类的属性和方法的修饰符:

  • 访问修饰符:
    • public:公开的,谁都可以直接访问
    • private:私有的,仅类内的方法可以访问(字类无法直接访问)
    • protected:受保护的,仅类本身和子类可以直接访问
  • 静态修饰符
    • static:通常在属性名(方法函数function)之前,在访问修饰符之后(在方法中使用时,用于延时绑定)

三、类中查常见的关键字

  • $this:类的实列对象
  • self:类的本身
  • parent:通常指向父类
  • static:通常延时访问,当前运行方法的类
  • ::访问范围符,通常跟self|parent|static使用

四、类中常见的修饰符

1.final:在类名前声明final关键字,当前类则无法被继承,如果类中方法声明了关键字final关键字,当前方法则无法被子类修改
2.abstract:在类名前声明关键字abstract,当前类则为抽象类,抽象类必有抽象方法(抽象方法没有函数体);

五、Trait方法集

1.Trait方法集的组成:方法集属于伪类的一种,不能实列化

  • 关键字Trait+方法集名字建议由小写t开头首字母大写例如tUser
  • 方法集主体,由大括号包括,里面由属性和方法组成
  • 在类中通过关键字use关键字来使用,可以多个方法集组合使用,用逗号分开:其中方法集和父类以及字类的优先级:子类>方法集>父类;
  • 如果方法集中的方法与类中或者其他方法集的命名冲突时,可以通过insteadof(指定使用哪个方法集中的方法替代重名的方法)和as(重名的方法可以起别名,使用)来进行解决类如:
  1. use tT1,tT2{
  2. tT1::show insteadof tT2;
  3. tT2::show as sh;
  4. }

六、实战练习

1代码

  1. <?php
  2. include "autoload.php";
  3. echo "测试OK";
  4. class UseName
  5. {
  6. public $name="ldy";
  7. private $age=35;
  8. protected $sex="男";
  9. private static $id=1;
  10. public function __construct(){
  11. }
  12. public function show():string
  13. {
  14. return $this->name.__FUNCTION__.__METHOD__.__CLASS__;
  15. }
  16. // self的作用
  17. public function string():string
  18. {
  19. return self::$id.$this->name;
  20. }
  21. //static延迟绑定
  22. public function tostring():string
  23. {
  24. return static::$id;
  25. }
  26. }
  27. Trait tT1
  28. {
  29. function show():string
  30. {
  31. return __METHOD__;
  32. }
  33. function put():string
  34. {
  35. return __METHOD__;
  36. }
  37. }
  38. Trait tT2
  39. {
  40. function show():string
  41. {
  42. return __METHOD__;
  43. }
  44. }
  45. class Demo extends UseName
  46. {
  47. use tT1,tT2{
  48. tT1::show insteadOf tT2;
  49. tT2::show as sh;
  50. }
  51. public static $id=2;
  52. }
  53. $usr=new UseName();
  54. $user=new Demo();
  55. echo $usr->show();
  56. echo $usr->string();
  57. echo $usr->tostring();
  58. echo "<hr>";
  59. echo $user->string();
  60. echo $user->tostring();
  61. echo $user->show();
  62. echo "<hr>";
  63. echo "<h3>方法集中方法名冲突</h3><br>";
  64. echo $user->show()."<br>";
  65. echo $user->sh()."<br>";
  66. echo "<hr>";
  67. echo "__FILE__的返回内容:".__FILE__."<br>";//返回当前文件的具体路径位置(包含文件名字)
  68. echo "__DIR__的返回内容:".__DIR__."<br>";//返回当文件的的文件路径(不包含文件名)
  69. echo "__NAMESPACE__的返回内容:".__NAMESPACE__."<br>";
  70. echo "dirname()的返回内容:".dirname(__FILE__);//函数返回路径中的目录名称部分。作用等同于__DIR__;
  71. echo "<hr>";
  72. $user_one=new Login();
  73. echo $user_one->input();

2.运行结果

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