php变量
1.变量的定义:a.变量必须以$符号开始,注意这里$符号并不属于变量的名称,即$+变量名称
b.变量名称必须以字母或者下划线开始。
c.变量中只能含有字母数字以及下划线;
d.变量名区分大小写。
2.变量的创建:a.注意在php中,变量类型是不需要声明的,即不存在c或c++中的int a; string str;之类的
$x=5;//php会默认为整形
$y=0.5;//默认为浮点型
$str="hello";//默认为字符串型
b.当然我们也可以对变量进行一些运算,对于同种类型的话,结果自然便是同种类型,但是如果不同类型?
比如:<?php $x=3.5; $y=2; $z=$x+$y; echo $z; ?>那么会输出5.5,即整形与浮点型运算,会得到浮点型。
<?php $x="5.5"; $y=2; $z=$x+$y; echo $z; ?> 你会惊奇地发现还是7.5
<?php $x="abc"; $y=2; $z=$x+$y; echo $z; ?> 但这种情况的话,输出的结果为2,即这里会将$x变量默认为0
c.变量类型的转换:常用的类型有整型:int 浮点型: double float real 字符串:string 布尔:bool boolean 数组:array 对象:object
转换方法:(1)用括号括起类型:如<?php $x=2.5; $y=(int)$x;?>那么会输出2;
(2)使用转换函数:intval(),float(),strval();如:$str="145.465abc"; $x=intval($str); $y=floatval($str); 那么分别会得到145和145.465;
(3)使用settype()函数,如: $x=10.0;$y=settype($x,"int"); $z=settype($x,"bool"); 那么分别会得到10和true值。
3.全局变量:所有函数外中定义的变量,除了函数外,可以被任何脚本中的任何部分访问,但对于在函数内要访问全局变量,需要使用global关键字。我们先看个例子:
<?php
$x=10;
$y=5;
function test(){
$z=3;
global $x;
echo "<p>测试函数内变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
}
test();
echo "<p>测试函数外变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
?>
然后我们运行下,结果如下:
我们会发现存在乱码问题,并且存在两个notice,表示两个变量为定义。
我们先来解决乱码问题,其实乱码的根本原因是我们输出了中文,而我们又没有去定义字符编码。
php中文乱码问题解决办法一:
<meta charset="utf-8">//定义字符编码
<?php 上面的php文件内容 ?>
php中文乱码问题解决办法二:
<?php header("Content-Type:text/html;charset=utf8");//在php文件内部定义字符编码
?>
按照上述方法解决乱码问题后,我们可以得到以下结果:
我们会发现在test函数内的$y并没有输出,原因很简单,$y是个全局变量,而在函数内,没有用global定义,$z没有输出是因为$z是在函数内声明的,属于局部变量。
我们再看个例子:
<?php
header("Content-Type:text/html;charset=utf8");
$x=10;
$y=5;
function test(){
$z=3;
$x=5;
global $y;
echo "<p>测试函数内变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
}
test();
$x=1;
$z=5;
echo "<p>测试函数外变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
?>
结果如下:
我们在全局变量定义了$x,然后在函数内同样也声明了个$x,我们发现其实这样是兼容的,同理,$z也是如此。而且全局变量$x在脚本中也是可以重新被赋值的,但要注意一点的就是如果全局变量在函数内定义是不能赋值的,如:global $x=1;这样是会报错的。
4.global关键字:上面我们已经谈过,在函数内使用全局变量的话,要用global,实际上php把所有的全局变量都存储在一个名为$GLOBALS[index]的数组中,index为变量的名称,所以如果我们要在函数内访问全局变量的话,也可以用$GLOBALS数组,如下:
<?php
header("Content-Type:text/html;charset=utf8");
$x=10;
$y=5;
function test(){
$z=$GLOBALS['x']+$GLOBALS['y'];
echo "<p>测试函数内变量</p>";
echo "变量z为: $z </br>";
}
test();
?>
结果如下:
5.static作用域:当一个函数完成时,通常其函数内的变量都会被删除,而如果变量前加了static关键字的话,我们每次调用函数时,该变量会保存为前一次函数被调用时的值。
<?php
header("Content-Type:text/html;charset=utf8");
function test(){
static $x=0;
$x++;
echo "$x<br>";
}
test();
test();
test();
?>
结果为:1 2 3,原因很简单,因为$x被static声明后,保留的是上一次函数调用的值,而不会重新被赋值为0;