1. 定义变量
4种方式 : $varName、${varName}、$$var、${$var}
$i = 'abc';
${'abc'} = 5000;
${$i} = 3000;//相当于把{}内字符串换为换为$i
$$i = 4000;//相当于省略了{}
echo $abc;//4000
2 数组赋值
<script>
var arr = [12,31];
var arr_1 = arr;
arr_1.push("张三");
/* 在js/java中
* 这样赋值会使arr_1和arr的指针引用地址一致
*/
console.log(arr===arr_1);//true
console.log(arr);//[12, 31, "张三"]
</script>
php中使用&赋值指针引用(复杂数据采用这种方式)
$arr = array(1,7);
$arr_1 = $arr;
/* $arr_1 = &$arr;
* arr_1 是取得arr的指针引用
* 那么arr和arr_1就是指向同一个数组
* */
$arr_1[] = '新东西';
//$arr 和 $arr_1 不是同一个数组
print_r($arr);//1,7
print_r($arr_1);//1,7,'新东西'
3 数据类型
标量:boolean、integer、float/double、string
复合类型:array、object
特殊类型:resource、NULL
伪类型:mixed、nubmer、callback
/* 复合类型可以做类型限定
**/
function fn(array $arr){
}
function f($a){
}
4 变量作用域
类似与js的 没有函数 变量就没有作用域,
全局变量 局部变量
超全局变量 :
$_SERVER:
REMOTE_ADDR 远程地址/客户端 服务器的ip
PATH_INFO test.php/ad 在.php后面跟的路径/ad
QUERY_STRING 得到get请求后带的参数 即使同名也能解析
REQUEST_URI ip端口后跟的完整路径
$GLOBALS、$_GET、$_POST、$_FILES、$_COOKIE、$_SESSION、$_REQUEST
Warning
PHP 4.2.0 以及后续版本中,PHP 指令 register_globals 的默认值为 off。这是 PHP 的一个主要变化。让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。例如,为了得到 DOCUMENT_ROOT 的值,将必须使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 来代替 $id 从 URL http://www.example.com/test.php?id=3 中获取 id 值,亦或使用 $_ENV['HOME'] 来代替 $HOME 获取环境变量 HOME 的值。
5 数组API
js中的splice
/* splice(位置,删除个数,....增加)
* */
var arr = [12,31];
arr.splice(0,0,'添加','add2');
console.log(arr);
$arr = array(1, 3);
$arr_1 = array(2, 'b' => '测试');
//数组的长度
echo sizeof($arr)."\n";
echo count($arr)."\n";
/* 判断一个值是否在数组内,返回布尔值
* in_array(search,array,type)
* 数组搜索的值 搜索的数组 type 参数设置为true,则搜索区分大小写
*/
var_dump(in_array(2,$arr_1));
/* 判断一个键在数组内是否存在,返回布尔值
* */
var_dump(array_key_exists(0,$arr));
/* array_splice 相当于js中的splice
* */
/* array_search 搜索数组中的值对应的索引
* */
echo array_search(1,$arr);
// + 连接数组,下标相同就不连接
print_r($arr + $arr_1);
6 打印区别
var_dump,var_export,print_r,print,echo区别
1.对于Boolean
var_dump,var_export 可显示
print_r,print,echo 不显示
2.对于Array
var_dump,var_export,print_r 可显示
print,echo 不显示
3.print,echo区别
在隐藏报错@所放位置
@print $up/$down;
echo @($up/$down);
/* print_r 查看复杂数据的内部结构
* var_dump 会打印出类型
* var_export 打印符合php语法
* */
print_r($arr);
var_dump($arr);
var_export($arr);
/* empty 是否为空
* isset 是否设置
* unset 删除变量/删除数组中的元素/删除对象中的属性
* */
$a = 'a';
unset($a);
var_dump(empty($a));
var_dump(isset($a));
7 常用API
gettype、is_array、is_bool、is_float、is_int、is_null、is_string、is_resource、is_callable……
empty()
判断是否为空
isset()
判断是否定义
unset()
相当于删除
intval()
取整,将字符串中非数字除去
floatval()
取浮点数
is_numeric()
判断该是否是数字
阶段一:
ASCII(单字节)iso-8859-1
阶段二:
ANSI编码(本地化编码,双字节)
GB2312、GBK、GB18030、BIG5
阶段三:
UNICODE(国际化编码)三字节
UTF-8、UTF-16
--------------------------------------------------
i18n:
就是internationalization, 国际化,由于首字母"i"和末尾字母"n"间有18个字符,所以简称i18n.
internationalization指为了使应用程序能适应不同的语言和地区间的变化而不作系统性的变化所采取的设计措施。
l10n:
就是localization, 本地化,由于首字母"l"和末尾字母"n"间有10个字母,所以简称l10n.
localization指为了使应用软件能够在某一特定语言环境或地区使用而加入本地特殊化部件和翻译后文本的过程。
常用中文编码
GB2312、GBK、GB18030;UTF-8
UTF-8与GB系列的编码上的区别?(见上)
String API
-----------
strlen()(判断占几个字节
eg:strlen($变量/常量)
---------------------------
explode()(分割字符串,存入数组)
eg:explode('字符串',$变量/常量)
---------------------------
join()/implode()(数组合成字符串)
eg:join('字符',$array)
---------------------------
printf()/sprintf()(可以约束小数的显示)
eg:printf('%06.3f',$float)
ps:f代表浮点数,会直接输出
0代表位数不够用什么代替
6代表总位数,包含小数点
3代表小数点后的位数
在PHP中无单双精之分
printf('%06.3f',$float)
用法一样,但会返回变量,不会直接输出
---------------------------
strtolower()(转化为小写)
eg:strtolower($变量/常量)
返回字符串
---------------------------
strtoupper()(转化为大写)
eg:strtoupper($变量/常量)
返回字符串
---------------------------
md5($变量/常量) 验证完整性
---------------------------
trim($变量/常量) 只能取消首尾的不可见字符
---------------------------
strip_tags($变量/常量)(提取纯文本)
---------------------------
str_replace('替换前元素','替换的元素',对象)(搜索替换)可用双引号
---------------------------
strpos(对象,'目标',开始位置)(查找位置)
ps:位置不写,默认从0开始
返回位置,只返回首位
eg:(如何找第二个字符出现位置)
$satr = strpos($f,'1',0);
echo $satr;
echo strpos($f,'1',$satr+1);
---------------------------
substr()(截取字符串)
eg:substr(对象,开始位置,截取位数);
---------------------------
iconv('替换前编码方式','替换的编码方式',对象)(切换编码)
---------------------------
mb
mb_strlen(string $str[,string $encoding])(多字节判断占位)
eg:mb_strlen(对象,'编码方式');
mb_strpos(对象,'目标',开始位置,'编码方式')(查找多字节)
mb_substr(对象,开始位置,截取位数,'编码方式')(截取多字节)
8 常量类型
常量定义
define('常量','常量的值');
命名规范:全大写,单词间用_分割
常量的类型(只能是标量)
Boolean(布尔)integer(整数)float(小数)string(字符串)
PS:在php中STDIN是定义的常量,可用fgets()调用
/* 常量只能是标量
* boolean、integer、float、string
* */
define('XX', 5);
define('YY', array(1));//错误写法
echo XX;
/* __LINE__ 文件的行号
* __FILE__ 文件的名字
* */
echo __LINE__;
echo __FILE__;
9 php中的arguments
/* 类似于js中得到实际闯入参数的arguments
* func_get_args() 得到传入参数的数组
* */
function fn($i,$j){
echo "$i,$j\n";//12,32
var_export(func_get_args());
}
fn(12, 32, 123, 31, 1);
10 php中的闭包
/* php中的闭包,必须借助与use
* */
function par(){
$i = 0;
return function () use($i){
echo ++$i;
};
}
$c = par();
$c();
11 错误控制
@ or die ('提示语')
eg:
$up = 1000;
$down = 0;
@$pro = $up/$down or die('分母不为0');
echo '他们的商为:'.$pro;
ps:
print,echo区别
在隐藏报错@所放位置
@print $up/$down;
echo @($up/$down);
-----------------------
error_reporting
error_reporting(E_ALL);(显示所有得错误)
error_reporting( E_ALL ^ E_WARNING ^ E_NOTICE );(只显示警告和提示)
error_reporting(E_ERROR)(只显示错误报告)
error_reporting(0);(所有提示都不显示)