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 相关文章推荐
php 8小时时间差的解决方法小结
Dec 22 PHP
php自动加载的两种实现方法
Jun 21 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
memcache命令启动参数中文解释
Jan 13 PHP
Symfony2学习笔记之插件格式分析
Mar 17 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
php探针使用原理和技巧讲解
Sep 17 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 PHP
PHP实现常用排序算法的方法
Feb 05 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页面局部刷新功能的实现小结
2013/06/21 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
Jquery的Ajax技术使用方法
2019/01/21 jQuery
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
护士自我鉴定范文
2013/10/06 职场文书
医学生自我评价
2014/01/27 职场文书
实习老师离校感言
2014/02/03 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
在Python中如何使用yield
2021/06/07 Python