php静态数组变量初始化,为什么数组初始化时,赋值不能是常量?

刚刚发现的一个很奇怪的现象

下面这个数组我设置为类的属性,其中SYSTEM_LIB为我定义的常量

final class Application { public static $_lib=array( 'route' => SYSTEM_LIB.'/lib_route.php', 'mysql' => SYSTEM_LIB.'/lib_mysql.php', );}

但最终运行时报错为Parse error: syntax error, unexpected

而我将该数组放入方法中时,就能正常创建

final class Application { public static $_lib=array(); public static function run(){ self::$_lib =array( 'route' => SYSTEM_LIB.'/lib_route.php', 'mysql' => SYSTEM_LIB.'/lib_mysql.php', ); }}

我分析是因为当数组被设置为类属性时,数组内的值必须在引号内,数组不认识常量

回复讨论(解决方案)

类定义时,属性不能赋予不确定的值

用户常量是在程序运行时定义的

而语法检查是在程序运行前进行的

而系统常量就是确定的值class T { var $os = PHP_OS;}$p = new T;echo $p->os;

Like any other PHP static variable, static properties may only be initialized using a literal or constant before PHP 5.6; expressions are not allowed.

与PHP的静态变量一样,静态属性只能使用一个字面值或常量来初始化(PHP5.6之前的版本);表达式是不允许的。

In PHP 5.6 and later, the same rules apply as const expressions: some limited expressions are possible, provided they can be evaluated at compile time.

PHP5.6以上版本则与常量表达式的规则一样,可以使用一些特定的表达式,只要其能在编译时被计算

所以你的第一种写法在PHP5.6以上版本是可以正常运行的。

印象中static静态变量不能用其他变量或函数作为值初始化

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

相关文章

php比例算法,图片比例转换算法

