PHP手册 – 变量和常量
变量
php中变量的定义,就是就在某一个单词前面加上“\(”。这是php的特色,**我想到的一个好处就是和常量做区分。另外,linux的shell编程中,\)有取值的意思。**。赋值方式也能体现php作为弱类型语言的特色。 传值赋值 + 引用赋值,而引用赋值,如$p = &$var
,加个地址符就可以了。
变量命名规则的正则表达式:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]
。
(1) PHP的变量名区分大小写;(2) 变量名必须以美元符号$开始;(3) 变量名开头可以以下划线开始;(4) 变量名不能以数字字符开头. 至于兼容十六进制字符集,恩web编程中能用到吗。
变量范围
下面代码中的$a在tmp.php中有效。
$a = 1;
include 'tmp.php';
至于include作用域的问题请参考:链接.
但在用户自定义函数中,局部函数范围被引进,任何用于函数内部的变量按缺省情况控制在局部函数范围内。如下面的脚本不会有输出,这点与C语言不同。
$a = 1; /* global scope */
function Test()
{
echo $a; /* reference to local scope variable */
}
Test();
说明了function,并不像c语言中只是一个代码块,而是类似于子对象的概念
在PHP中全局变量在函数中使用必须声明为global,如上面的代码应写成:
$a = 1;
function Test()
{
global $a;
echo $a;
}
Test();
也可以使用\(GLOBAL数组,\)GLOBAL是超全局变量,即在一个脚本中的全部作用域中都可用,而无需执行 global $variable
。
$a = 1;
function Test()
{
echo $GLOBAL['a'];
}
Test();
静态变量
变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
/* 多次执行 test(), $a 可以累加 */
function test()
{
static $a = 0;
echo $a;
$a++;
}
静态变量复制时不能使用表达式。如 static $int = 1+2;
是错误的。
可变变量
可变变量即一个变量的变量名可以动态设置和使用,通过多个美元符号实现。不过不适用于静态变量。
$a = 'hello';
$$a = 'world'; // 等价于 $hello = 'world'
// 下面两个都是输出 hello world
echo "$a ${$a}";
echo "$a $hello";
// 美元符号是两个以上
$world = 'end';
echo $$$a; // 输出 end
// 不适用于静态变量
$var = "ciao";
static $$var = 0; // parse error
这种功能和java中的类名,对象引用有点像。 如果是做底层编程,也许能用到。这是动态语言的特性。
也可使用花括号来给属性名清晰定界,可用于动态解析。
$a = 'a';
$b = 'b';
$ab = 'a+b';
// 因为 ${'ab'} 是合法的,所以会输出 'a+b'
echo ${$a . $b};
// 结合函数也是可以的
function func() {
return 'b';
}
echo ${$a. func()}; // 输出 'a+b'
// 还可以这样
$my_func = 'func';
echo $my_func(); // 输出 'b'
常量
常量是一个简单值的标识符(名字),在执行期间不改变。常量默认为大小写,通常以大写的标识符来表示。
- 常量是通过 define() 来声明,输出时使用其标识符(不用$)就行。
- 类中的常量要使用 const 来声明。
- 和超全局变量一样,常量的范围是全局的。
- 常量一旦定义就不能被重新定义或者取消定义
- 用 get_defined_constants() 可以获得所有已定义的常量列表。
- 常量在 heredoc 中无法解析。
常量的定义和使用
define('MAX_VALUE', 1);
echo MAX_VALUE; // 输出 1
echo constant('MAX_VALUE'); // 也可通过函数获取
class Constants
{
const MIN_VALUE = 0; // 用define声明会出错
public static function getMaxValue() {
return MAX_VALUE;
}
public static function getMinValue() {
return self::MIN_VALUE;
}
}
echo Constants::getMaxValue(); // MAX_VALUE 是全局变量
echo Constants::getMinValue(); // 输出 0
echo Constants::MIN_VALUE; // 也可以这样访问
echo MIN_VALUE; // 不能输出 0,类中定义的常量,不是全局变量
魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量,有八个魔术常量它们的值随着它们在代码中的位置改变而改变。例如 __LINE__
的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写。
八个魔术常量 __LINE__, __FILE__ , __DIR__ , __FUNCTION__ , __CLASS__ , __TRAIT__ , __METHOD__ , __NAMESPACE__
。
__FILE__
: 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含文件的路径和文件名。
__DIR__
: 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)
。目录中名不包括末尾的斜杠。
参考: http://www.powerxing.com/php-review-variable-and-constant/
http://cn2.php.net/manual/zh/language.constants.predefined.php
PHP手册 – 变量和常量的更多相关文章
- Java程序,基本数据类型、、数据类型转换、变量和常量、常用运算符
一.基本数据类型 整数类型:byte.short. int(常用).long(较常用) 定义某个变量 int a=10: 浮点类型(小数):float.double(常用) ...
- PHP中的变量与常量详解
几乎所有的编程语言都会涉及到变量和常量这两个概念,PHP也不例外.本节将介绍PHP语言中的变量和常量的应用方法. 一.什么是变量和常量 在程序执行的过程中,变量存储的值可以随时改变,而常量存储的值是不 ...
- Java 静态变量,常量和方法
static 关键字 例如:在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量.这时没有必要 在两个类中同时创建PI这个常量,因为这样系统会将这两个不在同一个类 ...
- [.net 面向对象编程基础] (5) 基础中的基础——变量和常量
[.net面向对象编程基础] (5) 基础中的基础——变量和常量 1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量. 通俗来说,就是定义一个不能改变值的量.既然不能变动值,那就必须 ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- php标记,变量,常量
php标记 语法:有4种书写格式 1.<?php ... ?> 强烈推荐使用. 如果当前 php的代码段,是整个文档的最后一段,可以省略结束标记?(建议省略) 每句语句都要以分号;结束. ...
- Swift学习笔记--变量与常量
1.Swift是一门强类型语言,不能为变量赋予其自身数据类型之外的值: 2.声明变量使用var关键字,声明常量使用let关键字: 3.声明变量或常量时没有对其指定类型且赋予了初值,则编译器会自动推断常 ...
- Oracle基础 PL-SQL编程基础(1) 变量和常量
一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言.具体来说,PL-SQL就是在普通的SQL语句的基础上增加了编程语言的特点,将数据操作和查询语句 ...
- 李洪强iOS开发Swift篇—02_变量和常量
李洪强iOS开发Swift篇—02_变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3. ...
随机推荐
- 解压版tomcat设置为系统服务
1.先关闭tomcat,在"开始 "→"运行 "中输入cmd 命令,进入MS-DOS界面 2.进入 到tomcat的bin目录下 (解压版tomcat存放目录, ...
- HDU 4712 Hamming Distance(随机算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小 ...
- height为100%的问题
问题描述 很多同学,对于设置div 的高度为100%时,有疑惑. 设置div 的高度为100%,意思是此 div 的高度 铺满父元素. 那么 怎么使 div 铺满浏览器屏幕? 代码 <!DOCT ...
- NPOI2.0
今天在使用NPOI2.0读取上传excel文件(excel2010)时,报了一个很奇怪的错误:无效的 URI: 未能分析主机名. 在网上查找了下找到的出错情况跟这个完全不着边际,没有办法只有自己去测试 ...
- CSS3 skew倾斜、rotate旋转动画
css3出现之前,我们实现一个对象的一组连续动画需要通过JavaScript或Jquery编写,脚本代码较为复杂: 若需要实现倾斜.旋转之类的动画难度将更高(我还没试过用JavaScript或Jque ...
- 再看JavaScript线程
继上篇讨论了一些关于JavaScript线程的知识,我们不妨回过头再看看,是不是JavaScript就不能多线程呢?看下面一段很简单的代码(演示用,没考虑兼容问题): 代码判断一: <div i ...
- word 2013 没有控件菜单怎么办,添加控件菜单
方法/步骤 打开word软件,然后点击菜单栏中最左边的“文件”菜单项,如下图红色方框所示 2 点击文件后,就打开word的设置对话框,然后在左边的设置列表中点击“自定义功能区”,打开自定义功能区设 ...
- Boost.Build 简明教程
Boost.Build 简明教程 目录1. 介绍2. 构建过程3. 基本任务4. 项目管理5. 最佳实践6. 规则参考7. 特征参考 介绍 编译器和平台无关编译系统Boost.Build是一个高级编译 ...
- 2016031601 - 刻录ubuntu的U盘启动盘
使用UltraISO来刻录ubuntu15.1的系统安装盘. 需要U盘1个,ubuntu15.1系统镜像文件. 具体步骤如下: a.安装UltraISO软件,具体软件安装. b.安装完成后进行系统刻录 ...
- 4071: [Apio2015]巴邻旁之桥
Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 10000 ...