编程语言常见的语法
- 变量 —— 用于临时存放数据的容器顺序结构 —— 先干什么再干什么
- 分支结构 —— 如果怎样就怎样否则怎样循环结构 —— 不断的做某件相同的事
- 函数 —— 提前设计好一件事怎么干,然后想什么时候干就什么时候干
- 运算符 —— 数学运算和字符串拼接
- 字面量 —— 在代码中用某些字符组成,能够表达一个具体的值 这些字符之间表示数据的方式叫做字面量
PHP 也是另外种编程语言,作为另外一种编程语言,PHP 也具备着绝大多数语言都有的特点,例如变量、条件分支、循环、函数等等,不同的是每个语言都会有自己的语法规定。这里不用太过担心,这些语法规定与之前学习的编程语言大同小异,对我们来说不会有太大的压力。
- 变量
- 双引号字符串和单引号字符串的差异
- 指令式的语法
- foreach
- 函数作用域问题
- 字符串拼接
1. 变量
变量是编程语言中临时存放数据的容器。
PHP 中申明一个变量是用一个美元符号后面跟变量名来表示。变量名同样是区分大小写的。PHP 中变量无需声明类型,变量的类型根据值的类型来推断。
<?php $foo; // 申明一个变量,变量名为 `foo`,未对其进行赋值 $bar = 'baz'; // 申明一个变量,将一个值为 `baz` 的字符串赋值给它 echo $foo; // 输出一个变量名为 `foo` 的变量 fn($bar); // 将一个变量名为 `foo` 的变量作为 `fn` 的实参传递
1.1. 数据类型
常见的 PHP 数据类型与 JavaScript 基本一致:
string(字符串)
integer(整型)—— 只能存整数
float(浮点型)—— 可以存带小数位的数字
boolean(布尔型)
array(数组)
object(对象)
NULL(空)
Resource(资源类型)
Callback / Callable(回调或者叫可调用类型)
字符串
PHP 有多种创建字符串的方式:单引号、双引号等。
单引号字符串
不支持特殊的转义符号,例如 \n
如果要表示一个单引号字符内容,可以通过 ’ 表达如果要表示一个反斜线字符内容,可以通过 \ 表达
双引号字符串
支持转义符号
支持变量解析
<?php // ====== 单引号 ====== echo 'hello\nworld'; // => `hello\nworld` echo 'I\'m a better man'; // => `I'm a better man` echo 'OS path: C:\\Windows'; // => `OS path: C:\Windows` // ====== 双引号 ====== echo "hello\nworld"; // => `hello // world` $name = 'zce'; echo "hello $name"; // => `hello zce`
字符串函数
<?php // PHP 所有能力都是函数,内置1000多个函数 $str = 'hello'; // 获取字符串长度 echo strlen($str); echo '<br>'; // 获取中文字符串(宽字符)的长度 // strlen 只能获取拉丁文的长度 // 内置成员函数直接使用 echo strlen('你好'); echo '<br>'; // PHP 中专门为 宽字符集 添加了一套 API // 这一套 API 不在内置的 1000+ 里面,而是在一个模块(php_mbstring.dll)中 // 模块成员必须通过配置文件载入模块过后再使用 // 所有的API 都是 mb_xxxx echo mb_strlen('你好'); // 配置 PHP 扩展的步骤 // 1. 在 PHP 的安装目录去创建一个 php.in // 2. extension_dir // 3. ;extension=php_mbstring.dll // 4. 默认Apache加载的php.ini 是去 Windows目录找的 // 5. 可以通过 Apache 的配置文件修改默认加载路径 PHPIniDir
http://php.net/manual/zh/ref.strings.php
推荐w3c school:http://www.w3school.com.cn/php/php_string.asp
数组
PHP 中数组可以分为两类:
- 索引数组
与 JavaScript 中的数组基本一致
<?php // 定义一个索引数组 $arr = array(1, 2, 3, 4, 5); var_dump($arr); // PHP 5.4 以后定义的方式可以用 `[]` $arr2 = [1, 2, 3, 4, 5]; var_dump($arr2);
- 关联数组
有点类似于 JavaScript 中的对象
<?php // 注意:键只能是`integer`或者`string` $arr = array('key1' => 'value1', 'key2' => 'value2'); var_dump($arr); // PHP 5.4 以后定义的方式可以用 `[]` $arr2 = ['key1' => 'value1', 'key2' => 'value2']; var_dump($arr2);
isset
// isset 也可判断数组中是否有指定的键 // 这种类似于 JavaScript 的方式虽然可以达到效果,但是会有警告 if ($dict['foo']) { echo $dict['foo']; } else { echo '没有'; } // isset 会吞掉 Undefined index 的警告 if (isset($dict['foo'])) { echo $dict['foo']; } else { echo '没有'; } // isset($dict['foo']) // $dict['foo'] => // isset() // empty($dict['foo']) 相当于 !isset($dict['foo']) || $dict['foo'] == false if (empty($dict['foo'])) { echo '没有'; } else { echo $dict['foo']; } // empty 的实现 // function empty ($input) { // return !isset($input) || $input == false // }
1.2. 数据类型转换
函数太多可以参考php手册
参考:http://php.net/manual/zh/language.types.type-juggling.php
<?php $str = '132'; // 将一个内容为数字的字符串强制转换为一个整形的数字 $num = (int)$str; // 将一个数字强制转换为布尔值 $flag = (bool)$num;
2. 运算符
数学运算符,逻辑运算符与 JavaScript 基本一致,无额外特殊情况。
字符串连接(拼接)采用的是比较特殊的 .
<?php $name = 'zce'; // 拼接 `hey ` 和 `zce` $message = 'hey ' . $name; // 相当于 += $foo .= $message
3. 语句
分号分割
if、switch、while、for、 foreach、function…
4. 流程控制
顺序结构
分支结构
if … else
switch … case
循环结构
for
while
foreach — 专门用来遍历数组
<?php $arr = array('name' => 'zhangsan', 'age' => '18'); foreach ($arr as $key => $value) { echo $key . ' ' . $value; }
指令式的 if、for、foreach、while 单独掌握
<?php // 指令式就是将开始 { 换成 : 结束 } 换成 endif; if ($i > 0) : echo 'ok' endif; // for foreach while 也是一样 for ($i = 0; $i < 10; $i++) : echo $i; endfor;
5. 函数
定义与使用函数的方式与 JavaScript 相同:
<?php // 函数名不区分大小写 function foo ($name, $title) { echo "$name ($title)"; } // 调用 foo('zce', 'UFO'); Foo('zgd', 'SBO'); // 大小写不区分
注意:使用方式有点差异(函数名不区分大小写),但是不要这么搞!!!
建议在 PHP 中采用下划线式(snake_case)做命名规则,不管是函数还是变量