php protected const,关于const:PHP类常量 – 公共,私有还是受保护?

假设常量属性是自动公开的,对吗?有没有办法让它们成为私有的或受保护的?

事先谢谢。

隐藏它们的原因是什么?即使它们是公开的——它们是只读的。

常量应该是公共的,因为它们描述的是关于类的不可变事实,而不是状态或它。所以隐藏它们是没有价值的。

可能在将来的版本中用__getStatic伪造它们。一般来说,在脚本语言中是否需要访问修饰符是有问题的。(javascript/python更加面向对象,不需要它们。)

是啊,回想起来有点傻。感谢您的回复。

我认为这根本不是一个愚蠢的问题;私有类常量会很有用:用于类中的内部使用…公共方法可以使用它们,但外部代码不应该依赖它们…API可能会更改。

首先,如果您想创建一个数据库类,那么将主机、用户名、服务器、数据库声明为私有常量是有意义的,对吗?

在ASP.NET中,如果我想存储一些类需要但在类外部不需要的静态信息,我将使用存储在顶部、易于找到和更改的私有常量。

历史上,只要加载了类,并且没有办法更改它,类常量总是可以公开访问的。

从PHP7.1开始,默认情况下它们保持公共状态,但现在可以应用访问修饰符。以下是发行说明中的示例:

class ConstDemo

{

const PUBLIC_CONST_A = 1;

public const PUBLIC_CONST_B = 2;

protected const PROTECTED_CONST = 3;

private const PRIVATE_CONST = 4;

}

类常量应该具有私有/受保护的选项,因为公共会公开类的内部细节,其他类/代码可能会误认为它们可以使用,因为它们是公共的。

很高兴知道更改私有常量只会影响它在其中定义的类。不幸的是,我们没有这个选择。

记得你学习对象设计和分析时的情景…您给类方法和属性尽可能多的限制性访问,然后根据需要放松它们(更难回到另一种方式,因为其他类/代码开始使用它们,这样会破坏其他代码)。

解决办法

最好的办法是只创建一个私有或受保护的变量,并用大写字母表示它是一个常量。您可以始终创建一个名为constant($value-to-be-constant)的类,该类实现正确的magic方法/spl接口,以防止更改它。

最好的办法就是创建一个私有或受保护的static变量…

我知道这个问题已经6岁了

php 7.1(当前为rc1)允许指定类常量的可见性。

class Token {

// Constants default to public

const PUBLIC_CONST = 0;

// Constants then also can have a defined visibility

private const PRIVATE_CONST = 0;

protected const PROTECTED_CONST = 0;

public const PUBLIC_CONST_TWO = 0;

//Constants can only have one visibility declaration list

private const FOO = 1, BAR = 2;

}

附加信息

类常量可见性上的RFC

关于类常量可见性的博客文章

从php7.1开始,可以使用访问修饰符(public、private或protected定义类常量。请看下面的示例:

class superheroes{

public const kal_el = 'Superman';

protected const bruce_wayne = 'Batman'; # works php7.1 onwards    private const anthony_stark = 'Iron Man'; # works php7.1 onwards

public static function show_remaining(){

echo self::bruce_wayne, '
';

echo self::anthony_stark, '
';

}

}

echo superheroes::kal_el, '
';

superheroes::show_remaining();

学分:http://bellupper.io/post/48/defining-class-constants-in-php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值