PHP语法初步
PHP概念:PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种运行在服务器端的开源脚本语言,可以镶嵌到HTML中。
PHP文件:可以包含文本、HTML、JavaScript代码和PHP代码,PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器,默认文件扩展名是 ".php"。
PHP作用:
- 生成动态页面内容
- 创建、打开、读取、写入、关闭服务器上的文件
- 收集表单数据
- 发送和接收 cookies
- 添加、删除、修改您的数据库中的数据
- 限制用户访问您的网站上的一些页面
- 加密数据
PHP的优点:
- PHP 可在不同的平台上运行(Windows、Linux、Unix、Mac OS X 等)
- PHP 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等)
- PHP 提供了广泛的数据库支持
- PHP 是免费的,可从官方的 PHP 资源下载
PHP 脚本可以放在文档中的任何位置。PHP 脚本以 <?php 开始,以 ?> 结束。
PHP语句分隔符
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
//定义内容
<?php
$a=5;
echo "Hello World";
?>
特殊说明:
- PHP中标记结束符?>有自带语句结束符的效果,最后一行PHP代码可以没有语句分隔符。
- PHP中很多代码的书写并不是嵌入到HTML中,而是单独存在。
PHP注释
分类 | 行注释 | 块注释 |
符号 | // # |
/* */ |
解释 | //:后面跟的所有内容都是注释 | /**/:中间直到*/出现之前全部都是注释 |
PHP输出
在PHP中有两个最基本的输出方式:echo和print。
两者的区别:
/ | echo | |
输出字符 | 可以输出一个或多个字符串 | 只允许输出一个字符串 |
输出速度 | 较快 | 较慢 |
返回值 | 无返回值 | 返回值为1 |
echo
输出字符串:
<?php
echo "Hello World";
echo "1","2","3";
?>
输出变量:
<?php
$a=TFboys;
$team=array("Karry Wang","Roy Wang","Jackson Yee");
echo "$a";
echo "$a是一个实力派的唱跳组合";
echo "TFboys的队长是{$team[0]}";
?>
输出字符
<?php
print "TFboys是我最喜欢的一个组合";
?>
输出变量
<?php
$a=TFboys;
$team=array("Karry","Roy","Jackson Yee");
print "$a";
print "$a是一个实力派的唱跳组合";
print "TFboys的队长是{$team[0]}";
?>
PHP变量
变量概念:变量是用于存储数据的容器。
变量命名规则:
- 在PHP中变量名字必须以“$”符号开始;
- 名字由字母、数字和下划线“_”构成,但是不能已数字开头;
- 在PHP中允许中文变量(不建议);
- 变量名区分大小写;
- 变量名不能包含空格。
变量作用域
PHP 有四种不同的变量作用域:local、global、static、parameter。
序号 | 作用域 | 描述 |
1 | local |
局部作用域 |
2 | global |
全局作用域 |
3 | static |
静态作用域 |
4 | parameter |
函数参数作用域 |
PHP global 关键字
global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 为变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量,因此上面的代码也可以这样写:
static作用域
当一个函数完成时,它的所有变量会被删除。如果想要某个局部变量不被删除就需要使用static。
变量的使用
1.定义:在系统中增加对应的变量名字(内存中)
2.赋值:可以将数据赋值给变量名(可以在定义的同时完成)
3.可以通过变量名访问存储的数据
4.可以将变量从内存中删除
//定义变量:在PHP中不需要任何关键字定义变量(赋值)
$var1; //定义变量
$var2 = 1; //定义并赋值
//访问变量
echo $var2; //通过$var2变量名字找到存储的内容1,然后输出。
//修改变量
$var 2 = 2;
echo '<hr/>',$var2;
//删除变量:使用unset(变量名字)
unset($var2);
echo $var2;
预定义变量
预定义变量:提前定义的变量,存储许多需要用到的数据(预定义变量都是数组)
$_GET : 获取所有表单以get方式提交的数据
$_POST : POST提交的数据都会保存在此
$_REQUEST : GET和POST提交的都会保存
$GLOBALS : PHP中所有的全局变量
$_SERVER : 服务器信息
$_SESSION : session会话数据
$_COOKIE : cookie会话数据
$_ENY : 环境信息
$_FILES : 用户上传的文件信息
可变变量
可变变量:如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量;在变量前再多加一个$符号。
PHP常量
常量:const/constant,是一种在程序运行当中,不可改变的量(数据)。常量一旦定义,通常数据不可改变(用户级别)。
常量定义形式
1.使用define()函数:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
其中:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
常量名字的命名规则
- 常量不需要使用“$”符号,一旦使用系统就会认为是变量
- 常量名字由字母、数字和下划线组成,不能以数字开头
- 常量名字通常以大写字母为主(与变量进行区别)
- 常量命名规则比变量松散,可以使用一些特殊字符,该方式只能使用define定义
注意细节:
- define和const定义的常量有区别:在于访问权限的区别
- 定义常量通常不区分大小写,但是可以区分,可以参照define函数的第三个参数
示例:
1.区分大小写:
<?php
//区分大小写的常量名
define("TFBOYS","Good!!!");
echo TFBOYS;
echo'<br>';
echo tfboys
?>
2.不区分大小写:
<?php
//区分大小写的常量名
define("TFBOYS","Good!!!",ture);
echo TFBOYS;
echo'<br>';
echo tfboys
?>
常量是全局的
常量在定义后,默认是全局的,可以在整个运行脚本的任何地方使用。
系统常量
系统常量:系统帮助用户定义的常量,用户可以直接使用。
常用的几个系统常量:
PHP_VERSION:PHP版本号
PHP_INT-SIZE:整形大小
PHP_INT-MAX:整形能表示的最大值(PHP中整形是允许出现负数:带符号)
在PHP中还有一些特殊的常量,他们有双下划线开始+常量名+双下划线结束,这种常量称之为系统魔术常量:魔术常量的值通常会跟着环境变化,但是用户改变不了
--DIR--:当前被执行的脚本所在的电脑的绝对路径
--FILE--:当前被执行的脚本所在电脑的绝对路径
--LINE--:当前所属的行数
--CLASS--:当前所属的类
<?php
//文本中的当前行号
echo '这是第"'.__LINE__.'"行.<br>';
//文件的完整路径和文件名
echo '该文件位于 "'.__FILE__.'" <br>';
//文件所在的目录
echo '该文件位于"'.__DIR__.'"<br>';
//返回函数的名字
function TFboys(){
echo '函数名为:'.__FUNCTION__;
}
TFboys();
?>
PHP数据类型
数据类型:data type,在PHP中指的是存储的数据本身的类型,而不是变量的类型。PHP是一种弱类型语言,变量本身没有数据类型。
PHP支持八种数据类型:
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- Array(数组)
- Object(对象)
- NULL(空值)
- Resource(资源类型)
PHP字符串
一个字符串是一串字符串的序列,就像"Hello World",通常在输出文本时使用,用双引号或者单引号将文本包裹。
<?php
$x = "TFBOYS";
echo $x;
echo "<br>";
$x = 'very good!!!';
echo $x;
?>
PHP整型
在PHP中提供了四种整型的定义方式:十进制定义,二进制定义,八进制定义,十六进制定义
十进制:逢10进1,能够出现的数字时0-9;
二进制:逢2进1,能够出现的数字是0-1;
八进制:逢8进1,能够出现的数字是0-7;
十六进制:逢16进1,能够出现的数字是0-9以及a-f,a表示10,以此类推。
PHP浮点型
浮点类型:小数类型以及超过整形所能存储范围的整数(不保证精度),精度范围大概在15个有效数字左右。
浮点型定义有两种方式:
$f=1.23;
$f=1.23e10; //科学计数法,其中e表示10
PHP 布尔类型
布尔类型:两个值ture和false,通常是用于判断比较
PHP数组
数组可以在一个变量中存储多个值。
示例:
<?php
$a=TFboys;
$team=array("Karry","Roy","Jackson Yee");
?>
PHP对象
对象数据类型可以用于数据存储。
在PHP中,对象必须声明。
首先,使用class关键字声明类对象。类是可以包含属性和方法的结构。
然后在类中定义数据类型,在实例化的类中使用数据类型。
PHP NULL值
NULL值表示变量没有值,NULL是数据类型为NULL的值。
可以通过设置变量值为 NULL 来清空变量数据:
<?php
$x="Hello world!";
$x=null;
var_dump($x); //返回为NULL
?>
PHP运算符
PHP算数运算符
运算符 | 名称 | 描述 | 实例 | 结果 |
---|---|---|---|---|
x + y | 加 | x 和 y 的和 | 2 + 2 | 4 |
x - y | 减 | x 和 y 的差 | 5 - 2 | 3 |
x * y | 乘 | x 和 y 的积 | 5 * 2 | 10 |
x / y | 除 | x 和 y 的商 | 15 / 5 | 3 |
x % y | 模(除法的余数) | x 除以 y 的余数 | 5 % 2 10 % 8 10 % 2 |
1 2 0 |
- x | 取反 | x 取反 | <?php $x =2; echo -$x; ?> |
-2 |
a . b | 并置 | 连接两个字符串 | "Hi" . "Ha" | HiHa |
intdiv(a,b)(PHP7+版本) |
向下取整 | 第一个参数除于第二个参数的值并取整(向下取整) | var_dump(intdiv(10, 3)) | int(3) |
PHP赋值运算符
运算符 | 等同于 | 描述 |
---|---|---|
x = y | x = y | 左操作数被设置为右侧表达式的值 |
x += y | x = x + y | 加 |
x -= y | x = x - y | 减 |
x *= y | x = x * y | 乘 |
x /= y | x = x / y | 除 |
x %= y | x = x % y | 模(除法的余数) |
a .= b | a = a . b | 连接两个字符串 |
PHP 递增/递减运算符
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
-- x | 预递减 | x 减 1,然后返回 x |
x -- | 后递减 | 返回 x,然后 x 减 1 |
PHP 比较运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5==="5" 返回 false |
x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
x !== y | 绝对不等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!=="5" 返回 true |
x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
PHP逻辑运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) 返回 true |
x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==6 or y==5) 返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x==6 xor y==3) 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true |
x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 || y==5) 返回 false |
! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) 返回 true |
PHP数组运算符
运算符 | 名称 | 描述 |
---|---|---|
x + y | 集合 | x 和 y 的集合 |
x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
x != y | 不相等 | 如果 x 不等于 y,则返回 true |
x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
三元运算符
语法格式为: (expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
组合比较符(PHP7+)
语法:$c = $a <=> $b;
- 如果 $a > $b, 则 $c 的值为 1。
- 如果 $a == $b, 则 $c 的值为 0。
- 如果 $a < $b, 则 $c 的值为 -1。
错误抑制符
在PHP中有一些错误可以提前预知,但是这些错误可能无法避免,但是又希望不报错给用户看,可以使用错误抑制符处理。
@:在可能出错的表达式前面使用@符号即可。
//错误抑制符
$a = 10;
$b = 0;
@($a % $b); //正常情况下会报错,因为被除数不能为0,可以使用@错误抑制符
连接运算符
连接运算:是PHP中将多个字符串拼接的一种符号
. :将两个字符串连接到一起
.= :复合运算,将左边的内容与右边的内容连接起来,然后重新赋值给左边变量。
//连接运算符
$a = 'karry';
$b = 'wang';
echo $a . $b; //将变量a和b连接起来 ==> 结果是karry wang
$a .= $b; //可以理解成 $a = $a . $b;将a重新赋值
echo $a; //结果是karry wang
流程控制
控制分类
顺序结构:代码从上往下,顺序执行。(代码执行的最基本结构)
分支结构:给定一个条件,同时有多种可执行代码,根据条件执行某一代码 (if分支和switch分支)
循环结构:在某个控制范围内,指定的代码可以重复执行
PHP if 分支循环
If:如果的意思,给定一个条件,同时为该条件设置多种(两种)情况,然后通过条件判断来实现具体的执行段。
if语句
if (条件)
{
条件成立时执行的代码;
}
if...else语句
//if...else语句
if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
if...elseif...else语句
//if...elseif...else语句
if (条件)
{
if条件成立时执行的代码;
}
elseif (条件)
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
PHP switch 循环
switch:可以根据多个不同条件执行不同动作
(PHP中switch语句不遇到break不会自己转弯,所以break不可以漏掉)
while循环语句
//while 循环语句
while (条件)
{
要执行的代码;
}
do...while循环语句
do..while语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。
do
{
要执行的代码;
}
while (条件);
PHP for 循环
循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。
for循环
for:用于预先知道脚本需要运行的次数的情况
for (初始值;条件;增量)
{
要执行的代码;
}
参数:
初始值:初始化一个变量值,用于设置一个计数器
条件:循环执行的限制条件,ture:继续循环,false:循环结束
增量:用于递增计数器
foreach循环
用于遍历数组
foreach ($arry as $value)
{
要执行的代码;
}
函数
创建PHP函数
<?php
function functionName()
{
要执行的代码
}
?>
PHP函数准则:函数名称以字母或者下划线开头,不能以数字开头
添加函数
为了给函数增加更多的功能,可以添加函数,类似于变量,在括号内指定
实例1(一个参数)
<?php
function name($fname) //定义一个参数
{
echo $fname."Wang.<br>";
}
echo "my husband is ";
name("Karry "); //调用参数
echo "my husband's friend is ";
name("Roy ");
echo "my sister's husband is ";
name ("Yibo ");
?>
输出不同的名字,但是姓是相同的:
实例2(两个参数)
<?php
function name($fname,$str) //定义两个参数
{
echo $fname."Wang".$str."<br>"; //使用.连接两个参数
}
echo "my husband is ";
name("Karry ","♥"); //调用参数
echo "my husband's friend is ";
name("Roy ","!");
echo "my sister's husband is ";
name ("Yibo ","*");
?>
返回值
如果让函数返回一个值,需要使用return语句
实例
<?php
function team($leader,$member)
{
$TFboys=$leader."、".$member;
return $TFboys;
}
echo "TFboys = ".team("Karry Wang","Roy Wang、Jackson Yee");
?>
PHP面向对象
对象有三个特征:
对象的行为:对对象的操作
对象的形态:施加方法后对象如何相应
对象的表示:相当于身份证,具体区分在相同的行为与状态下有什么不同
比如animal就是一个抽象类,猫、狗就是具体的对象,有颜色属性,可以跑等行为状态
面向对象内容:
类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
对象 − 是类的实例。
成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可成为对象的属性。
成员函数 − 定义在类的内部,可用于访问对象的数据。
继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。
子类 − 一个类继承其他类称为子类,也可称为派生类。
多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
通过 TFboys类 创建了三个对象:Karry、Roy、Jackson。
$TFboys = new Karry ();
$TFboys = new Roy ();
$TFboys = new Jackson();
PHP类定义
<?php
class tfboys {
var $var1;
var $var2 = "constanr string";
function myunc ($arg1,$grg2){
}
}
?>
类使用class关键字后加类名定义
类名后的一对大括号{}内可以定义变量和方法
类的变量使用var来声明,变量也可以初始化值
函数定义类似PHP函数的定义,但函数只能通过该类及其实例化的对象访问
PHP中创建对象
类创建后,可以使用new运算符来实例化该类的对象
$Karry = new Site
$Roy = new Site
$Jackson = new Site
//创建了三个对象,他们都是各自独立的。
调用成员的办法
实例化对象后。可以使用对象调用成员方法,该对象的成员方法只能操作该对象的成员变量
PHP中创建对象
使用new运算符实例化类的对象:
$TFboys = new Karry ();
$TFboys = new Roy ();
$TFboys = new Jackson();
调用成员:
实例化对象后,可以使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量:
<?php
/* 定义一个类为TFboys */
class TFboys {
/* 成员变量 */
var $English; //在PHP中类的变量使用var来声明
var $Chinese;
/* 成员函数 */
function setEnglish($name1){ //定义一个函数setEnglish
$this->English = $name1;
}
function getEnglish(){
echo $this->English . PHP_EOL;
}
function setChinese($name2){
$this -> Chinese = $name2;
}
function getChinese(){
echo $this -> Chinese . PHP_EOL;
}
}
$leader = new TFboys; //创建类后,使用new实例化该对象
$member1 = new TFboys;
$member2 = new TFboys;
/* 调用成员函数,设置中文名字和英文名字 */
$leader->setEnglish("Karry Wang");
$member1->setEnglish("Roy Wang");
$member2->setEnglish("Jackson Yee");
$leader->setChinese("王俊凯");
$member1->setChinese("王源");
$member2->setChinese("易烊千玺");
//调用成员函数,获取中文名和英文名
$leader->getEnglish();
$member1->getEnglish();
$member2->getEnglish();
$leader->getChinese();
$member1->getChinese();
$member2->getChinese();
?>
PHP 构造函数
构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,在创建对象的语句中与new运算符一起使用
语法:
void __construct ([ mined $args [,$...]])
上面实例,通过构造放大来初始化$English和$Chinese变量可以这样写:
//这样写就可以不用调用setEnglish和setChinese方法了
function __construct($name1,$name2){
$this->English = $name1;
$this->Chinese = $name2;
}
析构函数
与构造函数相反,当对象结束声明周期时,系统自动执行析构函数
语法:
void __destruct ( void )
实例:
<?php
class MyDestructableClass{
function __construct() {
print "构造函数\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "销毁" . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
继承
使用关键字extends来继承一个类,PHP不支持多继承
语法:
class Child extends Parent {
//代码部份
}
实例:
Child_TFboys继承了TFboys类,并扩展了功能
//子类扩展站点类别
class Child_TFboys extends TFboys {
var $category;
function setCate($par){
$this->catgory = $par;
}
function getCate(){
echo $this->category . PHP_EOL;
}
方法重写
从父类继承的方法不能够满足子类的要求,可以对其进行改写,这个过程叫方法的覆盖,也叫方法重写
实例:
重写了getEnglish和getChinese方法
<?php
function getEnglish(){
echo $this->English . PHP_EOL;
return $this->English;
}
function getChinese(){
echo $this->Chinese . PHP_EOL;
return $this->Chinese;
}
?>
访问控制
PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
- public(公有):公有的类成员可以在任何地方被访问。
- protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
- private(私有):私有的类成员则只能被其定义所在的类访问。