- PHP 标记
-
?> 可以让代码退出“PHP 模式”
这是一个包含 PHP 脚本的网页这是一个包含 PHP 脚本的网页
这里原封不动的输出
<?php // 这里是 PHP 代码,必须满足 PHP 语法 $foo = 'bar'; echo $foo; ?> <p>这里也不变</p> <p><?php echo '<b>这还是 PHP 输出的</b>'; ?></p> 复制代码
类似于在 HTML 中使用 JavaScript,但是不同的是 JavaScript 运行在客户端,而 PHP 运行在服务端。
只有处于 PHP 标记内部的代码才是 PHP 代码,PHP 标记以外都原封不动。
- 省略结束标记
如果 PHP 代码段处于整个文件的末尾,建议(可以)删除结束标记,这样不会有额外的空行产生。
- 输出内容方式
- echo: <?php // echo 是 PHP 中的一个特殊的“指令”, // 不一定需要像函数那样通过
()
去使用 // 注意:echo 后面紧跟着一个空格 echo 'hello php'; echo 'hello', 'world'; // =>helloworld
- print: <?php // print 与 echo 唯一区别就是只能有一个参数 print 'hello php'; // print 'hello', 'world'; // => Parse error: syntax error ...
- var_dump: <?php // var_dump 是一个函数,必须跟上 () 调用 // 可以将数据以及数据的类型打印为特定格式 var_dump('hello php'); // => 'string(9) "hello php"'
还有一些输出函数(可以通过查手册自学,用到再说),例如:exit() / print_r() 等等
- PHP与 HTML 混编
- 普通嵌入
- 语句混编 = 18) { ?>
成年人
小朋友
还可以这样: 18): ?>成年人
小朋友
- 注释
你可以在代码中添加注释,从而增强我们代码的可阅读性。PHP 中注释有两种方式(与 JavaScript 相同):
- 单行注释 <?php // 这是一条单行注释 # 井号也可以做注释(不要用,有点生僻) $foo = 'hello';
- 多行注释 <?php /* ...... 这里可以添加任意行数的注释内容 ...... */ $foo = 'hello';
- 语法
编程语言常见的语法:
- 变量 —— 用于临时存放数据的容器
- 顺序结构 —— 先干什么再干什么
- 分支结构 —— 如果怎样就怎样否则怎样
- 循环结构 —— 不断的做某件相同的事
- 函数 —— 提前设计好一件事怎么干,然后想什么时候干就什么时候干
- 运算符 —— 数学运算和字符串拼接
- 字面量 —— 在代码中用某些字符组成,能够表达一个具体的值 这些字符之间表示数据的方式叫做字面量
PHP 也是另外种编程语言,作为另外一种编程语言,PHP 也具备着绝大多数语言都有的特点,例如变量、条件分支、循环、函数等等,不同的是每个语言都会有自己的语法规定。这里不用太过担心,这些语法规定与之前学习的编程语言大同小异,对我们来说不会有太大的压力。
以下是重点注意的问题:
- 变量
- 双引号字符串和单引号字符串的差异
- 指令式的语法
- foreach
- 函数作用域问题
- 字符串拼接
- 变量
变量是编程语言中临时存放数据的容器。
PHP 中申明一个变量是用一个美元符号后面跟变量名来表示。变量名同样是区分大小写的。
PHP 中变量无需声明类型,变量的类型根据值的类型来推断。
<?php
$foo; // 申明一个变量,变量名为 `foo`,未对其进行赋值
$bar = 'baz'; // 申明一个变量,将一个值为 `baz` 的字符串赋值给它
echo $foo; // 输出一个变量名为 `foo` 的变量
fn($bar); // 将一个变量名为 `foo` 的变量作为 `fn` 的实参传递
复制代码
① 常用函数
- isset():判断变量是否定义了,同时它还可以判断变量的值是否为null,如果定义了且值不为null,则返回true,否则返回false
- empty():判断变量是否为空值,为空的值有:"" 0 "0",null,false,array().如果值为以上中的某一个,则返回值
- unset():删除变量
- 如果删除一个变量,那么变量的值会置为null
- 可以同时删除多个变量
- 如果在函数中删除全局变量,那么并不会真正的将全局变量删除(以后再说)
- 数据类型(了解)
常见的 PHP 数据类型与 JavaScript 基本一致:
- string(字符串) **
- integer(整型)—— 只能存整数
- float(浮点型)—— 可以存带小数位的数字
- boolean(布尔型)
- array(数组) **
- object(对象)
- NULL(空)
数据类型的分类:
- 基本数据类型:string(字符串) integer(整型) float(浮点型) boolean(布尔型)
- 复合数据类型: array(数组) object(对象)
- 特殊数据类型:NULL(空) 资源
判断数据类型:
- is_string():判断当前变量是否是字符串类型
- is_bool():判断当前变量是否是布尔类型
- is_int():判断当前变量是否是整形类型
- is_float():判断当前变量是否是浮点类型
- is_array():判断当前变量是否是数组类型
- is_object():判断当前变量是否是对象类型
① 字符串(重要)
PHP 有多种创建字符串的方式:单引号、双引号等。
- 单引号字符串
- 不支持特殊的转义符号,例如 \n
- 如果要表示一个单引号字符内容,可以通过 ' 表达
- 如果要表示一个反斜线字符内容,可以通过 \ 表达
- 双引号字符串
-
支持转义符号:" \ $ \r \n \t
-
支持变量解析
`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 中数组可以分为两类:
-
索引数组 与 JavaScript 中的数组基本一致 <?php // 定义一个索引数组 arr);
// PHP 5.4 以后定义的方式可以用 `[]` $arr2 = [1, 2, 3, 4, 5]; var_dump($arr2); 复制代码
-
关联数组 有点类似于 JavaScript 中的对象 <?php // 注意:键只能是
integer
或者string
arr);// PHP 5.4 以后定义的方式可以用 `[]` $arr2 = ['key1' => 'value1', 'key2' => 'value2']; var_dump($arr2); 复制代码
- 数据类型转换
方法:变量名前面加一个括号,在括号里面指定需要转换后的类型
格式: (类型)$变量名
<?php
$str = '132';
// 将一个内容为数字的字符串强制转换为一个整型的数字
$num = (int)$str;
// 将一个数字强制转换为布尔值
$flag = (bool)$num;
复制代码
- 运算符
数学运算符,逻辑运算符与 JavaScript 基本一致,无额外特殊情况。
注意:PHP中,字符串连接(拼接)采用的是比较特殊的 点号.
<?php
$name = 'zce';
// 拼接 `hey ` 和 `zce`,
$message = 'hey ' . $name;
// 相当于 +=
$foo .= $message
复制代码
- 语句
- 分号分割
- if、switch、while、for、 foreach、function......
- 流程控制
- 顺序结构
- 分支结构
- 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;
复制代码
- 函数
定义与使用函数的方式与 JavaScript 相同:
<?php
// 函数名不区分大小写
function foo ($name, $title) {
echo "$name ($title)";
}
// 调用
foo('zce', 'UFO');
Foo('zgd', 'SBO'); // 大小写不区分
复制代码
注意:使用方式有点差异(函数名不区分大小写),但是不要这么搞!!!
建议在 PHP 中采用下划线式(snake_case)做命名规则,不管是函数还是变量
- 特性--作用域和常量
- 变量作用域
关于变量作用域这一点,PHP 与绝大多数语言也都不同:默认函数内不能访问函数所在作用域的成员。
在 JavaScript 中,我们可以在函数作用域中使用父级作用域中的成员:
var top = 'top variable'
function foo () {
var sub = 'sub variable'
console.log(top)
// => `top variable`
function bar () {
console.log(top)
// => `top variable`
console.log(sub)
// => `sub variable`
}
bar()
}
foo()
复制代码
而在 PHP 中:
<?php
$top = 'top variable';
function foo () {
$sub = 'sub variable';
echo $top;
// => 无法拿到
function bar () {
echo $top;
// => 无法拿到
echo $sub;
// => 无法拿到
}
bar();
}
foo();
复制代码
如果需要访问全局变量,可以通过 global 关键字声明:
<?php
$top = 'top variable';
function foo () {
// 声明在当前作用域中获取全局作用域中的 `$top`
global $top;
$sub = 'sub variable';
echo $top;
// => `top variable`
function bar () {
// 声明在当前作用域中获取全局作用域中的 `$top` 和 `$bar`
global $top, $bar;
echo $top;
// => `top variable`
echo $sub;
// => 任然无法拿到,因为 `$sub` 不再全局范围,而是在 `foo` 函数中定义
}
bar();
}
foo();
复制代码
- 超全局变量
www.w3school.com.cn/php/php_sup…
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
九大超全局变量是:
- $GLOBALS — 引用全局作用域中可用的全部变量
- $_SERVER — 获取服务端相关信息
- $_REQUEST — 获取提交参数
- $_POST — 获取 POST 提交参数
- $_GET — 获取 GET 提交参数
- $_FILES — 获取上传文件
- $_ENV — 操作环境变量
- $_COOKIE — 操作 Cookie
- $_SESSION — 操作 Session
本节会介绍一些超全局变量,并会在稍后的章节讲解其他的超全局变量。
- $GLOBALS
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
下面的例子展示了如何使用超级全局变量 $GLOBALS:
<?php
$x = 75;
$y = 25;
function foo () {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
foo();
echo $z;
// => 100
复制代码
- 常量定义与使用
常量跟变量一样也是一个数据容器,但是不同的是一旦申明过后就不允许被修改。
① 定义常量
<?php
// 定义常量使用的是内置的 `define` 函数
// 第一个参数是常量的名称,建议采用全大写字母命名,多个单词下划线分隔
// 第二个参数是常量中存放的数据,可以是任意类型
// 第三个参数是常量名称是否区不分大小写,默认 false 区分大小写
define('SYSTEM_NAME', '阿里百秀');
define('SYSTEM_ENABLE', true);
复制代码
② 使用常量
<?php
// 直接通过常量的名称访问常量
// 与变量不同的是不需要用 $
echo SYSTEM_NAME;
echo SYSTEM_ENABLE;
复制代码
- 载入其他文件
通常情况下,当一个文件中的代码过长,自然会想到要拆分到多个文件中。随着开发经验的积累,慢慢的会发现,除了文件过程应该拆分文件,更应该做的事情是根据用途去划分。
不管你是怎样想的,核心问题都是一样:怎么将代码拆分到多个文件中?
PHP 中引入其他 PHP 文件有四种方式:
- require
- require_once
- include
- include_once
四种方式的对比:
require require_once include include_once
复制代码
被载入文件如果不存在是否影响继续运行 Y Y N N
多次调用是否会重复执行被载入的文件 Y N Y N
总结来说:
- 横向分为两类:require 和 include 两种,区别在于 require 会因为载入文件不存在而停止当前文件执行,而 include 不会。
- 纵向分为两类:xxx 和 xxx_once,区别在于代码中每使用一次 xxx 就执行一次载入的文件,而 xxx_once 只会在第一次使用是执行。
使用层面:
- include 一般用于载入公共文件,这个文件的存在与否不能影响程序后面的运行
- require 用于载入不可缺失的文件
- 至于是否采用一次载入(once)这种方式取决于被载入的文件
- 常用 API(函数)
API(Application Programming Interface)
接口都是提供某种特定能力的事物,特点是有输入有输出,而我们在开发时(写代码时)用到的接口称之为 API(应用程序编程接口)
任何编程语言本身并没有太多的能力,具体的能力大多数都来源于 API。
PHP 的能力来源于它有 1000+ 内置函数,不是每一个函数都默认直接可以使用,有一些需要安装或者启用额外的"插件" 扩展
- 字符串与数组处理
字符串与数组操作均使用php提供的内置函数,这里仅以几个函数作为示例,后面会有单独的部分进行讲解。
字符串函数
- int strlen ( string $string ) 求字符串的长度,也就是字符串中,字符的个数
- mixed mb_strlen ( string str [, string encoding = mb_internal_encoding() ] )
数组长度
- count()
- 时间处理
事件处理默认采用格林威治时间(与中国所在的时区相差8个小时),需要进行设置。
这里我们要修改php的配置文件,
- 时间戳:time()
- 从 Unix 纪元(格林威治时间 1970-01-01 00:00:00)到当前时间的秒数
- 格式化日期:date()
- 获取有格式的当前时间
- 格式化一个指定的时间戳
- 可以通过 strtotime() 将有格式的时间字符串转换为时间戳
- 文件操作
函数 描述 PHP file_get_contents() 将文件读入字符串。 4
file_put_contents() 将字符串写入文件。 5