在学习PHP时遇到trait,不解,研究了一下
官方文档写的很详细
http://www.php.net/manual/zh/language.oop5.traits.php
<?php
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
/* ... */
}
?>
用trait定义后,使用use 就可以使用里面的函数了
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
输出: Hello World
优先级:当前类会覆盖trait,trait覆盖基类
我在做这个例子的时候在想为什么会输出Hello World,按照优先级应该是输出World,发现parent::sayHello();,parent;;可用于调用父类中定义的成员方法,如果把extends Base去掉,会报错
Fatal error: Uncaught Error: Cannot access parent:: when current class scope has no parent in H:\httpd-2.4.23-win64-VC14\Apache24\htdocs\helloworld.php:10 Stack trace: #0 H:\httpd-2.4.23-win64-VC14\Apache24\htdocs\helloworld.php(20): MyHelloWorld->sayHello() #1 {main} thrown in H:\httpd-2.4.23-win64-VC14\Apache24\htdocs\helloworld.php on line 10
分享到:
相关推荐
在Laravel框架中,trait是一种代码复用机制,它允许开发者将一组方法插入到类中,而无需使用继承。Trait Maker是Laravel开发中的一个工具,它提供了一个 artisan 命令来帮助开发者快速创建trait的存根文件,从而简化...
本教程将深入探讨如何利用Artisan命令行工具创建自定义的Trait存根,以便更高效地管理和组织项目中的代码。 标题 "Laravel开发-artisan-trait-maker" 提及的是一个专门为Laravel定制的工具,它扩展了Artisan命令,...
`laravel-trait-uuid`是专门为Laravel设计的一个特性(Trait),用于方便地在Eloquent模型中实现UUID作为主键的功能。 本文将详细讲解如何使用`laravel-trait-uuid`来在Laravel项目中集成UUID,并探讨其背后的工作...
Laravel开发-eloquent-model-trait 为雄辩模型添加有用的方法
Rust 语言和 Trait Rust 语言是 Mozilla 员工 Graydon Hoare 的私人项目,2009 年 Mozilla 开始赞助这个项目,并在 2010 年首次揭露了它的存在。Rust 1.0 于 2015 年 5 月 15 日发布,现在 Rust 由 Mozilla 支持,...
这个“Laravel开发-trait-maker .zip”压缩包可能包含了一个工具或教程,帮助开发者更方便地创建和管理Traits。下面将详细讨论Laravel中的Traits及其相关知识点。 1. **Traits的基本概念**: Traits是PHP 5.4引入...
在Laravel框架中,trait是一种代码复用机制,它允许你在多个类之间共享一组方法。在本主题中,我们将深入探讨如何使用Laravel创建和更新trait,特别是在Laravel 5.4版本中。 Laravel 5.4引入了一些新特性,但trait的...
`addressable-trait`就是一个专门为Laravel 5.1设计的特性,它旨在简化模型对象与地址管理的集成。这个特性使得我们可以方便地在模型上添加、编辑和管理地址信息,无需在每个模型中重复编写相同的功能代码。 首先,...
`laravel-trait-updatedby` 是一个专门为Laravel设计的特性(Trait),它帮助开发者方便地在Eloquent ORM(对象关系映射)模型中自动添加或更新`updated_by`字段,这个字段通常用来存储最后更新数据的用户的ID。...
这就是`laravel-sluggable-trait`的作用,它提供了一个方便的方式来为模型生成和管理slug。这个trait是Eloquent ORM(对象关系映射)的一个扩展,帮助我们在数据库记录中创建基于文本的唯一标识符,通常用于URL路径...
本篇将详细介绍如何通过 Trait(特质)的方式为 Eloquent ORM(对象关系映射)的模型增加搜索功能。 首先,让我们理解一下 Trait 在 PHP 和 Laravel 中的角色。Trait 是一种代码复用机制,允许我们在多个类之间共享...
在Laravel框架中,Validation Trait是一个非常重要的工具,它使得数据验证变得更加简洁和高效。这个特质(trait)被广泛应用于控制器中,以处理输入数据的验证逻辑,确保应用程序接收到的数据是安全、完整且符合预期...
`laravel-bitwise-trait`是一个非常实用的工具,它允许在任何类上方便地使用位运算符,从而简化代码并提高效率。这个特性使得在处理如权限管理、状态标志等场景时,能够更有效地进行操作。 位运算符是计算机科学中...
而Trait的出现很好地解决了这个问题,它可以将公共的方法集中在一个Trait中,然后多个类可以复用这个Trait,实现了代码的复用和解耦。 Trait的使用非常灵活,可以单独使用,也可以在一个类中引入多个Trait。如果在...
在Laravel框架中,`laravel-encryptable-trait`是一个非常实用的特性,它允许开发者轻松地对Eloquent模型的特定字段进行加密处理。这个特性使得敏感数据在存储到数据库之前可以被加密,增加了数据的安全性,防止未经...
`trait`,在编程中,是一种设计模式,主要用于在编译时提供关于某种类型的信息。在C++中,Traits是一种技术,它允许我们在编译期间获取类型的相关信息,而不必在运行时进行动态检查。Traits类通常是一个模板,用于...
scala trait.pptx
羽衣甘蓝(Brassica oleracea L. var. acephala)是一种观赏性较强的甘蓝变种,原产于地中海地区,是一种二年生的蔬菜栽培品种。其观赏期可长达3至4个月,因其叶片颜色丰富、花叶和形状多变而闻名,叶片颜色有白色、...
详细讲解了关于c++模板技术中的trait和policy技术,很值得一看。