项目要求将图片上传的任意图片按固定比例进行转换,没办法自己就写了一个,代码如下:public function cropImage($imagePath, $savePath, $scale){$imgHandler $this->model(Picture_Model_Image);$imgHandler->setSrcImg($imagePath);$…

oracle安装过程掉电,Oracle数据库掉电后ORA-01172磁盘坏块解决方法

由于服务器突然掉电,重启机器后发现数据库无法启动。数据库版本 Oracle10201,OS REDHAT 5.4数据库无归档,无备份 [oraclehuna由于服务器突然掉电,重启机器后发现数据库无法启动。数据库版本 Oracle10201,,O…

php sqlite id自增,Android sqlite设置主键自增长的方法教程

今天在APP中增加一个添加项目的功能,项目的主键为整数,要让它自增长。既然要自增长,那么在代码里面就不用给id字段赋值。但是调试的时候发现不行,提示主键重复,观察了输出,不赋值的话,id默认为0…

oracle flashback 深入研究,oracle 之flashback 深入研究。

oracle 之flashback 深入研究。今天是2013-08-24,开始进行oracle flashback 内部原理研究,记录一下笔记。SQL> startupORACLE instance started.Total System Global Area 405020672 bytesFixed Size 2213816 bytesVariable Size …

linux删除了mount目录,Linux记录-分区(df/fdisk/mount/umount/fuser)

1.查看磁盘挂载(df -TH)2.卸载umount /dev/vdb13.查杀用户进程(fuser -m -v -i -k /dev/vdb1)4.再次卸载umount /dev/vdb1,并查看挂载信息df -TH5.删除分区(fdisk /dev/vdb m d 1 d w)6.查看分区(fdisk -l,没有Start-End磁盘分区表示可用)7.添加分区(fdi…

linux中pak命令,如何在Linux系统中安装Flatpak

选择你的Linux发行版快速安装Flatpak及使用Flatpak。支持Ubuntu、Fedora、Red Hat Enterprise Linux、Deepin、Endless OS、Linux Mint、openSUSE、Arch、Debian、CentOS、Gentoo、Solus、Alpine、Mageia、Pop!_OS、elementary OS、Raspbian。以下为你逐一介绍如何在这些Linux版…

linux服务器组件有哪些,推荐几个linux服务器面板

天兴工作室自zblog从asp换到了php就一直在玩php的程序,php的程序肯定是搭配linux系统更方便一些。现在的云服务器也都不贵几百块钱一年,就算是个人也玩得起。当然linux服务器和windows服务器的用法完全是两样:windows系统就跟本地电脑一样操作…

ubuntu 改linux密码忘了怎么办,Ubuntu 14.04忘记root密码的解决方法

电脑20多天没用,忘记Ubuntu 14.04 root密码了,下面是在网上找到的一个解决办法,其它的和这个也大概相同。因为其中有些缺漏,没能给我解决问题。通过分析最终问题还是解决了,现解决方案的关键点记录一下。希望能方便到其…

drcom linux怎么运行,Drcom_linux

64位ubuntu设置32位环境sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0//目前自己用到sudo apt-get install libsm6:i386sudo apt-get install libxi6:i386sudo apt-get install libxrender1:i386sudo apt-get install libxrandr2:i386sudo apt-get install libxcur…

linux设置历史命令保留数目限制,linux下修改history命令保存条数

在linux系统下、history命令会保存多少条命令呢?曾在一本书上说,如果注销系统,那么会将所有的历史命令都定入到~/.bash_history,但只保留1000条命令(这个是由默认的shell变量所设置了的)但是为什么我们执行history命令后会出现大于1000条的历…

虚拟机linux如何扩大内存吗,如何扩大Vmware虚拟机中Ubuntu系统磁盘空间的方法

在虚拟机里安装系统,有时即会遇到初始分配的磁盘空间不够用的情况。如果是windows系统,则直接在虚拟机选项里扩容即可,但linux系统则没有这么简单。下面是整理的vmware下ubuntu系统磁盘扩容的方法与步骤,仅供参考。提示&#xff1…

linux lvm lv扩充--虚拟机,虚拟机新增磁盘后lvm下的lv扩容

系统环境:CentOS 6.5_X64一、识别新增磁盘:ls /sys/class/fc_host (会看到host1,host2...hostN,对每个host进行如下操作)echo "- - -" > /sys/class/scsi_host/host1/scan (中间是有空格的)!!echo "- - -" > /sys/class/scsi_…

linux7yum安装mysql,CentOS7 使用yum安装mysql

1、安装libaio,yum install libaio2、卸载mariadbyum remove mariadb-libs-5.5.41-2.el7_0.x86_643、下载mysql yumrepositorywget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm4、添加Mysql yumrepository到系统列表的中,执行…

linux读整个文件内容,Linux查看整个文件

Linux查看整个文件使用cat命令显示文本文件的内容使用cat命令可以显示文本文件的内容。cat后面可以不加任何选项,直接跟文件名功能说明:查看某个文件的内容###cat命令语法cat [参数] [文件]选项与参数:-A:显示所有的内容&#xff…

linux终端怎么设置monaco,Monaco Editor 使用指南

为什么要写这篇文章?最近开发了一个简单的在线代码编辑器,基于 Monaco Editor 实现,没有了解过 Monaco 的人可能不知道,我们常用的 VS Code 也是基于它实现的~回到正题,Monaco Editor 有一份完整的官方文档&#xff0c…

linux c实现线程超时退出,c – 如何在另一个线程的超时内唤醒select()

根据“男人选择”信息:"On success, select() and pselect() return the number of file descrip‐tors contained in the three returned descriptor sets which may be zeroif the timeout expires before anything interesting happens. On error,-1 is ret…

linux中var的作用,linux中var是什么意思

在搭建Kubernetes集群过程中,安装了kube-dns插件后,运行一个ubuntu容器,发现容器内无法解析集群外域名,一开始可以解析集群内域名,一段时间后也无法解析集群内域名。$ nslookup kubernetes.default Server: 10.99.0.2 …

linux redis 主从配置,redis集群(主从配置)

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操 作,而且这些操作都是…

telnet入侵linux,教你入侵RedHatLinux

此文的目的不在于教人入侵,而是为了提高自身的技术和加强网络管理员的安全防范意识。仅此而已!粗心大意的网络管理员应该明白:由于你们一个小小的操作失误可能会导致整个网络全面沦陷!本文主要是围绕LPD:网络打印服务的攻击而进行的。首先确定目标&#…

linux telnet.class,Linux telnet简单实用方法

语法telnet [-a][-e escape char][-f log file][-l user][-t term][host [port]]参数-a 企图自动登录。除了用当前已登陆的用户名以外,与 -l 选项相同。-e 跳过字符来进入 telnet 客户提示。-f 客户端登录的文件名-l 指定远程系统上登录用的用户名称。要求远程系统支…