本文主要介绍了PHP编程入门的基础知识,包括PHP一般语法,数据类型及数据类型间的转换,常量,系统预定义常量,变量,运算符及运算符优先级,函数,数组,流程控制等
PHP(Hypertext Preprocessor, 超文本预处理器)
一般语法
<?php #代码段 ?>
- 关键字,函数名,类,大小写不敏感
- 变量大小写敏感
- 默认文件扩展名为
*.php
- 通常包含HTML标签以及一些PHP脚本代码
- 注释:
//
、#
、、/* ... */
一致语法
if...elseif...else
,switch-case
,while
,for
# foreach
<?php
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>
输出语句
echo,print都能使用
区别:
- print返回1,echo没有返回值
- echo可以输出一个以上的字符串,比print快
常量
define
define(string constant_name, mixed value, case_sensitive=true)
<?php
define("GREETING", "Welcome to W3School.com.cn!");
echo GREETING;
?>
预定义常量
和用户自定义常量在使用上没什么差别
支持类型
- 四种标量类型:boolean(布尔型),integer(整型),float(浮点型,double),string(字符串)
- 两种复合类型:array(数组),object(对象)
- 两种特殊类型:resource(资源),NULL(无类型)
变量
PHP 是一门类型松散的语言。我们不必告知 PHP 变量的数据类型。
PHP能 根据它的值,自动把变量转换为正确的数据类型。
定义变量:$varName= varValue;
//变量会在首次为其赋值时被创建
取变量:$varName
引用赋值:$str2 = & $str1
变量命名规则
- 变量以
$
符号开头,其后是变量的名称 - 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感( y与 y 与 Y 是两个不同的变量)
- 变量会在第一次赋值时被创建。无需声明变量的类型。
变量作用域
local(局部)
函数内部声明的变量,作用域是所在函数,只能在函数内部进行访问
<?php
function myTest() {
$y=10; # 局部作用域
echo '测试函数内部的变量:'.$y.'<p>'; # 测试函数内部的变量:10
}
myTest();
?>
global(全局)
被函数之外声明的变量,作用域是整个php文件
函数以外直接进行访问
函数内使用global 关键词访问全局变量
<?php
$y=10;
function myTest() {
global $y; # 函数内访问全局变量必须使用global 关键词
$y=10 + $y;
}
myTest();
echo $y; // 20
?>
$GLOBALS[index]
的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。
<?php
$y=10;
function myTest() {
$GLOBALS['y'] = 10 + $GLOBALS['y'];
}
myTest();
echo $y; // 输出 20
?>
static(静态)
加长变量的作用域
可以在函数调用结束后仍保留变量值,当再次回到其作用域时,继续使用原来的值
可变变量
允许动态改变一个变量名称
原理:该变量的名称由另外一个变量的值确定
超级全局变量
也就是预定义的全局变量,在哪儿都能用
常用
$GLOBALS
:引用全局作用域中可用的全部变量
$_SERVER
:保存关于报头、路径和脚本位置的信息。
$_REQUEST
:用于收集 HTML 表单提交的数据。
$_POST
:用于收集提交method="post"
的 HTML 表单后的表单数据。也常用于传递变量。
$_GET
:也可用于收集提交 HTML 表单 (method="get")
之后的表单数据。
$_FILES
:经由 HTTP POST 文件上传而提交至脚本的变量
$_ENV
:包含服务器端环境变量的数组
$_COOKIE
:通过HTTP cookie传递给当前脚本的变量的关联数组
$_SESSION
:
查看方法
var_dump($_ENV);
# 方便而且输出内容格式清晰。推荐
var_dump
:系统函数,输出变量的相关信息print_r($_ENV);
foreach($_ENV as $key=>$val)
{echo $key.'--------'.$val.'<br>';}
检测数据类型
转化类型
因为php是弱类型的语言,所以隐式转换很常见
显式转换方式如下
转换操作符 | 转换类型 | 例子 | 注意 |
---|---|---|---|
(boolean) | 转换成布尔型 | (boolean)$str | null ,0,未赋值的变量(false) |
(string) | |||
(integer) | |||
(float) | |||
(array) | |||
(object) |
settype()函数返回1, true 原变量被改变了
bool settype(mixed var, string type)
var: 指定的便令
type: 指定的数据类型
转换成功返回true,否则返回false
字符串转float/integer,如果字符串是以数字开头的,就会先把数字部分转换为整型,再舍去后面的字符串;如果数字中含有小数点,则会取到小数点前一位
运算符
运算符类型
字符串运算符
“.”:拼接 echo "you " . "1" . '<p>';
“+”:只用于算术运算符【如果符号两边是字符类型->整型;字母->0;数字开头的字符串->截取数字】
其他运算符和c/c++保持一致
数组运算符
注意:PHP中,数组的元素的顺序,不是由下标(键名)决定的,而是完全由加入的顺序来决定。
- “+“:联结 将右边的数组项合并到左边数组的后面,得到一个新数组。如有重复键,则结果以左边的为准
$v1 = array(1, 2,3, 4);
$v2 = array(5,6,7,8,9);
$r1 = $v1 + $v2; //结果只能是:array(1,2,3,4,9)
- “==”: 相等,如果两个数组具有相同的键名和键值(可以顺序不同,或类型不同),则返回true
$v1 = array(1, 2,3, 4);
$v2 = array(4,2,1,3);
$v3 = array(3=>4,1=>2,0=>1,2=>3);
echo $v1 == $v2; //不等
echo $v1 == $v3; //相等
- “!=, <>” :不相等,如果两个数组不是相等(==),则返回true
- “===”:全等,如果两个数组具有相同的键名和键值且顺序和类型都一样,则返回true
- “!==” : 不全等,如果两个数组不是全等(===),则返回true
错误控制运算符:@
通常用于一个“可能”发生错误的表达式的前面——最常用的情形就是连接数据库。
$link = @mysql_connect(“localhost, ”’, “”,’”);
var_dump($link);
或者更进一步的使用
$link = @mysql_connect(“localhost, ”’, “”,’”) or die("database link error");
var_dump($link);
通常错误控制运算符用在程序开发测试阶段无法预测的可能出错的位置——一般是获取外部资源的时候
die
是一种“语言结构”,并非函数,可以不写括号
sleep($n);
:让php脚本停止$n
秒,然后继续执行。
运算符优先级
- 优先级高的操作先执行
- 同一优先级的操作从左到右执行
- 赋值操作从右到左
- 括号内先执行
函数
一般函数
<?php
function writeMsg() {
echo "Hello world!";
}
writeMsg(); // 调用函数
?>
带参函数[值传参,引用传参]
<?php
$test = 1;
function setSum($name,&$quoteValue,$value=10) {
echo "$name sum is $value <br>";
$quoteValue = 100;
}
echo $test.'<br>';
setSum("width",$test);
setSum("length",$test);
setSum("high",$test);
echo $test;
?>
带返回值函数
<?php
function sum($x,$y) {
$z=$x+$y;
return $z;
}
echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
?>
变量函数
<?php
function fun1(){
echo 'fun1<br>';
}
function fun2(){
echo 'fun2<br>';
}
$fun = 'fun1';
$fun();
$fun = 'fun2';
$fun();
?>
函数引用
和参数引用传递不同,对函数的引用必须在两处都要用‘&’,用来说明返回的是引用
<?php
function &rFun1($tmp = 0){
return $tmp;
}
$str = &rFun1("god love you");
echo $str.'<br>';
?>
取消引用
unset()
:取消引用,断开变量名和变量内容之间的绑定,并不销毁变量,也不改变原变量
数组
数组类型
索引数组 - 带有数字索引的数组
<?php
$cars=array("Volvo","BMW","SAAB");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . "."; # 索引下标
$arrlength=count($cars); # 个数
echo $arrlength;
for($x = 0; $x < $arrlength; $x++) { # 遍历索引
echo $cars[$x];
echo "<br>";
}
?>
关联数组 - 带有指定键的数组
<?php
# 第一种定义方法
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
# 第二种定义方法
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
# 第一种遍历方法 each()返回当前指针位置的数组值,并把指针向后推进一位
while(list($name, $value) = each($age))
{
echo $name." -> ".$value.'<br>';
}
# 第二种遍历方法
foreach($age as $name=>$value) {
echo "Key=" . $$name . ", Value=" . $value.'<br>';
}
?>
多维数组 - 包含一个或多个数组的数组
数组操作
获得数组元素个数
int count(mixed array[, int mode])
mode
0(默认)或COUNT_RECURSIVE(1)
,1递归地对数组计数,对计算多维数组的所有单元很有用
数组查询
array_search()
在数组中搜索给定的值,找到后返回键名,否则返回false。
PHP4.2.0前,函数失败时返回null
mixed array_search(mixed needle, array haystack[, bool strict])
needle
指定在数组中搜索的值,
haystack
指定被搜索的数组,
strict
为true
将检查给定值的类型
常用于购物车中修改指定商品数量的修改和删除
获取数组中最后一个元素
array_pop()
获取并返回数组最后一个元素,并将数组长度减1,数组为空或类型不对,返回null
mixed array_pop(array array)
数组添加元素
array_push()
向数组末尾添加元素,返回新的总数
int array_push(array array, mixed var[, mixed])
$array_holy_spirt_fruit = array("love", "joy", "peace", "forbearance", "kindness", "godness");
print_r($array_holy_spirt_fruit); # Array ( [0] => love [1] => joy [2] => peace [3] => forbearance [4] => kindness [5] => godness )
echo '<br>';
array_push($array_holy_spirt_fruit,"faithfulness", "gentleness", "self-control");
print_r($array_holy_spirt_fruit); # Array ( [0] => love [1] => joy [2] => peace [3] => forbearance [4] => kindness [5] => godness [6] => faithfulness [7] => gentleness [8] => self-control )
数组删除重复元素
将数组元素的值作为字符串排序,对每个值只保留第一个键名,忽略所有后面的键名
并不改变原数组,将删除重复元素的数组返回
array array_unique(array array)
数组排序
sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort() - 根据键,以降序对关联数组进行排序