【一】基本语法概述
对于一看就懂的也要亲自动手操作,不要骗自己,写不出来代码就是不会!!!
内容列表:
【三】变量
【四】输出显示命令
【五】注释
【六】数据类型
【七】数据类型的查看与判断
【八】数据类型的转换
【九】常量
【十】变量
【十一】变量引用
【十二】表达式与运算符
【二】第一段PHP代码
www文件下新建文档demo.php,输入代码
1 <?php 2 phpinfo(); 3 ?>
保存运行后,查看效果即可看到PHP相关信息的列表
<?php为PHP开始
?>为PHP结束
代码解析:phpinfo()函数,解析当前电脑的PHP相关详细信息
【三】变量
1. 在相同作用域里,变量拥有覆盖性。即后面的变量会覆盖之前的变量,例如
<?php $a = 1; $b = 2; $a = 2; echo $a+$b; ?>
输出结果为4,因为变量$a重置覆盖了。
2. 变量特点:
①赋值性,$a = 5;将5赋值给a
②覆盖性;
③变量必须以$符开头;
④$后不能以数字开头;
⑤区分大小写;
⑥禁止使用特殊字符;
⑦变量名要有意义,便于交流理解;
【四】输出显示命令
共有三种 echo(); print_r(); var_dump();
输出值:print_r();
正常输出echo();
输出数据类型:var_dump(),会输出数据类型和长度。 一般是开发的人看的,它输出更多的信息。
注意:echo 和 print_r 只是输出基本信息,不会输出结构,一般用于返回信息给用户看。
输出字符串时需要加"",这里注意中文都是字符串
可以输出整型,字符串,变量
【五】注释
作用:1. 对重点进行标注解释;2. 方便查找;3. 通俗易懂;4.生成文档
分类:
1. 单行注释//
//$name = "Tony";
2. 单行注释#
#$name = "Tony";
3. 多行注释/* */
/* $name = "Tony";
$name = "Tony-One" */
【六】数据类型
数据类型分为标准数据类型和复合数据类型
标准数据类型:整型,浮点型,布尔值,字符串,null。
复合数据类型:数组,对象
新类型:资源数据类型
下面列举几个介绍下
1. 布尔值:一般程序里1位true,0为false
2. 字符串:
声明方法有3种:
①单引号声明'name'
②双引号声明"name"
③定界符 / 字界符:在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。
字符串拼接用 . 即可,
3. 字界符 / 定界符实例:
注意:边界符也可以解析变量
<?php $main = <<< ETO 我是二年级<br> 三班<br> 学习委员 ETO; echo $main; ?>
4. 单引号与双引号区别:
①双引号解析变量,单引号不能解析变量,例如
<?php $name = "Tony"; $info = "我的名字叫 $name"; echo $info; ?>
双引号可以解析变量$name,所以可以输出结果--我的名字叫Tony。但是单引号无法解析变量,所以会输出---我的名字叫$name
②双引号可以解析转义字符,而单引号不能。边界符也可以解析变量
转义字符,例如HTML实体字符<和>,转义为< 和 >,举例:
<?php $name = "Tony"; $info = "我的名字叫<$name>"; echo $info; ?>
③单引号效率略高于双引号;
④可以互插,当双引号里插入带有变量的单引号时,会解析出变量
5. null类型
函数null的三种情况①给变量赋值为null,例如$name = null; ②变量没有赋值,例如$name; ③通过unset()销毁变量
<?php $value = null; var_dump($value); ?>
输出结果为NULL
接下来介绍3个与NULL相关的函数empty(),unset()和inset()
①empty()函数判断是否为空,若为null空或者false返回true,否则返回false。例如
<?php $value = null;//或者为0false / 1true if(empty($value)){ echo "为空,执行真区间"; }else{ echo "不为空,执行假区间"; } ?>
②inset()函数,传入一个或多个变量,变量用逗号分开。只要有一个为null,则返回false,否则返回true
可以与empty()对比,区别在于inset()可以传入多个变量,同时判断多个,出现null情况时返回false,与empty()正好相反.
只要传入的不是空,则返回true
<?php $value1 = false; $value2 = 1; $value3 = null; if(isset($value1,$value2,$value3)){ echo "执行真区间"; }else{ echo "执行假区间"; } ?>
③unset()函数,销毁变量,返回null,例如上个例子修改
<?php $value1 = false; $value2 = 1; $value3 = null; unset($value1); if(isset($value1,$value2,$value3)){ echo "执行真区间"; }else{ echo "执行假区间"; } ?>
这里我用unset()销毁了$value1变量,所以$value变为null,那么isset()里传入null后会执行else代码块
6. 复合数据类型---对象,数组
所谓复合类型,就是一个类型里可以同时存入多种数据类型(字符串,整型,浮点,布尔值等)
7. 资源类型
打印结果只会显示单词resource,而不会显示出其他信息。
具体包含①Word,excel等文件;②图片;③音乐;④电影;⑤网页;⑥数据库等
资源就是操作可见和不可见的文件,网络和数据。以后会经常设计到操作图片和网络
【七】数据类型的查看与判断
(1)查看数据类型
① 查看数据类型:gettype(),对应强制转换数据类型settype(val,type)
获得变量的类型,例如输出string
<?php $name = "Tony"; echo gettype($name); ?>
②查看数据类型和值:var_dump()
传入一个变量,输出变量类型和值,例如输出string(4) "Tony"
<?php $name = "Tony"; echo var_dump($name); ?>
(2)判断数据类型
PHP在判断数据类型上很智能,使用is_系列函数。
is_types系列函数可以判断数据类型,返回布尔值boolean,即只会返回true或false
如果是则返回true,否则返回false
例如:
<?php $name = "Tony"; echo is_string($name);//判断类型---为真所以返回1 var_dump($name);//检验类型----string(4) "Tony" ?>
is_types系列的列表:
整型is_init();浮点型is_float();布尔值is_bool();字符串is_string();数组is_array();对象object();是否为空is_null();
资源is_reource();标量is_scalar();数字is_numeric();函数is_callable();
【八】数据类型的转换
数据类型转换包含自动转换与强制转换
PHP在5.x版本是弱类型的编程语言。弱类型就是在声明变量时,不需要指定变量的类型。意思是如果我要声明一个变量,不用在前面加上类型
PHP在7.0版本开始,可以强制指定类型来声明变量,也可以不用
1. 布尔值的自动类型转换
自动类型转换:就是数据类型在某些情况下自动变为其他类型参与运算
转换时机:运算和判断时,某些值会自动转换
自动转换情况:
①整型的0为假,其他为真;②浮点型0.0为假,其他为真;③空字符串为假,含有空格为真;
④字符串的0为假,其他为真;⑤空数组为假,里面有值为真;⑥空null为假;⑦未声明成功的资源为假。
案例:字符"0"自动转化为整型0
<?php $float = "0"; if($float){ echo "真"; }else{ echo "假"; } ?>
2. 其他类型的自动类型转换
布尔值--->整型,浮点型
字符串--->整型,浮点型
3. 强制类型转换
强制类型转换有三种方式:
(1)intval(),floatval(),strval()
(2)变量前加(),里面加上类型,转化后赋值给其他值
(3)settype(变量,类型)直接改变变量本身
(1)案例:整型转化为字符型strval()
<?php $value = 123; $valueStr = strval($value); var_dump($valueStr); ?>
(2)案例:整型转化为字符型,变量前加(),里面加上类型,转化后赋值给其他值
<?php $value = 123; $valueStr = (string)$value; var_dump($valueStr); ?>
(3)整型转化为字符型,settype(变量,类型)直接改变变量本身
<?php $value = 123; $valueStr = settype($value, 'string'); var_dump($value); ?>
强制转换时情况:
①空转整型时会转为0;②空转为浮点型时转为0;③空转为字符串会转为空字符串;④浮点123.0转为字符串123;
⑤settye("变量","null")等价于unset();
【九】常量
(1)常量
使用范围:定义工作目录,账号密码,版本号
简介:不变的量
定义:define(常量名,常量值)
注意:①常量名通常大写;②常量名通常加引号;③调用常量时不能用引号包裹;④常量名只建议用字母或下划线;
<?php define("NAME", 'Tony'); echo "我的名字是".NAME."<br>";
//我的名字是Tony echo "我的名字是NAME";
//我的名字是NAME ?>
(2)系统内置常量
LINE:当前所在行;FILE:当前文件所在服务器的路径;FUNCTION:当前函数名;CLASS:当前类名;
METHOD:当前成员方法名;PHP_OS:PHP运行的操作系统;PHP_VERSION:PHP版本;
TRAIT:Trait特征的名字,PHP5.4新加;DIR:文件所在目录;NAMESPACE:当前命名空间的名称(区分大小写);
(3)defined()函数来做安全机制
defined()主要为了防止他人绕过安全检查文件
语法:defined(常量)
作用:向函数后面传入常量,如果常量定义了就返回true,否则返回false
(4)defined()与define()区别
define--->定义一个常量
defined--->检查某个名称的常量是否存在
define("CONSTANT", "Hello world."); if (defined('TEST')) { echo TEST; }
(5)常用场景
define与defined的组合最常见的场景是,可以用来控制文件的访问权限。比如,我们不希望一个模板文件被直接通过链接地址被别人访问。我们可以在每个模板文件头写代码控制
【十】变量
(1)可变变量
可变变量就是在已经声明的变量前再加上变量符$,例如:
<?php $value = "name"; $name = "Tony"; echo $$value; ?>
对于echo $$value来说,解析了两次变量,第一次解析为$name,然后打二次解析$name为输出结果Tony
(2)外部变量
外部变量就是在使用过程里规定的变量
(3)超全局变量
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
这些超全局变量是:
$_COOKIE:得到会话控制里cookie传值;$_GET:得到get传值结果;$_POST:得到post传值结果;
$_SESSION:得到会话控制力session传值;$_FILES:得到文件上传结果;$_REQUEST:即能得到post传值,又能得到get传值
(4)环境变量(也是超全局)
环境变量主要用到$_SERVER和$_ENV两个环境变量,不过$_ENV逐渐被新版本废弃了
查看环境需要用到phpinfo();
$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息
常用的几个环境变量名:
①$_SERVER['PHP_SELF']:返回当前执行脚本的文件名;②$_SERVER['REQUEST_METHOD']:返回当前页面请求方法get / post
③$_SERVER['REQUEST_URI']:返回当前页面的URI;④$_SERVER['SERVER_SOFTWARE']:返回用的哪种服务器;
⑤$_SERVER['REMOTE_ADDR']:返回浏览当前页面的用户的 IP 地址;⑥$_SERVER['SERVER_ADDR']:返回当前运行脚本所在的服务器的 IP 地址;
⑦$_SERVER['SCRIPT_FILENAME']:返回当前执行脚本的绝对路径;⑧$_SERVER['SCRIPT_NAME'] :返回当前脚本的路径;
⑨$_SERVER['HTTP_USER_AGENT']:当前访问这个网址的电脑和浏览器的情况;
⑩$_SERVER['HTTP_REFERER']:上级来源(用户从哪个地址进入当前网页的);
⑪$_SERVER['REQUEST_TIME']:返回请求开始时的时间戳(例如 1577687494);
(5)静态变量static
特点:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化。
场景:例如想统计函数被多次调用的次数,可以在函数内部定义一个静态变量,从而保证变量不会在每次加载时被初始化
<?php
function demo(){
static $num = 0;
$num++;
echo "我被调用了".$num."次<br>";
}
demo();
demo();
demo();
?>
原理:静态变量的值在计算机内存会自动保存;而正常变量的值在使用完之后便销毁
【十一】变量引用
(1)简单引用
<?php $a = 1; $b = $a;
$b = 2; echo "a的值是$a".",b的值是$b"; ?>
输出结果:a的值是1,b的值是2
(2)公用地址引用
还是上面的例子,我对$b = $a加修改,改为$b = &$a
<?php $a = 1; $b = &$a; $b = 2; echo "a的值是$a "." ,b的值是$b"; ?>
输出结果会变为a的值是2,b的值是2
原因解析:$b = &$a会使得$a和$b共用一个内存地址
【十二】表达式与运算符
(1)算术运算符
+,-,*,/,%,=
注意:①=是赋值,==是比较;②优先级:先乘除,后加减,有括号先执行小括号
(2)自加自减运算
$a++:先赋值后运算;++a:先运算后赋值
(3)赋值运算符
如$a = 5就是将右边的5赋值给左边的变量$a
还有+=,-=,*=,/=,%=
(4)比较运算符
等于==;全等===;
不等于!=;不全等于!==;不等于<>
大于>;小于<;大于等于>=;小于等于<=;
(5)逻辑运算符:与或非
与:&&,and 或:||,or 非:!,xor
xor异或的用法:
例如计算21 xor 2的结果?
先将21二进制,然后计算,具体以后再论
(6)位运算
位运算在开发里用的极少,了解即可,基本为进制运算
(7)三元运算符和其他运算符
1. 三元运算符
相当于if..else结构,不过写法上更加简洁
语法:$x?"真代码块":"假代码块";,举个例子
<?php $a = 3; $b = 4; echo $a>$b?"条件为真":"条件为假"; ?>
分析:因为3不大于4,所以执行第二条代码块。
2. 其他运算符
①=>数组下标访问符;
②->对象访问符;
<?php //向obj对象里追加了一个成员属性username $obj -> username = "Tony"; echo $obj -> username; ?>
③instanceof判断某个对象是否来自某个类,是则返回true,否则返回false
<?php $obj = new StdClass();//实例化一个对象 if($obj instanceof StdClass){//判断某对象是否由某个类实例化 echo "真"; }else{ echo "假"; } ?>
④反引用的本质就是在操作系统执行该命令
(8)字符串运算符
串接和串接赋值
<?php $a = "Hello"; $b = $a . " world!"; echo $b; // 输出 Hello world! $x="Hello"; $x .= " world!"; echo $x; // 输出 Hello world! ?>
【拓展】流程控制
1. if..else..
举个例子:结合布尔值和条件判断
$value = 0; if($value){ echo "布尔值为真"; }else{ echo "布尔值为假"; }
代码解析:因为$value设为0,而boolean值为1时真,为0时假。所以这里会输出布尔值为假
【总结】
1. 文件命名禁止中文,不要加空格,区分大小写;
2. 销毁变量用unset();检验单个变量是否为空empty(),为空则返回true;检验多个变量是否为空isset(),为空则返回false;
3. 输出数据类型var_dump(),该函数还会打印出字节数,UTF-8里一个中文为3个字节;
4. form表单的action未填写时默认提交到本页
.