php基础学习已经差不多了,但是为检验自己的学习掌握情况,把php基础知识回顾复习了一下
第一个PHP程序
<?php
echo "Hello World!";
?>
1 注释
1.1多行
/*
xxxx
*/
1.2单行
//xxxxx
2. 赋值
$a = 'test';
2.1 检查变量是否已声明
isset($a)
2.2 释放变量
unset($a);
2.3 静态变量
static $a;
静态变量可在一个函数几次调用中保持数值,而不会被系统释放,但只能在声明它的函数集中访问到,只能在第 一次声明时初始化。
3. 基本类型
3.1 数字类型
3.1.1整数(integer,关键字int)
.整数可用8进制 10进制 16进制 表示
$a=123; //10进制
$b=0123; //8进制
$c=0x123; //16进制
. 由于操作系统不同整数精度变化很大,但32位是最常见的
3.1.2浮点(float,关键字float,64位浮点数,精度14位)
.PHP 中float和double是等同的
.使用浮点数切记:他们只是近似值
如:2.5在内部常被表示为2.499999999
又如:
if(0.7+0.1>=0.8){
echo 'a';
}else{
echo 'b';
}
返回值为b,这取决于浮点数的确切实现方式,推荐做法是避免使用浮点值做比 较
3.2 字符串
.用单引号或双引号包围
如:echo "Hello"; echo 'Hello';
.双引号中的变量 会被解释,单引号中的则不会
如:var $name = 'jano';
echo "my name is $name.";//显示 my name is jano
echo 'my name is $name'; //显示 my name is $name
.双引 号中的变量可用{}包围来区分变量和后面的字母
如:var $n = "my name is {$name}Yu";//如果没有{}就无法区分变量和字符
.heredoc
$a = <<< HTM
skjdfjsd
lksdfjsdlf
HTML; //后面的表示必须顶在最前面
.获取字符串中的某个字符
$a = 'Hello';
echo $a{1}; // 显示e
echo $a[1]; // 显示e
推荐使用第一种写法可以和数组区分开
3.3 布尔值
true false
4.常用函数
. nl2br 吧字符串中的换行符转化成<br />
如:echo nl2br($a);
.var_dump
显示变 量类型和值,如:var_dump($a);
.print_r
var_dump加强版,打印对象类型和内容,数组则打出所有元素,类对象 则打印所有成员
如:$a = array(1,2,3,4,5);
print_r($a);
5.数组
数组用array方 法声明
例:
$a = array('a','b','c');
$a = array('a','b',array(1,2,3));
.默认从索引0开始赋值
如:$a[]='a'; //$a[0]='a';
$a[]='b'; //$a[1]='b';
.使用字符串值做索引
如:
$a = array('car'=>'Ferrari','Number'=>21,'City'=>'CQ');
echo $a['car'];
.遍历并更改数组元素值
foreach($array as $key=>&$value){// &$value
//...
}
6.特殊类型和值
.NULL 区分大小写,表示无值,从没赋值,用unset清除
. 资源
7.强制类型转换
(int)$a
(float)$a
(string)$a
(bool)$a
(array)$a
(object)$a
. 特殊的
(int)"0123";//返回123,没有把8进制0123转换为10进制数字
(int)"123 mu tou ren";//返回123
(int)"mu tou ren 123";//返回0,因为转换只从第一个字符开始读,发现非数字立即停止
. 转换为布尔值
非空非零则为true(包括正数和负数),0为false
包含0个元素的数组为false
NULL为false
转 换为整数
.浮点转换为整型
小数点后的数字舍弃,如果超过证书有效位,结果可能是0或者最小负数
.布尔转换为整型
true 为1
false为0
.字符串转换为整型
对字符串左侧第一位进行判断。如果第一位是数字,则会从第一位开始将读取到数字转换成整 数。如果第一位不是数字结果为0.
.PHP没有提供其他类型转换为整数的方法
转换为浮点数
.整数转换为浮点数
结 果不变
.布尔转换为浮点数
true为1
false为0
.字符串转换成浮点数
与整数类似
.PHP没有提供 其他类型转换为浮点数的方法
转换为字符串
将非字符串转换为字符串的方法是在变量前使用“(string)”强制转换。
规 则如下:
1.整型或浮点型:结果为其值
2.布尔型:true转换为'1' , false转换为空字符串
3.对象或数组:如果被 转换的变量是对象或数组,则转换结果将为字符串对象或字符串数组,需要根据实际情况进行分析。
4.资源类型:返回资源标识号
8.类型判断 与获取
.转换成数组
在变量前用“(array)”强制转换。将变量转换成员变量数据类型相同的数组,数组中只有一个元素。
如:
$a=1;
print_r((array)$a);
结 果:
Array
(
[0]=> 1
)
.转换为对象
在变量前用 “(object)”强制转换。将生成一个新对象,其中名为scalar的成员变量将包含原变量的值。如:
$a=1;
$o = (object)$a;
echo $o->scalar;
使用函数进行数据转换
bool settype(var, string type)
type值: boolean,integer,float,string,array,object,null
.判断类型函数
is_integer 如:is_integer($a); //返回true或false
is_float
is_double
is_real
is_int
is_long
is_numeric
is_string
is_bool
is_array
is_object
is_null
is_resource
is_scalar 是否为一个标量
.类型获取
gettype($a);
9.变量和常量
.常量
define('NUM_USR','0');
$u = NUM_USR;
.引用
$a=0;
$b = &$a;
$b++;
echo $a;//显示1,因为$b是$a的引用,$b改变就表示$a改变
10.操作符
10.1 数学操作符
+ - * / %(取余)
10.2 比较运算符
==
=== 值相同,类型相同
!=
<> 和!=一样都是不等于
!== 值相同,类型不同
<
>
<=
>=
10.3 逻辑运算符
and && 与
or || 或
xor 异或,若一个为true,但不是两个都为true,则结果为true
! 非
10.4 按位操作
& 按位与
| 按位或
^ 按位异或
~ 按位非
<< 左移位
>> 右移位
10.5 三元操作符
表示问号前面的表达式是否为true,是则返回冒号前面的值,不是则返回冒号后面的值
如:
$c = $a > $b ? 1:2;
echo $a>$b ? "hello":"no";
.下面两个语句是等价的
$a = ($b != 'china') ? true : false;
$a = $b != 'china';
10.6 其他操作符
++ 自增
-- 自减
@ 忽略特定函数的调用失败报错,如:$u=@file(xxx );
. 字符串连接操作,如:$a = 'hello'.'world'; $a = 'hello'.$a;
11.7 特殊的逻辑运算符表达式
$a = 0;
$b = 100;
echo $a || $b;//$a转换为bool值为true时,echo $a,否则echo $b,不管$b表达式是否为true,此表达式会始终显示100
echo $a && $b;//将什么都不显示,因为整个表达式$a && $b返回false
$a = 1;
$b = 0;
echo $a && $b;//将什么都不显示,因为整个表达式$a && $b返回false
echo $a && $b;//始终显示$a
$a = 1;
$b = 0;
$a && $b=12;
echo $b;//显示12,$a是否为true,为true就会执行$b=12,系统首先读取&&,知道这是个与,于是开始执行&& amp; amp; amp;前面的语句,发现返回true就再 执行&&后面的语句,发现返回false就不会再执行&&后面的语句了,因为&&逻辑,只要有一个 false 整个表达式就变成false
11.控制结构
11.1 if语句
if(){
//...
}elseif{
//...
}else{
if(){
}
}
11.2 switch语句
switch(){
case expr:
//...
break;
case expr2:
//...
break;
default:
//...
break;
}
如:
switch($a){
case 'go':
//...
break;
case 'come':
//...
break;
default:
//...
break;
}
11.3 while循环
while(){
//...
}
11.4 for循环
for(expr1;expr2;expr3){
//...
}
表 达式计算顺序
expr1 当第一次遇到for循环时执行一次。执行完,开始循环迭代
expr2 每次迭代前计算它。如果结果为true就执行代码块
expr3 在每次迭代后计算(执行)它,结果被忽略
expr2 迭代重新开始
11.5 foreach循环
foreach($arrays as $item){
echo $item;
}
11.6 中断循环
break 终止当前循环,后面可以接整数参数,表示跳出多少层循环。
如:break 2;
continue 跳过本次循环进入下次循环,后面可以接整数参数,表示跳过几次循环
如:continue 2;
12 函数
function 函数名(){
//block
}
12.1用return 可停止函数运行
如:
function aa(){
return;
}
12.2 参数
引用传递
function aaa(&$xxx){
}
12.3默认值
function aaa($a,$b = 'xxx'){}
12.4可变数量的参数
function xxx(){}
.func_num_args() 多少个参数
.func_get_arg()给定的索引位置返回参数
.func_get_args()在数组中返回所有参数
如:
function a(){
$all_params = func_get_args();
}
12.5返回值
function xxx(){
return 值;
}
若想返回多个值,可把结果组成数组并返回
函数支持嵌套,如:函数a中定义了函数b,那 么只有在函数a被调用了一次后,函数b的定义才会生效,PHP没有闭包
函数名字大小写不敏感
引用
1.变量引用
$b=&$a;
这 样操作$b就是操作$a
2.函数引用
用来实现对函数返回结果的引用
如:
function $func(){
static $var = 0;
return $var;
}
$a=&func();
$a=1;
$b=&func();
echo $b;
结果为:
1
$a的复制对函数的返回值造成了影响,导致$b的值被赋成了$a的值
3.引用释放
$a=1;
$b=&a;
echo $b;
unset($b);//变量$b被释放,但$a被保留
echo $a;
使用unset释放引用后不会小鼠引 用中的值
12.6变量范围
脚本内变量为脚本的全局变量,函数内要使用需要用global
如:
$a = 1;
$b = 2;
function a(){
global $a,$b;
echo $a+$b;
}
通过这种访问在函数 推出时会记忆变量的任何改动,和引用差不多
12.7 超级全局变量
$GLOBALS 包含正在执行的脚本内部全局可用的所有变量的引用
$_SERVER
$_GET
$_POST
$REQUEST
$_SESSION
$_COOKIE
$_ENV 保存PHP语言引擎所在进程的环境变量。数组的键是变量名
$php_errormsg 执行当前脚本时生成的最新错误信息,只在发生错误的代码范围内可用,php.ini中的track_errors配置要打开
12.8函数范围的可 用性
不管在定义前定义后调用,都可用。
12.9 把函数作为变量
function a($msg){}
function b($msg){}
function c($msg){}
$g = 'a';
$g(msg);
13.包含文件
inclue require
如:include('a.php');require('a.php');
inclue是在调用include语句时 加载文件
require是在脚本开始加载文件
区别:
1.require不管语句是否执行都会加载,include相反
如:
$a=1;
if($a==2)require('a.inc'); //条件不成立但也加载了,但没有被调用
2.文件不存在时错误处理方式不同
require抛出知名错误并终止脚本,include只有 警告信息
13.1 路径
如果没指明明确路径,PHP会在当前目录中查找包含的文件,然后查找php.ini文件中的 include_path设置中列出的目录,在unix下分割字符是冒号,在window下是分号
如:
include_path=".:/a/f/"
include_path=".;c:/a/f"
13.2 包含文件返回值
a.php
<?php
return pi();
?>
b.php
<?php
$k=include('a.php');
?>
13.3 防止重复载入
require_once();
include_once();
13.4 自动载入
在php.ini的 auto_prepend_file和auto_append_file 在每次执行脚本之前和之后要包含的文件
--转自