从 php 中的特征访问类常量会在 VScode 中出现错误

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

我在 laravel 中的同一个 App 文件夹中有一个类和一个特征

MyClass.php

<?php

namespace App;

class MyClass {

    use myTrait;
    CONST MY_CONST = 'CONST';
    
    public function showConst() {
        echo $this->myTraitMethod();
    }
    
}

MyTrait.php

<?php

namespace App;

class MyTrait {
    
    public function myTraitMethod() {
        return self::MY_CONST; // Undefined class constant 'MY_CONST'
        return static::MY_CONST; // Undefined class constant 'MY_CONST'
        return MyClass:MY_CONST; // This is the only one that works but I'm forcing the class name
    
    }
}

问题是我无法访问 MY_CONST 除非我强制使用父类名称,这对我来说不是解决方案。

更新 问题出在 vscode 上,我的意思是代码在 self 和 static 下都运行良好,但 vscode 返回错误

Undefined class constant 'MY_CONST'

我更新了问题标题以匹配实际问题

php class oop constants traits
1个回答
0
投票

在 PHP 中,特征充当可重用的代码块,可以包含在多个类中。这种方法允许开发人员在各个类之间共享方法,而不受继承的限制,继承仅支持单个父类。然而,有一个缺点:特征不能直接引用包含它们的类中定义的常量。存在这种限制是因为常量特定于每个类,并且对于特征本身并不可见。

在您的原始设置中:

您有一个名为 MyClass 的类,它定义了常量 MY_CONST。

您想在名为 MyTrait 的特征中使用此常量。

但是,直接从特征访问 MY_CONST 会导致错误,除非类名被硬编码,这具有限制性并降低了特征的灵活性。

解决方法 为了解决这个问题,我们可以在特征中引入一个抽象方法。抽象方法不包含任何实现,但强制任何类使用该特征来定义它。通过这样做,我们创建了一种方法,让类将常量的值传递给特征,而特征不需要直接访问常量本身。

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