PHP学习之PHP变量


Posted in PHP onOctober 09, 2006

PHP变量

PHP3支持下面类型的变量:
(一)、内部变量


主要有整数(interger),浮点数(float-point numbers),字符串(string),数组(array),对象(object)。
1 初始化变量


要在PHP中初始化变量, 你只要简单的给它赋值即可。对于大多数类型,这是最直接的。对于数组和对象,可以使用其它方法。
2 初始化数组


数组可以使用这两种方法之一来赋值: 使用一系列连续数值,或使用array()函数构造 (见 Array functions 部分)。


要将连续的数值加进数组,你只需将要赋值赋给不带下标的数组变量。该值会作为数组的最后元素加进数组中。


例:

 $names[] = "Jill"; // $names[0] = "Jill"

 $names[] = "Jack"; // $names[1] = "Jack" 与c、perl相似,
数组下标也是从0开始。
3 初始化对象
要初始化一个对象,需用new语句建立该类型的变量。

 
class foo {


function do_foo() {


echo "Doing foo."; }?

}

  $bar = new foo;

  $bar->do_foo();
4 变量作用域


变量的作用域就是它的有效范围。对于大多数PHP的变量只有一个作用域。在用户自定义函数里采用局部变量作用域。
函数内使用的变量被缺省设置为局部变量。例如:

 $a=1; /* global scope */

 
Function Test() {

 echo $a; /* reference to local scope variable */

 }

 
Test(); 这段程序不会输出任何的东西,因为echo语句要输出局部变量 $a ,而函数内的 $a 从未被赋过值。
你可能注意到这和C语言有点小小的区别,C中全局变量可以直接在函数内引用,除非它被一个局部变量所覆盖。
而这使得人们可能不注意修改了全局变量的值。在PHP中要在函数内部使用全局变量必须显式的说明。
例如:

 $a=1;

 $b=2;

 Function Sum() {

 global $a,$b;


 $b = $a + $b;

}

 Sum();

 echo $b; 上面程序将输出"3"。
通过在函数内部声明$a和$b是全局变量,所要变量都参考全局。一个函数可以操纵的全局变量的数量没有限制。


作用域的另外一个值得注意的地方是static 变量。
一个 static变量存在于局部函数中,但当程序离开这个函数时它的值不会丢失。
考虑下面的例子:

 Function Test() {

 $a=0;

 echo $a;

 $a++;

 }
这个函数是没用的,因为每次调用时它都先把$a赋为 0 然后打出"0"。 对$a++的自加没有任何效果因为函数调用结束后变量
$a 就被释放了。要使记数程序有效记数而不丢掉当前的记数结果,$a 要声名为static变量:

Function Test() {

static $a=0;

echo $a;

$a++;

} 现在,每次调用Test()函数它都会打出$a的值并把增加它的值。 当使用递归函数时静态变量是必不可少的。
递归函数就是调用自己的函数。写递归函数时一定要十分小心,
因为它的循环次数不确定。你必须确保有足够的条件结束递归过程。下面是一个简单的递归函数记数到10:

