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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-8垃圾箱分布_您认为有关垃圾收集的7件事-完全错了

7-8垃圾箱分布关于Java Garbage Collection的最大误解是什么?它的真实情况如何? 小时候,我的父母曾经告诉我,如果我学习不好,我将成为垃圾收集者。 他们几乎不知道,垃圾回收实际上是很棒的。 也许这就是为…

c语言中abort函数的使用

点击上方蓝字关注我&#xff0c;了解更多咨询1、abort函数的作用是异常终止一个进程&#xff0c;意味着abort后面的代码将不再执行。2、当调用abort函数时&#xff0c;会导致程序异常终止&#xff0c;而不会进行一些常规的清除工作。实例#include <stdio.h> #include <…

php 异常值检测,PHP中的错误处理、异常处理机制分析

例&#xff1a;$a fopen(test.txt,r);//这里并没有对文件进行判断就打开了&#xff0c;如果文件不存在就会报错?>那么正确的写法应该如下&#xff1a;if(file_exists(test.txt)){$ffopen(test.txt,r);//使用完后关闭fclose($f);}?>一、PHP错误处理的三种方式A、简单的…

c语言中如何防止数组下标越界

点击上方蓝字关注我&#xff0c;了解更多咨询1、若数组长度和下标访问值出现错误&#xff0c;则会导致数组下标越界。数组下标从0开始&#xff0c;访问值为-1。2、在使用循环遍历数组元素时&#xff0c;注意防范off-by-one的错误。对于作为函数参数传入的数组下标&#xff0c;要…

java oauth2.0_教程:如何实现Java OAuth 2.0以使用GitHub和Google登录

java oauth2.0将Google和GitHub OAuth登录添加到Java应用程序的指南 我们添加到Takipi的最新功能之一是3rd party登录。 如果您像我一样懒惰&#xff0c;那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限&#xff0c;许多人都希望使用第三方登录&#xff0c;只要…

c语言中数组访问越界如何理解

点击上方蓝字关注我&#xff0c;了解更多咨询1、可以通过数组下标直接访问数组中的元素。2、如果一个数组被定义为n个元素&#xff0c;那么访问n个元素是合法的。如果访问n个元素以外&#xff0c;则是非法的&#xff0c;称为访问越界。实例int a[5] {0}; //等价 int a[5] {0,…

php全部公开课,PHP公开课|这篇PHP的each()函数教学数,只为了帮你的PHP会学的更好...

【摘要】PHP作为一种超文本预处理器&#xff0c;已经成为了我们常用的网站编程语言&#xff0c;并且结合了C语言&#xff0c;Java等我们常见的编程语言&#xff0c;所以&#xff0c;有很多web开发领域的新人都看中了他的使用广泛性&#xff0c;有很多人都想了解php的内容&#…

ogm session_带有Hibernate OGM的NoSQL –第三部分:在WildFly上构建REST应用程序

ogm session欢迎回到我们的教程系列“带有Hibernate OGM的NoSQL”&#xff01; 感谢Gunnar Morling&#xff08; gunnarmorling &#xff09;创建了本教程。 在这一部分中&#xff0c;您将学习如何在WildFly服务器上运行的Java EE应用程序中使用Hibernate OGM。 使用本教程前面…

java的define,关于预处理器:Java中的#define

我开始用Java编程&#xff0c;我想知道是否相当于C EDCOX1(0)的存在。对谷歌的快速搜索表明它没有&#xff0c;但有人能告诉我是否存在类似的东西吗&#xff1f;在Java中&#xff1f;我正在努力使我的代码更可读。例如&#xff0c;我希望能够编写myArray[PROTEINS]&#xff0c;…

c语言中函数是怎么理解?

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言中的函数是一个可以重复使用的代码&#xff0c;用于独立完成某个功能。2、它可以接收用户传输的参数&#xff0c;也可以不接收&#xff0c;将代码段封装成函数的过程称为函数定义。如果有返回值&#xff0c;使用return语句返…

java g1 收集调优_Java性能调优:充分利用垃圾收集器

