什么是父代::特质范围

问题描述 投票:0回答:1

我有一个使用特征MyTrait的类MyClass。它们都具有方法getName()(MyClass从MyParentClass继承它)。

MyTrait :: getName()的父范围是什么?在MyTrait上下文中调用MyClass :: getName()和MyParentClass :: getName()的正确方法是什么?。

请参见下面的代码以供参考。

trait MyTrait {
   public function getName() : string
   { 
       return parent::getName() . '_special';
   }
}

class MyParentClass {
   public function getName(): string
   {
      return "MyName";
   }
}
class MyClass extends MyParentClass {
   use MyTrait;

}
php php-7
1个回答
1
投票

[特质方法的行为就像它们是在类中使用trait一样声明的,]

trait MyTrait {
   public function getName() : string
   {
       return parent::getName() . '_special';
   }
}

class MyClass extends MyParentClass {
   use MyTrait;

}

在功能上与]相同>

class MyClass extends MyParentClass {
   public function getName() : string
   {
       return parent::getName() . '_special';
   }
}

应该清楚,在这种情况下,parent是指MyParentClass。如果有任何疑问,请使用以下代码:

<?php

trait MyTrait {
   public function getName() : string
   {
       return parent::getName() . '_special';
   }
}

class MyParentClass {
   public function getName(): string
   {
      return "MyName";
   }
}
class MyClass extends MyParentClass {
   use MyTrait;

}

$instance = new MyClass();

echo $instance->getName();

产生以下输出:

MyName_special

可以使用特征方法中的return parent::class;ref)进一步测试/演示,返回MyParentClass

© www.soinside.com 2019 - 2024. All rights reserved.