Blogger Information
Blog 145
fans 7
comment 7
visits 164178
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础概念:继承、扩展和trait方法集
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
Original
827 people have browsed it

一、类的组成部分:

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.运行结果

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
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
Author's latest blog post