PHP运行环境安装
在初始学习PHP时建议使用集成化开发环境,下面是常用的集成开发环境
集成开发软件
可使用的操作系统
说明
WAMP
Win
推荐
XAMPP
Win/Mac
Mamp
Mac
推荐
Lamp
Linux(CentOS/Fedora/Debian/Ubuntu)
MAC下安装Mamp
mac下自带PHP,自行配置环境会比较麻烦,而且容易不小心更改到系统配置,造成不必要麻烦。推荐使用Mamp,下载安装后电脑上就有了PHP、phpMyAdmin、MySQL
配置网站根目录
Mac配置
打开Mamp,按下图所示选择一个文件夹作为网站根目录
访问网站只需要localhost:8888
Windows配置
安装WampServer,创建虚拟主机
建议的做法是为每个项目创建一个虚拟主机,当不会用到时再删除它
空白符和换行
在php中,空白符和换行符号都不是必须的,但最好做到简洁易懂。php语句以;结尾。
echo 'hello,world'
?>
如果php文件只有php代码,结尾?>
不是必须的,推荐做法是php文件只写php,结尾符省略
注释
echo 'hello,world';
// 单行注释
# 单行注释
/**
* 多行注释
*/
查看数据
echo输出一个或多个变量,它不是函数,不需要使用括号,如果输出多个用逗号分隔
echo 1,2,3,4;
var_dump打印变量的相关信息
var_dump(1234);
区别:echo是直接输出,var_dump输出和带有变量类型
变量知识
定义变量
PHP是弱类型语言,不像其他语言需要对变量进行类型声明。PHP中以$作为前缀来定义变量,以a~z(大小写)或_下划线定义变量名。
下面是合法的变量名
$hd = 'baidu.com';
$_name = 'abc';
下面是非法的变量声明
$999 = 'yahoo.com'
$&* = 'sina.com.cn'
传值和引用
传值赋值
直接使用=将变量的值赋值给另一个变量
$a = 1;
$b = $a;
$b = 2;
echo $a;//结果是1
引用赋值
将一个变量的内存地址赋值给另一个变量的行为即传址赋值。需要在=等号前加上&引用符号,这样两个变量指向内存中的一个地址,任何一个变量的改变都影响到另一个变量
$a = 1;
$b = &$a;
$b = 2;
echo $a;//b和a指向同一内存地址,b改变了a也跟着变,结果是2
可变变量
一个变量的值可以作为另一个变量的名
$a = 'hello'; //普通变量
$$a = 'world'; //可变变量 相当于:$hello = ‘world’;
echo "$a ${$a}";//输出:hello world
echo "$a $hello";//输出:hello world
第二句把word赋值给$a,其实是新建了名为hello的变量
变量作用域
变量作用域指变量在代码中可以访问的位置
超全局变量
可以代码的任何位置都可以访问的变量
变量
说明
$_GET
地址栏GET提交
$_POST
表单POST提交
$_FILES
文件上传变量
$_SESSION
会话变量
$_COOKIE
cookie值变量
$_GLOBALS
全局变量
$_REQUEST
包含
_POST、$_COOKIE
$_SERVER
服务器环境变量
全局变量
全局声明(函数外声明)的变量会保存在 $_GLOBALS 中,函数内默认不能访问到全局变量,它有两种方式可以被访问到
使用 global 关键字。
$hd='abc';
function p() {
//利⽤ global 引入全局变量
global $hd;
echo $hd;
}
p();
使用全局数组$GLOBALS调⽤用全局变量量。 如: $GLOBALS['hd'];
注意:尽量避免使用自定义全局变量,以便造成全局污染
检测变量
通过 isset 函数可以检测变量是否定义
var_dump(isset($name));
# 结果是false
变量销毁
php在全部代码执行结束后会删除所有变量,也使用 unset 函数可以在程序运行中删除变量
$name='houdunren.com';
unset($name);
注意:全局变量不能在函数中删除,unset只能删除函数内部定义的变量
$name = 'abc';
function run()
{
global $name;
unset($name);
}
run();
echo $name;
# 依然可以输出 abc
静态变量
一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数第一次被调⽤时被初始化。 要声明函数变量为静态的⽤关键字static。通常静态变量的第一次使⽤时赋予⼀个初始值
function calculate()
{
static $a=1;
return ++$a;
}
calculate(); // 2
echo calculate(); // 3
静态变量可以用于记录脚本执行次数
数据类型
使用不同数据类型储存不同数据,下面是常用PHP数据类型表:
类型
说明
integer
整型
float
浮点型
string
字符串
boolean
布尔型
array
数组
object
对象
整型
整型可以是十进制、八进制、十六进制。
01988 #十进制
0xfff #十六进制
PHP中使用octdec()函数将8进制转为10进制,
使用hexde()函数将16进制转为10进制
// 八进制转十进制
echo octdec(777); //511
// 十六进制转十进制
echo hexdec('FAF'); // 4015
float浮点数
浮点数表示实数,可理解为有限或无限小数
0.12
-10.98
布尔型
当转换为 boolean 时,以下值被认为是FALSE/false:
布尔值 FALSE
整型值 0(零)
浮点型值 0.0(零)
空白字符串
字符串 "0"
没有成员变量的数组
没有单元的对象(仅适用于 PHP 4)
特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE/true,注意空对象也为真
字符串
字符串可以用双引号""或''号包含,区别是双引号中可以解析变量
$url = 'baidu.com';
$string = "百度网址是 {$url}";
输出中文字符问题
在所有输出前使用下面的代码可以正确显示中文:
header('Content-type:text/html;charset=utf-8');
转义符
转义是将有多种含义的字符进行转换,比如$即是变量前缀也是美元符号,就需要转义在不同场景进行改变,转移符号为/
符号
含义
\t
制表符
\n
换行符
注意:浏览器解析的换行和制表符,同输出到磁盘的换行以及制表符结果是不一样的
echo "变量定义 \$name = 'baidu.com.com',学会了吗?\n";
定义符
定义符文本表现的就和双引号字符串一样,在定界符文本中不需要转义引号,适合输入大量文本
注意:结束符必须从第一列开始,并且后面除了分号以外不能包含任何其他字符,空格也不可以
$string = <<
标题
str;
连接符
多个字符串使用.符号连接
$name = 'abc';
$url = 'abc.com'
echo $name.'一些文字'.$url;
字符串常用函数
strlen — 取得字符串长度传度的函数
echo strlen('学习编程'); // 12
一个汉字占3个字节,所以4个字占12字节。一般用下面方法居多
mb_strlen — 根据字符编码获取长度
echo mb_strlen('学习编程','utf8'); // 4
trim — 截去字符串首尾的内容
$string = ' com ';
echo strlen(trim($string,' moc')); // 3
# 从前后删除` moc`和空格字符
注意:trim($string,' moc')只要出现在moc出现的字符都会删掉,不管顺序是否匹配
rtrim从右侧删除、ltrim从左侧删除
$string = ' .com ';
echo strlen(rtrim($string,' moc')); // 4
strtolower — 字母转为小写
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str; // Prints mary had a little lamb and she loved it so
strtoupper — 字母转大写
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtoupper($str);
echo $str; // Prints MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
ucfirst — 将字符串的首字母转换为大写
$foo = 'hello world!';
$foo = ucfirst($foo); // Hello world!
ucfirst经常用于文件名大写
ucwords — 将字符串中每个单词的首字母转换为大写
$foo = 'hello world!';
$foo = ucwords($foo); // Hello World!
$foo = 'hello|world!';
$baz = ucwords($foo, "|"); // Hello|World!
$baz = ucwords($foo, "|");第二个参数是字符串分隔符
md5 — 计算字符串的 MD5 散列值,以 32 字符十六进制数字形式返回散列值
md5('houdunren.com') //962ff8546a001f8f6d0adecf08905d14
md5常用于处理文件名含有特殊字符,如dd/mm/index.php,运用函数后文件名不含特殊符号
explode — 使用一个字符串分割另一个字符串
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
拆分的结果是一个数组
implode — 将一个一维数组的值转化为字符串
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // lastname,email,phone
substr — 返回字符串的子串
$rest = substr('abcdef', 1); // bcdef
$rest = substr('abcdef', 1, 3); // bcd
$rest = substr("abcdef", 0, -1); // 返回 "abcde"
$rest = substr("abcdef", 2, -1); // 返回 "cde"
$rest = substr("abcdef", 4, -4); // 返回 ""
$rest = substr("abcdef", -3, -1); // 返回 "de"
substr截取中文字符会得到不正确的结果,需要用mb_substr,并指定编码参数
mb_substr — 获取部分字符串
echo mb_substr('前端', 1, 1, 'utf-8'); //端
strstr — 查找字符串的首次出现
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // 打印 @example.com
strrchr — 查找指定字符在字符串中的最后一次出现
echo strrchr('hdcms.jpg', '.'); // .jpg
strpos — 查找字符串首次出现的位置,如果没找到,将返回 FALSE
echo strpos('hou', 'o'); // 返回1
strrpos — 计算指定字符串在目标字符串中最后一次出现的位置
echo strrpos('.com', 'o'); // 返回2
str_replace — 子字符串替换
echo str_replace('houdunren', 'hdcms', 'houdunren.com'); //返回 hdcms.com
// 原字符串 替换字符 模式串
echo str_replace(['小猫','小狗'], '*', '我家有一只可爱的小猫和小狗'); //我家有一只可爱的*和*
echo str_replace(['小猫','小狗'], ['猫猫','旺旺'], '我家有一只可爱的小猫和小狗'); //我家有一只可爱的猫猫和旺旺
NULL
NULL数据类型只有一个值NULL,它有三种情况:
变量未被赋予任何值
变量被赋值为NULL
被unset()函数处理后的变量
$a; //变量 $a未被赋予任何变量,值为NULL
$b = NULL; //变量 $b被赋值为NULL
$c = 10;
unset($c); //使用unset()函数处理后,$c为NULL
相关函数
判断类型getType()
$num = 1234;
$type = gettype($num);
var_dump($type);
检测是否为布尔型is_bool
$var = true;
$bool = is_bool($var);
var_dump($bool);
检测是否为整型is_int()
$int = 1234;
$bool = is_int($int);
var_dump($bool);
检测是否为浮点数is_float()
$num = 1.1234;
$bool = is_float($num);
var_dump($bool);
检测是否为字符串is_string()
$string = 'houdunwang';
$bool = is_string($string);
var_dump($bool);
检测是否为NULL is_null()
$var = null;
$bool = is_null($var);
var_dump($bool);
类型转换
自动转换
PHP类型根据值,自动转换
$num1 = '1';
$num2 = '2';
echo $num1 + $num2; # 字符串转为数字相加
强制转换
settype($var,'type'); # type类型为integer、double、string、array 与 object
$var = '123';
settype($var,’integer’);
var_dump($var); 就会变成int类型
intval() $var = '123';
var_dump(intval($var));
floatval() $var = '1.23';
var_dump(floatval($var));
strval() $var = 123;
var_dump(strval($var));
文档帮助
网址php.net可以下载php和文档信息,中文文档