Function Test() {

 static $count=0;

 $count++;

 
echo $count;

 if($count < 10) {

 Test();

 }


(二) 动态变量

有时使用可变的变量名比较方便。就是说,一个能够被动态赋值和使用的变量名。
一个普通变量的赋值语句如:

$a = "hello";

一个动态变量引用该变量的值作为一个新变量的名字。
在上面例中, hello,可以通过双$用做变量名。
例:

$$a = "world"; 至此,两个变量被定义并存贮在PHP符号树中: $a 的内容是"hello",$hello 的内容是 "world"。
因此,语句: echo "$a ${$a}"; 的显示结果完全等同于: echo "$a $hello"; (三)PHP外部变量 1、HTML表单(GET和POST)


当一个表单提交给PHP3 script时,PHP会自动得到表单中的变量。例如:

Name:  


当按下”submit”后,PHP3会自动产生变量:$name,其中包含了用户输入的所有内容。 2、IMAGE SUBMIT 变量名


当提交一个表单时,可以通过下面标记用一副图代替标准的提交按钮:

  当用户点击该图时,
两个附加变量sub_x和sub_y就会伴随表单一起送到server上。其中包含了用户在图上点击处的坐标。
有经验的人可能注意到浏览器实际送出的名字包含一个句号而不是下划线,但PHP自动将句号转换成了下划线。
3、HTTP Cookies


PHP支持HTTP cookies。Cookies在客户端浏览器存储数据,以此和用户保持联络或验证用户身份。
你可以使用setcookie() 函数来设置cookies。 Cookies是HTTP请求头的一部分,所以必须在任何输出数据返回给用户浏览器前
调用SetCookie()函数。它类似于 Header() 函数的限制。任何用户端返回的cookies都将被自动转换为标准的PHP变量,
就象GET和POST方法的数据。


如果要在一个 cookie中设置多个值,要给这个cookie的名字加上 [] ,
例如:

SetCookie("MyCookie[]","Testing", time()+3600);


注意:新的cookie将覆盖掉你的浏览器中已有的同名cookie,除非它们具有不同的路径或域。
4、环境变量


PHP自动将环境变量转换为普通的变量。


echo $HOME; /* Shows the HOME environment variable, if set. */


尽管来自GET,POST 及 Cookie结构的信息也会被自动转化为PHP的变量, 但最好明确的从环境变量中读取它们以确保获得正确的值。
为此可使用 getenv() 函数。也可以通过 putenv() 函数设置变量。
变量类型转换


PHP中不需要(也不支持)在变量定义时做显式的类型声明;一个变量的类型取决于它的值的类型。
也就是说,如果你给变量var 赋了一个字符串值,var 就成为字符串变量。如果你又赋了一个整型值给var, 它就变成了一个整型变量。

一个PHP自动类型转换的例子是加法操作符 '+'。如果任何一个操作数是double型,则所有的操作数按 double类型来计算,
结果也是double型的。否则,所有的操作数按integer类型来计算, 结果也是integer型的。注意:操作数本身的类型不发生变化;
类型变换仅在计算时做

$foo = "0"; // $foo is a string (ASCII 48)

$foo++; // $foo is the string "1" (ASCII 49)

$foo += 1; // $foo is now an integer (2)

$foo = $foo + 1.3; // $foo is now a double (3.3)


$foo = 5 + "10 Little Piggies"; // $foo is a double (15)

$foo = 5 + "10 Small Pigs"; // $foo is an integer (15)
要改变变量的类型,也可用settype() 函数。
1、强制类型转换


PHP中的强制类型转换和C中一样: 在需要进行类型强制转换的变量前的括号中写出想要的类型名。

 
$foo = 10; // $foo is an integer

 $bar = (double) $foo; // $bar is a double

 
允许的强制转换是:

(int), (integer) - cast to integer

(real), (double), (float) - cast to double


(string) - cast to string

(array) - cast to array  

(object) - cast to object
注意:括号中可以含有tab或空格,下面的函数将被计算:

$foo = (int) $bar;

$foo = ( int ) $bar;
2、字符串转换


当字符串作为数值类型计算时,结果的值和类型按以下方式决定。


如果字符串中包含任何'.', 'e',及'E'字符,则被作为double类型计算。否则,就作为integer类型计算。


该值从字符串最开始算起。如果字符串是合法的数字,则使用该值,否则值为 0 。
合法的数字是一个符号位(可选),后跟一位或几位数字(也可含有一个十进制的小数点), 后跟一位可选的指数。
指数是一个 'e' 或 'E'后跟一个或几个数字。

$foo = 1 + "10.5"; // $foo is a double (11.5)


$foo = 1 + "-1.3e3"; // $foo is a double (-1299)

$foo = 1 + "bob-1.3e3"; // $foo is a double (1)


$foo = 1 + "bob3"; // $foo is an integer (1)

$foo = 1 + "10 Small Pigs"; // $foo is an integer (11)


$foo = 1 + "10 Little Piggies"; // $foo is a double (11); the string contains 'e' 

PHP 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
ezSQL PHP数据库操作类库
May 16 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
推荐25款php中非常有用的类库
Sep 29 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
php的控制语句
Oct 09 #PHP
PHP4 与 MySQL 交互使用
Oct 09 #PHP
Access数据库导入Mysql的方法之一
Oct 09 #PHP
做一个有下拉功能的留言版
Oct 09 #PHP
留言板翻页的实现详解
Oct 09 #PHP
聊天室php&amp;mysql(二)
Oct 09 #PHP
聊天室php&amp;mysql(一)
Oct 09 #PHP
You might like
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
js验证表单第二部分
2006/11/25 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
国贸专业的职业规划范文
2014/01/23 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
Log4j.properties配置及其使用
2021/08/02 Java/Android
使用refresh_token实现无感刷新页面
2022/04/26 Javascript