首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中声明抽象const

如何在php中声明抽象const
EN

Stack Overflow用户
提问于 2022-08-01 20:39:03
回答 1查看 54关注 0票数 0

我在这篇文章中发现@WebSmithery用户使用一个聪明的'hack‘来解决这个问题。PHP中的抽象常量-强制子类定义常量

在那篇文章中,@WebSmithery发布了一个有用的例子。见下文:

代码语言:javascript
复制
<?php

abstract class Foo {

    // Self-referential 'abstract' declaration
    const NAME = self::NAME;

}

class Fooling extends Foo {

    // Overrides definition from parent class
    // Without this declaration, an error will be triggered
    const NAME = 'Donald';

}

$fooling = new Fooling();

echo $fooling::NAME;

虽然上面的例子很好,但我确实发现了一个问题。如果抽象类有访问const (本例中的名称)本身的代码,那么这个'hack‘就会失败。下面是一个例子。当我运行它时,它会抛出此错误“无法声明自引用常量”。想知道有没有办法绕过这件事吗?

代码语言:javascript
复制
<?php

abstract class Foo
{

    // Self-referential 'abstract' declaration
    const NAME = self::NAME;

    public function echoNAME()
    {
        echo Foo::NAME;
    }
}

class Fooling extends Foo
{

    // Overrides definition from parent class
    // Without this declaration, an error will be triggered
    const NAME = 'Donald';
}

$fooling = new Fooling();

$fooling->echoNAME();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-01 22:26:06

如果要引用子类的静态成员,则需要使用后期静态绑定

因此,您可以使用Foo:NAME而不是static::NAME

代码语言:javascript
复制
<?php

abstract class Foo
{
    
    // Self-referential 'abstract' declaration
    const NAME = self::NAME;
    
    public function echoNAME()
    {
        echo static::NAME;
    }
}

class Fooling extends Foo
{
    
    // Overrides definition from parent class
    // Without this declaration, an error will be triggered
    const NAME = 'Donald';
}

$fooling = new Fooling();

$fooling->echoNAME();
echo PHP_EOL;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73199358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档