热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP中Trait特性的语法实现及其在代码扩展与复用中的应用分析

trait 功能与语法

trait 功能与语法

  1. php
  2. //trait 功能与语法
  3. //Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。
  4. trait Demo
  5. {
  6. protected $name="张冠李戴";
  7. static $age;
  8. abstract function Test();
  9. }
  10. class Demo1
  11. {
  12. //引入关键字 use
  13. use Demo;
  14. function Test()
  15. {
  16. echo Demo::$age;
  17. }
  18. }
  19. $demo1=new Demo1;
  20. //给静态变量赋值
  21. Demo::$age=33;
  22. $demo1->Test();

trait:代码复用

  1. php
  2. //trait:代码复用
  3. //get_class_vars — 返回由类的默认属性组成的数组
  4. trait tDemo
  5. {
  6. function con()
  7. {
  8. $cl=get_class_vars(__CLASS__);
  9. printf('

    %s',print_r($cl,true));

  10. }
  11. }
  12. class Demo
  13. {
  14. use tDemo;
  15. protected $Title='百度';
  16. public $Http='https://baidu.com';
  17. public function baidu()
  18. {
  19. echo $this->Title,"--的网址是:".$this->Http,"
    "
    ;
  20. }
  21. }
  22. $demo=new Demo;
  23. $demo->baidu();
  24. $demo->con();
  25. class Demo1
  26. {
  27. use tDemo;
  28. protected $Title='百度';
  29. public $Http='https://baidu.com';
  30. public $arr=[1,2,3,[4,5,6,[7,8,9]]];
  31. public function baidu()
  32. {
  33. echo $this->Title,"--的网址是:".$this->Http,"
    来个数组:"
    ,printf('

    %s

    ',print_r(($this->arr),true));

  34. }
  35. }
  36. $demo1=new Demo1;
  37. $demo1->con();
  38. $demo1->baidu();

trait: 在继承上下文环境

  1. php
  2. // trait2: 在继承上下文环境中, 具有优先级, 通过优先的设置, 降低单继承的影响
  3. //这个优先级可以替换同名函数
  4. trait tDemo
  5. {
  6. function test()
  7. {
  8. //输出trait的方法
  9. echo 'son访问到了trait方法是:',__METHOD__;
  10. }
  11. }
  12. class Dad
  13. {
  14. function test()
  15. {
  16. echo 'son访问到了class方法是:',__METHOD__;
  17. }
  18. }
  19. class Son extends Dad
  20. {
  21. use tDemo;
  22. }
  23. $son=new Son;
  24. $son->test();

trait扩展

  1. php
  2. //trait组合实现功能扩展
  3. //功能扩展:
  4. trait tDemo1
  5. {
  6. function class_name()
  7. {
  8. //格式化打印类中属性
  9. $class_name=get_class_vars(__CLASS__);
  10. printf('

    %s',print_r($class_name,true));

  11. }
  12. }
  13. trait tDemo2
  14. {
  15. function method_name()
  16. {
  17. //格式化打印类中方法
  18. $method_name=get_class_methods(__CLASS__);
  19. printf('

    %s',print_r($method_name,true));

  20. }
  21. }
  22. //或更多trait
  23. class Test
  24. {
  25. use tDemo1,tDemo2;//同时引入
  26. public $name="手机";
  27. public $price=2000;
  28. }
  29. $test=new Test;
  30. $test->class_name();//调用函数,打印出当前类中的属性
  31. $test->method_name();
  32. //或者:
  33. trait tDemo3
  34. {
  35. use tDemo1,tDemo2;
  36. function mar()
  37. {
  38. }
  39. public static function test()
  40. {
  41. }
  42. abstract public function abtest();
  43. public $address='地球';
  44. public $type='外星人';
  45. }
  46. class Test1
  47. {
  48. use tDemo3;
  49. public $age=3000;
  50. public function abtest(){
  51. }
  52. }
  53. $test1=new Test1;
  54. $test1->class_name();
  55. $test1->method_name();

总结:记性不太好,还是很多记不住,有时候靠猜或者靠测试。trait不难理解。


推荐阅读
  • 本章深入探讨了Java中的多态特性,这是面向对象编程的核心概念之一。多态指的是同一操作作用于不同的对象时,可以有不同的解释和执行方式。在Java中,多态通过父类引用变量引用子类对象来实现,即 `父类类型 引用变量名 = new 子类类型();`。这种方式允许程序在运行时根据实际对象的类型动态地选择合适的方法执行,从而提高代码的灵活性和可扩展性。此外,本章还详细介绍了多态的应用场景和注意事项,帮助读者更好地理解和运用这一重要概念。 ... [详细]
  • 本文探讨了LINQ在数据查询中的应用及其常见问题。具体分析了LINQ to SQL与LINQ to Entities的区别,前者直接读写数据库,而后者通过实体模型操作数据库。此外,还讨论了如何利用LINQ对内存中的数据集(如DataSet中的多张表)进行高效查询和处理。 ... [详细]
  • 本研究聚焦于利用Java、PHP和Python开发的汽车销售管理系统,旨在为计算机科学专业学生的毕业设计提供参考。项目采用BS架构,结合多种编程语言的优势,实现高效的数据管理和用户交互。该系统不仅涵盖了汽车销售的核心功能,还通过集成先进的技术栈,提升了系统的稳定性和扩展性。 ... [详细]
  • MacBook上Vim基础个性化设置指南
    在MacBook上进行Vim的基础个性化设置,首先需要在终端中输入 `vim ~/.vimrc`。接着,将以下配置代码粘贴到 `.vimrc` 文件中:```vimset tabstop=4set numbersyntax oncolorscheme murphy```此外,Vim提供了多种配色方案供用户选择,建议自行探索并选择最适合自己的配色文件。通过这些简单的步骤,你可以显著提升Vim的使用体验。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • 基于STM32的智能太阳能路灯设计与华为云IOT集成方案
    基于STM32的智能太阳能路灯设计与华为云IOT集成方案 ... [详细]
  • 本文详细介绍了如何使用PHP进行MySQL数据库操作,从基础概念到实际应用。首先,通过示例代码展示了如何在本地建立与MySQL服务器的连接,例如使用 `mysql_connect('localhost', 'root', 'xxxxxx')` 函数。此外,文章还涵盖了数据查询、插入、更新和删除等常见操作,并提供了丰富的代码示例和最佳实践,帮助读者快速掌握PHP与MySQL的交互技巧。 ... [详细]
  • LeetCode 算法挑战:最小栈的 Java 实现与优化 ... [详细]
  • 针对拥有约300万条记录的大型SQL数据库,网站性能受到影响。为了提升效率,建议根据实际使用情况采取优化措施。例如,如果常用字段较多,可以考虑进行横向分表,按特定规则拆分数据以减轻单表负担。此外,还可以通过索引优化、查询重构和缓存机制等手段进一步提高数据库性能。 ... [详细]
  • 本文深入探讨了 Python 中 `issubclass` 内置函数的功能与应用。该函数用于检查一个类是否为另一个类的子类(包括直接、间接或虚拟继承)。通过详细解析其工作原理和实际应用场景,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 阿里巴巴Java后端开发面试:TCP、Netty、HashMap、并发锁与红黑树深度解析 ... [详细]
  • 如何在DataGridView中实现带有图标的单元格显示
    本文详细探讨了在C# WinForms应用程序中,如何通过DataGridView控件实现带有图标的单元格显示。文章不仅提供了具体的实现方法,还深入解析了相关技术细节,对于希望提升用户界面交互体验的开发者而言,具有很高的参考价值。 ... [详细]
  • 【每日算法】移除排序数组中的重复元素(JavaScript实现) ... [详细]
  • 本文简要介绍了 MacOS 系统的分区与引导机制。通过详细解析系统分区结构和引导加载过程,帮助用户更好地理解 MacOS 的启动流程。文章还涵盖了不同版本 MacOS 的分区特点,以及如何在遇到引导问题时进行故障排除。对于希望深入了解 MacOS 内部运作机制的用户来说,本文提供了丰富的技术细节和实用建议。 ... [详细]
  • 将Windows Server 2003的DHCP服务迁移到Windows Server 2008 R2的最佳实践与详细步骤
    近期,我们在为某单位进行网络系统升级,从Windows Server 2003迁移至Windows Server 2008 R2的过程中,整体进展较为顺利。然而,在迁移DHCP服务时遇到了一些挑战。本文详细介绍了此次迁移的最佳实践和具体步骤,包括前期准备、环境评估、数据迁移以及后期验证等环节,旨在为同类项目提供参考和指导。 ... [详细]
author-avatar
Eliza
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有