在PHP中使用特性

Using traits in PHP

本文关键字:PHP      更新时间:2023-10-16

我似乎找不到一个好的线程来解释这一点,但是PHP中的特征与c++中的结构相同(或多或少)吗?我了解PHP特征的基本语法以及c++的一些中间结构,但是它们是以相同的方式使用的还是PHP有不同的使用标准?

此外,由于似乎没有公共/私有差异,如c++(其中一个类是默认私有的,直到'public:'或'protected:'被指定,而一个结构是公共的,直到'private:'或'protected:'被指定),或者是相同的一般规则?

Trait类似于类,但只是为了以细粒度和一致的方式对功能进行分组。不可能单独实例化Trait。它是对传统继承的补充,使行为的横向组合成为可能;也就是说,不需要继承就可以应用类成员。

trait Hello
{
   function sayHello() {
       echo "Hello";
   }
}
trait World
{
   function sayWorld() {
       echo "World";
   }
}
class MyWorld
{
   use Hello, World;
}
$world = new MyWorld();
echo $world->sayHello() . " " . $world->sayWorld();  //Hello World
基本上,引入trait是为了避免继承时的一些问题,这些是类或接口中常见的问题,如

课堂问题:

在传统中,你不允许创建抽象方法,并且如果一个类继承了任何其他类,它不能被另一个类继承。

抽象类问题:

在抽象类中,你可以创建抽象方法和主体方法,但是当一个类要继承这个抽象类时,它必须定义抽象类的所有抽象方法的主体。另外,如果这个抽象类继承的是与普通类相同的任何其他类,那么它也不能被其他类继承。

Interface:

通过使用interface,你可以在PHP中实现类的多重继承,但是在接口中,你不允许定义方法的任何主体。你只能有抽象方法,当你要在类中实现它时,你必须定义所有方法的主体。

trait是一个局部类实现(即常量,属性和方法),可以混合到一个或多个现有的PHP类。特征有双重作用:它们表明一个类能做什么(类似于接口),并且它们提供模块化实现(类似于接口)类).

"Modern PHP",978-1-491-90501-2,Page 17

它不太像结构体,train是类的所谓插件或插件,而结构体更像是一个集合对象。当你使用trait时,它基本上被注入到类中,类似于c++中的多重继承。

<?php
    trait MyTrait {
        protected $myField;
        public function setMyField($value){
             return $this->myField = $value;
        }
        public function getMyField(){
             return $this->myField;
        }
    }

?>
<?php
class MyClass
{
    use MyTrait;
}
$myClass = new MyClass();
$myClass->setMyField("Hello World");
echo $myClass->getMyField();//echo's Hello World
相关文章:
  • 没有找到相关文章