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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
PHP 和 COM
Oct 09 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
9条PHP编程小知识及易犯的小错误
Jan 22 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
php图片上传类 附调用方法
May 15 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
php cookie 详解使用实例
Nov 03 PHP
php连接sftp的作用以及实例代码
Sep 23 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 PHP
PHP isset empty函数相关面试题及解析
Dec 11 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
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
Javascript 继承机制的实现
2009/08/12 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
微信小程序 动态传参实例详解
2017/04/27 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Python 的AES加密与解密实现
2019/07/09 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
Python接口自动化测试的实现
2020/08/28 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
2014年社区学雷锋活动总结
2014/03/09 职场文书
谢师宴家长致辞
2015/07/27 职场文书
人事任命书范本
2015/09/21 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
Redis批量生成数据的实现
2022/06/05 Redis
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript