$a=100;
$b="string"; //字符串要加引号
$c=true;

$d=99.99;
$key1=$a;
$key2=$b;
$a=$b=$c="value";
变量浸染范围:可以在一个页面的所有开启的php模式下利用,也包含了include和require引入的文件。
如果利用COOKIE和SESSION还可以在多个页面中运用。
我们可以借助unset()函数开释指定的变量, 利用isset()函数检讨变量是否设置, 利用empty()函数检讨变量是否为空;
empty() true "" 0 "0" null false array() $var (把稳:" ",empty()函数返回的是false)
isset() false usset()开释的变量 null
变量的命名:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff] \x7f-\xff 为中文
变量严格区分大小写,变量名的标识符一定不要以数字开头,中间不可以利用空格,不能用点分开;最好不要以php的关键字作为变量名称。
可变变量:
一个变量的变量名可以动态地设置和利用。
$hi="hello";
$$hi="world";
echo "$hi $hello"; //输出两个单词 hello world
echo "$hi ${$hi}"; //输出两个单词 hello world
可变变量的扩展:
$v1 = 10;
$v2 = "v1";
$v3 = "v2";
echo $$$v3 //输出10。理解:从右往左一层一层"取得值"
可变变量常用用于在写程序的时候不愿定须要用哪个变量去处理数据的环境。
$gif = "logo.gif";
$jpg = "logo.jpg";
$png = "logo.png";
假设用户可以填写一个表单,以决定其想要什么类型的logo图片,
$f1 = $_GET['fileType']; //用户选择所须要的图片类型的后缀,可以是"gif","jpg","png"
sendFile($$f1); //假设sendFile()可以发送文件,
变量的引用赋值
php中供应了其余一种办法给变量赋值:引用赋值,这意味着新的变量大略的引用(换言之,"成为其别名"或者"指向”)了原始变量。
改动新的变量将影响到原始变量,反之亦然。利用引用赋值,大略地将一个"&"符号加到将要赋值的变量前(源变量)。
$foo="Bob";
$bar=&$foo;
变量类型
四种标量类型:integer(整型) float(浮点型,也称double) boolean(布尔型) string(字符串)
两种复合类型:array(数组) object(工具)
两种分外类型:resourse(资源) NULL
integer(整型)
整型数据包括可选符号(+或-)表示正数或者负数、常用的十进制数(基数为10)、八进制数(基数为8,数字前加上0)、
十六进制(基数为16,数字前加上0x)
$int=1234; 十进制数
$int=-123; 一个负数
$int=0123; 八进制数(即是十进制的83),只有(只识别)0-7这8个数字
$int=0x1A 十六进制数(即是十进制的26),只有(只识别)0-9,A,B,C,D,E,F这16个数字
这些写法,只是"字面表达形式",但实际其值,在输出的时候,都是10进制的,如下
<?php
$n1 = 123; //10进制
$n2 = 0123; //8进制,只有(只识别)0-7这8个数字
$n3 = 0x123; //16进制,只有(只识别)0-9,A,B,C,D,E,F这16个数字
echo "<br />n1 = $n1"; //输出结果123
echo "<br />n2 = $n2"; //输出结果83
echo "<br />n3 = $n3"; //输出结果291
?>
整型数值有最大的利用范围。php不支持无符号整数, 以是不能像其他措辞那样将整数都变成正数,也就不能将最大值翻一倍。
32位PHP运行环境范围:-2147483648 ~ 2147483647
64位PHP运行环境范围:-9223372036854775808 ~ 9223372036854775807
给定的值或者运算值超过了integer范围, 会返回float类型;
<?php
$v4 = PHP_INT_MAX + 1; //PHP_INT_MAX是php中的最大的整数
echo "<br />最大的整数为:" . PHP_INT_MAX . ",类型为:" . gettype(PHP_INT_MAX);
echo "<br />v4为:" . $v4 . ",类型为:" . gettype($v4);
?>
输出结果:
最大的整数为:2147483647, 类型为:integer
v4为:2147483648, 类型为:double
实例:判断操作系统位数
function is_64bit() {
$int = "9223372036854775807";
$int = intval($int);
if ($int == 9223372036854775807) {
/ 64bit /
return true;
}
elseif ($int == 2147483647) {
/ 32bit /
return false;
}
else {
/ error /
return "error";
}
}
进制转换:
dec:10进制
bin:2进制
oct:8进制
hex:16进制
十进制转换二进制函数:decbin()
浮点数(float或double)
浮点数(也叫双精度数或实数)是包含小数部分的数,常日用来表示整数无法表示的数据。如金钱值、间隔值、速率值。
带小数点的数字都属于浮点类型数据;
数值的存储范围超过整型数据的都属于浮点类型数据;
带幂指数(科学计数法)的数值都属于浮点类型数据;
范围:1.7E-38 ~ 1.7E+38 之间,精确到小数点后15位。 E 不区分大小写
浮点数只是一种近似数的数值,如果利用浮点数表示8,该结果内部的表示实在便是7.9999999999......
如果确实要精确到更高的精度,该当利用任意精度数学函数或者gmp()函数
$float=1.234; 这是一个正常的浮点数,也可以利用正负的形式。
$float=1.2e3; 利用科学计数法表示的浮点数,相称于1.21000 即1200
$float=7E-10; 利用科学计数法表示的浮点数,相称于0.0000000007
$float=3.58E1; 相称于3.581
把稳:浮点数不应进行大小比较
boolean(布尔型):
true和false 不区分大小写
当转换为 boolean 时,以下值被认为是TRUE:
"FALSE"
' '
" "
-1和其他非零值(无论正负)一样,都被认为是TRUE
当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE
"" 空缺字符串
'' 空缺字符串
整型值 0(零)
浮点型值 0.0(零)
字符串 "0"
没有成员变量的数组
没有单元的工具(仅适用于 PHP 4)
分外类型 NULL(包括尚未设定的变量)
string
单引号 须要用反斜线转义的两个符号
' \'
\ \\ 可能须要
如果在单引号之前或字符串结尾须要涌现一个反斜线(\),须要用两个反斜线(\\)表示, 反斜线超过三个(包括\\\)以上,则程序出错
'C:\windows\system32\\'
双引号的结尾须要涌现一个反斜线(\),必须用两个反斜线(\\),而偶数(4,6,8)个反斜线,程序精确,如果是奇数(3,5,7)个反斜线,则程序缺点
"C:\windows\system32\\"
如果试图转义任何其它字符,反斜线本身也会被显示出来!
以是常日不须要转义反斜线本身。
'C:\.?'; 输出 \ 仍旧输出一个斜线
'C:\\.?'; 输出 \ 输出一个斜线
'C:\\\.?'; 输出 \\ 输出两个斜线
'C:\\\\.?' 输出 \\ 输出两个斜线
'C:\\\\\.?' 输出 \\\ 输出三个斜线
"C:\.?"; 输出 \ 仍旧输出一个斜线
"C:\\.?"; 输出 \ 输出一个斜线
"C:\\\.?"; 输出 \\ 输出两个斜线
"C:\\\\.?"; 输出 \\ 输出两个斜线
"C:\\\\\.?"; 输出 \\\ 输出三个斜线
结论:在单引号和双引号中: \仍原样输出\, \\输出一个\ \\\输出两个\\ \\\\仍输出两个\\ \\\\\输出三个\\\
双引号 须要用反斜线转义的符号
\n 换行(LF 或 ASCII 字符 0x0A(10))
\r 回车(CR 或 ASCII 字符 0x0D(13))
\t 水平制表符(HT 或 ASCII 字符 0x09(9))
\\ 反斜线
\$ 美元符号
\" 双引号
\[0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符
\x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符
如果试图转义任何其它字符,反斜线本身也会被显示出来!
双引号字符串最主要的一点是个中的变量名会被变量值替代。
当用双引号或者定界符指定字符串时,个中的变量会被解析。
<?php
echo "PHP从入门到精通\rASP从入门到精通\nJSP程序开拓范例宝典\tPHP函数参考大全"; //输出字符串
?>
运行结果为:PHP从入门到精通
ASP从入门到精通
JSP程序开拓范例宝典 PHP函数参考大全
function __autoload($className){
include "{$className}.class.php"; //必须利用双引号
}
【重点, 单引号和双引号有何不同:】
1 单引号不可以解析变量, 双引号可以阐明变量
2 在双引号里面输出变量, 变量后面接的是纯英文, 可以拿{}大括号, 将变量包起来进行定界(单引号里面不能利用定界符)
3 变量后面接的是中文也会把变量和中文拼在一起来阐明。除非后面有分外符号才会停滞阐明
4 双引号当中插入单引号, 单引号当中插入变量, 变量能够正常解析。单引号也会显示出来
5 单引号不解析转义(除了单引能解析\' 和\\), 双引号解析转义字符, 单引号或双引号单中要插入自己, 在前面加上一个反斜线
6 双引号和单引号可以互插
7 单引号效率更高,尽可能用单引号, 用点可以连接字符串和变量
把稳:echo 输出HTML代码和javascript, 可以用单引号和双引号;
输出javascript脚本方法:
ehco "<script>alert('变量值不能为空!');</script>";
echo "<h2>file_get_contents()输出数据"; //函数file_get_contents()原样输出
echo '<h2>file_get_contents()输出数据'; //与上等同
利用{}在字符串中显示变量
<?php
$temp = array("one" => 1, "two" => 2);
echo "The first element is {$temp["one"]}.";
echo "<br/>";
$username = "xuchenkai";
echo "${username} is two years old.";
?>
定界符
定界符的语法:该当在<<<之后供应一个标识符号,然后是包含的字符串,末了是同样的的标识符结束字符串。结束标识符必须从行的第一列开始,并且后面
除了分号之外不能包含任何字符,空格以及空缺制表符都不可以。同样,定界标记利用的标识符也必须遵照PHP中其他任何标签的命名规则,只能包含字母数字
下划线,而且必须以下画线或非数字字符开始。
<?php
$str= <<< EOT
这里是包含在定界符中的字符串,指出了定界符的一些利用时把稳的事变。很主要的一点必须指出,结束标识符EOT所在的行不能包含任何其他字符。
这尤其意味着该标识符不能被缩进,而且在结束标记的分号之前和之后都不能有任何空格或制表符。
同样主要的是,要意识到在结束标识符之前的第一个字符必须是你的操纵系统中定义的换行符。如果毁坏了这条规则使得结束标识符不"干净",则它
不会被视为结束标识符,php将连续探求下去。如果在这种情形找不到得当的结束标识符,将会导致一个在脚本末了一行涌现的语法缺点。
EOT;
echo $str;
?>
定界符除了不能初使化类成员以外,表现的就和双引号字符串一样,只是没有双引号。这意味着在定界符文本中不须要转义引号,不过仍旧可以用以上列出来的
在双引号可以利用的转义符号,而且定界符中的变量也会被解析。
把稳:结束标识符所在的行的分号后面为了保持"干净",可以按"ENTER"回车键或方向键定位到下方连续输入代码,但不能利用"space"空格键;
同样,开始定界符后面(EOT)不能有空格,必须按"ENTER"回车键或方向键定位到下方连续输入文本,而"<<<"前后可以保留空格
//利用界定符输出变量
$name = "MyName";
echo <<<EOT
My name is $name.I am printing a "string"\n.
\tNow,I am printing some new line \n\r.
\tThis should print a capital 'A'
EOT;
输出结果:My name is MyName.I am printing a "string" . Now,I am printing some new line . This should print a capital 'A'
总结:
定界符内: 变量会解析
可以用转义字符(除单引号和双引号)
在定界符文本中不须要转义引号(单引号和双引号)
这种办法在往后开拓中的Ajax技能中, 常常会利用定界符来组装XML数据!
转义字符 序列 含义
\n 换行(LF 或 ASCII 字符 0x0A(10))
\r 回车(CR 或 ASCII 字符 0x0D(13))
\t 水平制表符(HT 或 ASCII 字符 0x09(9))
\\ 反斜线
\$ 美元符号
\" 双引号
\[0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符
\x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符
换行符
换行符: unix系列用\n, windows系列用\r\n, mac用\r
PHP中可以用PHP_EOL来替代, 以提高代码的源代码级可移植性
如:
<?php
echo "one", PHP_EOL, "two", PHP_EOL, "three"; //显示结果: one two three
?>
查看源代码:
one
two
three
把稳: 双引号和定界符内的转义字符(非打印字符)只能在PHP解析后, 在浏览器中查看代码才能看到效果。
字符串长度与字符的访问
在php中, 字符串是一种非常分外的数据构造, 其是有长度的, 我们可以通过其索引下标对指定字符进行获取与访问!
$str = "23456789";
$v1 = $str[1];
$v2 = $str[3];
$v3 = $str[0];
$v4 = $str[6];
$verify = $v1.$v2.$v3.$v4;
echo '验证码: '.$verify;
但是要特殊把稳:字符串的索引下标只能读取英文或数字字符串, 而不能读取中文, 由于一个中笔墨符占用的并不是一个字节长度。
如果采取UTF-8编码格式, 其一个中笔墨符要占用3个字节长度。以是我们不能通过索引下标对其进行读取, 否则一定会产生乱码。
数组(Array)和工具(Object)
key => value
key可以是integer或者string,value可以是任何值。
资源(Resource)和NULL类型
利用资源类型的变量保存有打开文件(stream)、数据库连接(mysql link)、图形画布区域(gd)、xml等的分外句柄。
NULL类型
分外的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值便是 NULL。
不才列情形下一个变量被认为是 NULL:
被赋值为 NULL。
尚未被赋值。
被 unset()。
伪类型先容:
mixed
mixed 解释一个参数可以接管多种不同的(但并不必须是所有的)类型。
number
number 解释一个参数可以是 integer 或者 float。
callback
Callback 函数不仅可以是一个大略的函数,它还可以是一个工具的方法,包括静态类的方法。
一个 PHP 函数用函数名字符串来通报。可以通报任何内置的或者用户自定义的函数,
除了 array(),echo(),empty(),eval(),exit(),isset(),list(),print() 和 unset()。
类型转换:
许可的逼迫转换有:
(int), (integer) - 转换成整型
(bool), (boolean) - 转换成布尔型
(float), (double), (real) - 转换成浮点型
(string) - 转换成字符串
(array) - 转换成数组
(object) - 转换成工具
详细转换函数intval() floatval() strval()
上述类型转换并没有改变这些被转换变量本身的类型,而是通过转换将得到的新类型的数据赋值给新的变量。
如果须要将变量本身的类型改变成其他类型,可以利用settype()函数来设置变量的类型。
$foo="5bar";
settype($foo,"integer");
变量类型的测试函数
is_bool() 判断是否是布尔型
is_int() is_integer() is_long() 判断是否是整型
is_float() is_double() is_real() 判断是否是浮点数
is_string() 判断是否是字符串
is_array() 判断是否是数组
is_object() 判断是否是工具
is_resource() 判断是否是资源类型
is_null() 判断是否是为空
is_scalar() 判断是否是标量,也便是一个整数、浮点数、布尔型或字符串
is_numeric() 判断是否是任何类型的数字或数字字符串
把稳: "10.34" 返回值为true "10.34abc" 返回值为false
is_callable() 判断是否是有效的函数名
常量
常量的定义和利用
boolean define(string name,mixed value [,bool case_insensitive]);
insensitive 不敏感;
第三个参数默认值为false,表示大小写敏感(区分大小写);
define("CONSTANT", "Hello world.");
echo CONSTANT;
把稳:
常量前面没有美元符号($);
合法的常量名以字母或下划线开始, 后面随着任何字母, 数字或下划线;
常量可以用 define() 函数定义,也可以用const定义;
常量可以不用理会变量范围的规则而在任何地方定义和访问;
常量一旦定义就不能被重新定义或者取消定义;
常量的值只能是标量; PHP7.0以上版本开始支持数组
const CONSTANT = "Hello world";
echo CONSTANT;
和利用define()来定义常量相反的是, 利用const关键字定义常量必须处于最顶真个浸染区域;
由于用此方法是在编译时定义的, 这就意味着不能在函数内, 循环内以及if语句之内用const来定义常量。
分外常量只能利用define定义
define("-_-", "smile");
分外常量必须利用constant输出
echo constant("-_-");
把稳:define内置函数定义的常量其命名规则是比较疏松的, 可以任意定义
const定义的常量其命名规则比较严格的, 如const -_- = "smile" 是不可行的;
把稳:在一些系统函数中有些参数是作为常量形式存在的, 但是常量的值为整数, 因此参数也可以写成整数形式;
以extract()函数利用方法为例:
int extract ( array $var_array [, int $extract_type [, string $prefix ]] )
检讨每个键名看是否可以作为一个合法的变量名,同时也检讨和符号表中已有的变量名的冲突。
第二个参数可能的值:
EXTR_OVERWRITE - 默认。如果有冲突, 则覆盖已有的变量。
EXTR_SKIP - 如果有冲突, 不覆盖已有的变量。
EXTR_PREFIX_SAME - 如果有冲突, 在变量名前加上前缀 prefix。
EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix。
EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix。
EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时, 覆盖它们的值。其它的都不处理。
EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时, 建立附加了前缀的变量名, 其它的都不处理。
EXTR_REFS - 将变量作为引用提取。导入的变量仍旧引用了数组参数的值。
extract:提取 prefix 前缀名 same 相同 overwrite 重写 invalid 无效的
<?php
/ 假定 $var_array 是 wddx_deserialize 返回的数组/
$size = "large";
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n";
echo EXTR_OVERWRITE; //0
echo EXTR_PREFIX_SAME; //2
?>
输出结果:
blue, large, sphere, medium
compact() 函数
<?php
$firstname = "Bill";
$lastname = "Gates";
$age = "60";
$result = compact("firstname", "lastname", "age");
print_r($result);
?>
输出结果:
Array ( [firstname] => Bill [lastname] => Gates [age] => 60 )
常量和变量的差异:
定义形式不同:
利用形式不同:常量无需$符号
可变程度不同:常量的值不可以改变, 常量也不可以销毁
浸染范围不同:常量具有超全局浸染域(函数内外都可以直策应用)
可用类型不同:常量只能存储标量类型(int, float, string, bool), PHP7.0以上版本开始支持数组
常量在实际开拓中, 一样平常是用于防止造孽入侵。
内置函数defined('常量名称')
紧张功能:用于判断指定的常量是否定义
define('TOKEN', 'itcast');
if(!defined('TOKEN'){
echo '造孽要求';
exit;
}else{
echo '正常要求';
}
把稳:常量浸染范围包括include文件下的定义函数内部;