更新记录
2017.01.18 添加超全局变量和数组部分;补充代码书写和注释的内容
2017.02.09 补充完善字符串相关内容;补充变量类型相关内容
一些基本概念
-
PHP代码写在PHP标签里面,
<?php code here ?>
,一个文件可以有多对标签,当代码结束以后后面没有其他内容时,通常不闭合标签,一是这种情况PHP引擎本身也能完成解析,二是可以避免埋下一些坑点;例如是嵌套HTML的.php
文件那当然是要闭合的啦。其实还有诸如短标签
<? code here ?>
(需要在安装配置里开启),script标签<script language="php"></script>
,ASP风格(5.3以后废弃)这些书写方式,不过知道就好了。 注释代码除了JS里的两种方式外还支持shell风格的
#
注释内容输出
echo语句:
echo '这是一个字符串', 123;
echo语句主要输出字符串,数字,可以一次输出多个内容,用逗号隔开。另外,PHP的语法比JS更加严格,像这个echo语句,echo后面没有空格,语句结束没有分号,都会报语法错误。print:
print 123;
和print('abc');
两种方式都可以达到同样的输出。print和echo两者的区别:
1.echo和print都不是函数,是PHP语言本身的结构,但是echo没有返回值,print会有返回值;
2.echo可以一次性输出多个内容,print不可以,会报错
3.echo的运行速度比print快var_dump函数,输出的内容会很详细
<?php
var_dump('abc'); // string(3) "abc"
var_dump(123); // int(123)
var_dump(false); // bool(false)
?>
- echo在输出布尔值的时候,
true
会输出1,false
不会输出;print和print_r也同样如此。
echo true, false, true; // 11
print true; // 1
print false; // 空白,没有输出
print_r(true); // 1
-
变量与数据类型
$
声明变量,PHP变量名可以用中文,不过一般不会这么写的;
PHP的变量共有8种原始类型,其中四种标量类型(整型 integer,浮点型 float,布尔型 boolean,字符串 string),两种复合类型(数组 array,对象 object),两种特殊类型(资源 resource,空 null);
gettype()
函数传入变量查看类型;
声明变量但未赋值,或者赋值为null(NULL, NULl大小写不敏感),或者对变量调用unset()
函数,变量的值都为特殊类型null;
字符串变量用双引号时,可以传入变量自动解析,换言之,如果想在字符串里输出美元符号$,那就得使用单引号字符串了;
跟JS同样的,字符串里的引号,可以通过单双引号交叉或者转义符号实现;
可以使用Heredoc结构形式来创建长字符串,以<<<(界定符)GOD(标识符)作为开始,然后字符串结尾处再使用GOD结束;$a = 123; $b = "abc$a"; // 'abc123' $c = 'abc$a'; // 'abc$a' $d = <<<GOD 我有一只小毛驴,我从来也不骑。 有一天我心血来潮,骑着去赶集。 我手里拿着小皮鞭,我心里正得意。 不知怎么哗啦啦啦啦,我摔了一身泥。 GOD; echo $d; // 输出换行也会保留
创建对象
$obj = new stdClass();
PHP的变量作用域更加严格,同样也有全局变量和局部变量,即使是全局变量,在函数内也无法直接访问,要想在函数内访问外部变量,一般通过传递参数来进行;函数内访问全局变量可以使用global
关键字,但现在一般也不这么做了。$a = 11; test(); function test(){ global $a; echo $a; }
-
运算符
PHP的字符串拼接用.
符号,访问对象的属性用->
符号,和JS区别开来。
注意两个例子:echo 'a' . 222, '<br>'; // a222,后面的数字222会被转换成字符串来运算 echo 'a' + 222; // 222 // 前面的字符串a被转换成数字再运算,由于不是一个合法字符,所以没有数值
判断不相等
!=
和<>
逻辑与&&
和逻辑或||
也可以分别用and
和or
标示 -
函数
函数的声明同样也会提升,参数视为变量需要用$
符号;test(123); function test($a) { echo 'test' . $a; }
PHP有很多自带函数,列举几个常见的,详细使用可以查看手册。
date('Y-m-d H:i:s'); date('今年是Y年');
参数中对应的字母会转换为年月日,日分秒,注意Y的大写;
strlen('abc def') // 7
计算字符串长度,空格也算字符串
截取字符串:$str = 'abcdefg'; echo substr($str, 3); // 从下标为3的字符开始截取到最后,defg echo substr($str, 0, 3); // abc,从下标0截取到下标3 echo substr($str, -3); // efg,用负数表示将最后3个字符裁剪出来
-
常量
define
函数定义常量define('a', '字母a'); echo a; // 定义好的常量可以直接访问,不用`$` // 一些PHP预设好的常量 echo '当前运行的PHP文件是 ' . __FILE__; echo '<br/>当前运行的PHP文件所在目录是 ' . __DIR__; echo '<br/>运行这个脚本的PHP程序文件是 ' . PHP_BINARY;
超全局变量
这是JS没有的东西,就是在整个PHP的运行环境的任何地方都能直接访问,无需加global
,主要记住三个常用的,都是数组,$_GET
,$_POST
,$_SERVER
,前两个就是获取get和post参数了。-
数组
目前看来PHP里面数组非常重要,像JS里面对象那样键值对存储数据的形式,在PHP里其实也是作为数组存在的。// 索引数组 $arr1 = [1, 2, 'abc']; echo $arr1[0]; // 还是下标访问 // count()函数返回数组有多少个元素 echo count($arr1); // 需要重点注意的是: // 如果传入的变量不是数组而是其他的比如字符串,数字,布尔值,那么都会返回1 // 追加元素 $arr1[] = 'def'; // isset()函数检验是否存在该元素 echo isset($arr1[3]); // 存在 输出1 echo isset($arr1[4]); // 不存在 不输出 // 关联数组 // 其实就是键值对的形式,注意 $arr2 = [ 'name' => '老王', 'age' => 26, 6 => 'abc', // 其实用数字作key也是可以的,从规范来讲一般不会这么干 ]; echo $arr2['name']; // 和JS里的对象很像了,当然对象更多用.访问属性 // 多维数组,当然可以无限嵌套下去 $arr3 = [ 'name' => '老王', 'children' => [ 'Lucy', 'Lily' ], 'address' => [ 'city' => '北京', 'district' => '朝阳区', 'other' => ['123', '456'], ], ]; echo $arr3['children'][0]; echo $arr3['address']['city']; // 输出数组可以用print_r()函数 print_r($arr1); // Array ( [0] => 1 [1] => 2 [2] => abc [3] => def ) print_r($arr2); // Array ( [name] => 老王 [age] => 26 [6] => abc ) // 关联和多维数组直接输出不方便看的话可以这样 echo '<pre>'; print_r($arr3); echo '</pre>'; // foreach循环数组 foreach ($arr2 as $value) { echo $value . '<br>'; } foreach ($arr2 as $key => $value) { echo $key . ' : ' . $value . '<br>'; } foreach ($arr1 as $char) { echo $char . '<br>'; } foreach ($arr1 as $num => $char) { echo $num . ' : ' . $char . '<br>'; }