java g1 收集调优JVM背后发生了什么&#xff0c;垃圾回收如何影响Java性能&#xff1f; 性能调优世界是一个危险的地方&#xff0c;一个JVM标志失衡&#xff0c;事情很快就会变得繁琐。 因此 &#xff0c;我们决定求助于Java性能调优专家&#xff0c; 单调 JVM探查器mjprof的创…

java的构造函数详解,Java构造函数与普通函数用法详解

函数也被称为方法&#xff01;函数的作用及特点&#xff1a;1、用于定义功能&#xff0c;将功能封装。2、可以提高代码的复用性。函数注意事项&#xff1a;1、不能进行函数套用(不可以在函数内定义函数)。2、函数只有被调用才能被执行。3、基本数据类型(String、int、….)修饰的…

c语言中函数的声明和定义

点击上方蓝字关注我&#xff0c;了解更多咨询1、函数声明&#xff0c;无需实现该函数的功能。函数声明只是一个空壳&#xff0c;不会有特定的函数实现。2、函数定义&#xff0c;必须实现该函数的功能&#xff0c;要实现函数的实现。#include<stdio.h>实例//使用函数前&am…

bean注入属性_摆脱困境:将属性值注入配置Bean

bean注入属性Spring Framework对将从属性文件中找到的属性值注入到bean或Configuration类中提供了很好的支持。 但是&#xff0c;如果将单个属性值注入这些类中&#xff0c;则会遇到一些问题。 这篇博客文章指出了这些问题&#xff0c;并描述了我们如何解决它们。 让我们开始…

php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...

JavaScript 实现打印,打印预览,打印设置WebBrowser是IE内置的浏览器控件&#xff0c;无需用户下载.一、WebBrowser控件二、WebBrowder控件的方法 //打印WebBrowser1.ExecWB(6,1);//打印设置WebBrowser1.ExecWB(8,1);//打印预览WebBrowser1.ExecWB(7,1);关于这个组件还有其他的用…

c语言中常规函数和指针函数区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、在函数名前面多了一个*号&#xff0c;而这个函数就是一个指针函数。2、其返回值是一个int类型的指针&#xff0c;是一个地址。实例#include<stdio.h>int* fun1(int* x) //传入指针 {int* tmp x; //指针tmp指向xret…

jvm崩溃的原因_JVM崩溃时:如何调查最严重错误的根本原因

jvm崩溃的原因当应用程序崩溃时&#xff0c;您可以学到什么&#xff1f; 我认为&#xff0c;“后见之明是20 /”是最喜欢的短语之一托马斯罗梅尔 &#xff0c;工程ZeroTurnaround的副总裁。 好吧&#xff0c;我实际上不确定在他的短语中占什么位置&#xff0c;但是我已经听过他…

golang web php,GitHub - kai-xx/goWeb: golang web 接口实现 -- 类似PHP的laravel

goWebgorose ormdotweb框架实现接口 -- 类似PHP的laravel项目结构说明因为 gorose orm 和 dotweb 框架 都是基于独立的组件, 所以我们可以对项目的目录做出自由的规划.在这里, 我们便规划一个遵循一般的mvc结构的项目目录.为了项目的易维护性和高可用性, 我们尽量采取成熟的架构…

jboss项目导入idea_JBoss BPM Suite快速指南–将外部数据模型导入BPM项目

jboss项目导入idea您正在从事一个大项目&#xff0c;在企业中开发规则&#xff0c;事件和流程以满足关键业务需求。 部分要求指出&#xff0c;某个业务部门将提供您的数据模型供您利用。 不会在JBoss BPM Suite数据建模器中设计此数据模型&#xff0c;但是在从业务中心仪表板…

mysql协议重传,MySQL · 源码分析 · 网络通信模块浅析

MySQL 网络通信浅析MySQL的网络通信协议主要包含以下几个层次&#xff0c;从最上层的MySQL数据包协议层到最底层的socket传输&#xff1a;| THD| Protocol| NET| VIO| SOCKET本文主要扫一下相关的代码&#xff0c;以下分析基于MySQL5.7。创建会话在MySQL5.7中对会话协议层的代码…