[PHP学习笔记]php入门教程之一周学会PHP
教程:php入门教程之一周学会PHP
链接:https://www.php.cn/code/4800.html
第3章 php基本语法
3-03 PHP变量特点
我们在PHP中的变量也是如此。不过有几个特点:
- 必须要以$开始。如变量x必须要写成$x;
- 变量的首字母不能以数字开始;
- 变量的名字区分大小写;
- 变量不要用特殊符号、中文,_不算特殊符号;
- 变量命名要有意义(别写xxx,aaa,ccc这种 变量名)。
3-04 echo 显示命令
echo 是在PHP里面最常用的一个输出、显示功能的命令。
我们可以让他显示任何可见的字符。
<?php echo 123; ?>
3-05 php注释
单行注释
// 表示单行注释 # #号也表示单行注释,用的比较少
多行注释
/* 多行注释 这里是注释区域代码 */
3-07 php整型就是整数
10进制声明:
<?php //为了方便大家记忆和前期学习,英文不好的朋友也可用拼音来声明变量。以后再用英文来声明变量也无所谓 //声明变量 整数,英文 int //$int = 1000; $zhengshu = 1000; echo $zhengshu; ?>
8进制声明: 以0开始,后面跟0-7的整数(了解知识点)
<?php //8进制的取值范围最大为0-7,即0,1,2,3,4,5,6,7 $bajingzhi = 033145; echo $bajingzhi; ?>
16进制声明: 以0x开始,后面跟0-f的,0x的abcdef不区分大小写。(了解知识点)
<?php //16进制的取值范围最大为0-f,即0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f $shiliu = 0x6ff; echo $shiliu; ?>
本章学习重点,学会如何声明10制制整数即可。了解8制制和16进制的声明,实在不会也不要紧。
3-08 php数据类型之布尔
布尔类型就是:真和假。
在英文把真和假翻译过来就是:
- true(真)
- false(假)
3-09 php数据类型之字符串
字符串就是所有我们可见和不可见的字符,就是我们日常当中说的话。
在PHP语言中声明字符串有三种方式:
- 用单引号声明
- 用双引号声明
- 用字界符声明(需要输入非常大段的字符串时使用)
字界符声明
- 在变量后面的等号写三个小于号(<<<)。
- 然后在<<<后面写上字符(建议英文大写字符)。如下例中的:ABC
- 然后换行写上任意想写的字符
- 写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。如下例中的:ABC;
<?php $dingjie = <<<ABC 如果 非要在这个滚犊子 前 面<br /> 加上一段 <i>距离的话</i> 我想说:<h1>思想有多远,你就跟我滚多远</h1> ABC; ?>
那双引号和单引号有什么区别呢?
【重要知识点】PHP面试题中,高概率面试题(建议背诵并实验三遍以上)
- 双引号解析变量,但是单引号不解析变量。
- 在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。
一定要在变量后面接上特殊字符,例如空格等分开。 - 如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
- 双引号解析转义字符,单引号不解析转义字符。但,单引号能解析' 和\
转义符号
- 单引号效率高于双引号,尽可能使用单引号
- 双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。
- 神奇的字符串拼接胶水——(.)点,用来拼接字符串。✔
- 我们将定界符声明字符串视为双引号一样的功能来看待。
下面是针对第3点的举例:
<?php $php = 'php中文网'; //中间加了空格哟 $str = "{$php}aaaa"; echo $str; ?>
针对第6点举例代码如下:
<?php $legend = '猛虎'; $NoAlike = "心有'$legend',细嗅蔷薇"; echo $NoAlike; ?>
3-11 php流程控制之if else语法
我们将if和if...else组合成了四种基本语法,每一种都必须背下来。
<?php if(布尔条件) 布尔值为真(true)时执行,只能写一行代码; ?> <?php if(布尔条件) 布尔值为真(true)时执行,只能写一行代码; else 布尔值为假(false)时执行,只能写一行代码; ?>
<?php if(布尔条件){ 布尔值为真(true)时执行,可写多行代码; } ?> <?php if(布尔条件){ 布尔值为真(true)时执行,可写多行代码; }else{ 布尔值为假(false)时执行,可写多行代码; } ?>
3-12 php数据类型之 NULL类型
空在英文里面表示是null,它是代表没有。空(null)不是false,不是0,也不是空格。
【重点】知道null产生的三种情况,学习empty 和 isset两个函数的区别。
主要有以下三空情况会产生空(null)类型:
- 通过变量赋值明确指定为变量的值为NULL
- 一个变量没有给任何值
- 使用函数unset()将变量销毁掉
empty()可以向括号中间传入一个变量。这个变量的值如果为false或者为null的话,返回true。
isset()可以向括号中间传入一个或者多个变量,变量与变量间用逗号分开。只要有有一个变量为null,则返回false。否则,则返回true。
3-13 php数据类型之数组
数组的英文叫array。
<?php //定义$shu这个变量 //数组声明是向array里面插入一个或者多个值 //一个或者多个值用逗号分开 $shu = array(1,2,3); ?>
3-14 php数据类型之资源类型
资源类型很多初学者觉得比较难以理解。因为资源类型打印出来只能够看到一个英文的resource。其他的什么在电脑上都不能显示出来,而他有客观存在。
3-15 php数据类型之查看和判断数据类型
查看数据类型
- gettype(传入一个变量) 能够获得变量的类型
- var_dump(传入一个变量) 输出变量的类型和值
判断数据类型
我们使用is_* 系列函数。 is_types这一系列的函数,来进行判断某个东西是不是某个类型。如果是这个类型返回真,不是这个类型返回假。
is_int 是否为整型
is_bool 是否为布尔
is_float 是否是浮点
is_string 是否是字符串
is_array 是否是数组
is_object 是否是对象
is_null 是否为空
is_resource 是否为资源
is_scalar 是否为标量
is_numeric 是否为数值类型
is_callable 是否为函数
<?php //is_* 系列函数有个特点,就是如果是这个类型就返回的是真。不是这个数据类型就返回的是假 //声明类型为假 $fo = false; if(is_bool($fo)){ echo '执行真区间'; }else{ echo '执行假区间'; } ?>
注:is_types 很好记。is_ 在前后面跟类型即可。
变量:整型(int) 浮点(float)、布尔(bool)、字符串(string)
混合类型: 数组(array)、对象(object)
特殊类型:空(null)、 资源(resouce)、回调(callback)
3-16 php数据类型之自动转换和强制转换
【默写级别】布尔值的自动类型转换、强制类型转换的英文单词
布尔值的自动类型转换
自动类型转换,就是数据类型在某些情况下,自动会变为其他的类型参与运算。自动类型转换的发生时机是:运算和判断的时候某些值会自动进行转换。
下面的情况是布尔值判断时的自动类型转换:
- 整型的0为假,其他整型值全为真
- 浮点的0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
- 空字符串为假,只要里面有一个空格都算真。
- 字符串的0,也将其看作是假。其他的都为真
- 空数组也将其视为假,只要里面有一个值,就为真。
- 空也为假
- 未声明成功的资源也为假
我们针对以上针理的规则一项一项来做实验看看结果。
3-17 对象
- 知道对象是一个复合类型
- 对象的英文叫object,var_dump一个变量的时候看到的类型为object的,这个变量就是对象类型
所谓复合类型:就是在一个类型中可以同时存入字符串、浮点、整型、布尔等
3-18 php常量和变量之用常量限制用户跳过某些文件
常量在代码中的定义、书写方式:
define(常量名,常量值)
注:
- 常量值只能为上一章中我们讲到的标量。
- 常量名可以小写,但是通常大写
- 常量名可以不加引号,但是通常加上引号。
- 在字符串中调用常量的时候,必须在引号外面
- 常量名建议只用字母和下划线
我们用代码来实验一下:
1.定义和调用一次常量试试
<?php define('MY_NAME','PHP中文网'); echo MY_NAME; //下面是错误的调用方式 echo '我的名字是MY_NAME'; //正确的调用方式该这么写 echo '我的名字是' . MY_NAME; ?>
2.注意项目实验
<?php //其实可以小写,但是不好区分,所以我们规定通常大写 define('xiaoxie',true); echo xiaoxie; //常量可以在外面不加引号 define(YH,'不要对未来迷茫,迷茫的时候静下心来coding'); echo YH; //只能用标量,我在后面用了一个数组,大家学一下就行,会报错的哟 define('BIAO',array(1,2,3)); ?>
此外,系统还为我们准备了一些内置的常量。这些常量都是规定好的。我们先熟悉几个,还有更多的系统常量我们学习完上册,入门后再慢慢的增加和学习。
常量名 | 说明 |
---|---|
LINE | 当前所在的行 |
FILE | 当前文件在服务器的路径 |
FUNCTIOIN | 当前函数名 |
CLASS | 当前类名 |
METHOD | 当前成员方法名 |
PHP_OS | PHP运行的操作系统 |
PHP_VERSION | 当前PHP的版本 |
TRAIT | Trait 的名字,php5.4新加 |
DIR | 文件所在的目录 |
NAMESPACE | 当前命名空间的名称(区分大小写) |
defined()函数来做安全机制
此处知识,可以眼前不用掌握。学习完函数后,再来看本部份代码也可以。
defined()我们来学习这种用法,主是是为了防止其他人绕过安全检查文件。
函数:defined(常量)
功能:向函数的括号后面传入常量,如果常量定义了就返回true,否则返回false
【情景模拟】假设,我们的这套在线电子商城的软件需要付钱,检查是否付费是通过对软件授权检查来完成的,而文件version.php中就有检查授权的功能,我们在软件中规定,没有授权检查文件version.php就不能使用这个软件。所有的代码都包含了version.php。并且为了防止有人盗版,我还可以把version.php的代码进行了加密。
我们有两个文件:
1.一个文件中间有版本号,版本声明和授权声明。文件名为version.php
2.一个文件中有具体的业务功能。例如:用户注册、登陆等,文件名为users.php
我们该怎么做呢?——也就是说不包含 version.php文件就不让,执行users.php之后的代码。
我们来进行实验:
version.php文件
<?php //此处是检查是否是否授权的业务部份代码xxxx define('AUTH',true); //略过模拟代码xxx行 ?>
users.php
<?php //尝试将include 'version.php'这一行代码注释后再执行看看,对比结果 include 'version.php'; if(!defined('AUTH')){ echo '非法!非法!你尝试跳过授权文件'; exit; } //模拟后面用户注册和用户登陆的代码xxx行 echo '用户注册'; ?>
实验结果可知:version.php必须要包含 ,不然不会显示后面的echo '用户注册';
3-19 php常量和变量之可变变量
可变变量其实就是——已声明的变量前,再上变量符。
举例说明:
<?php //定义了一个变量叫作 $shu 将$shu这个变量的值设为字符串的biao $shu = 'biao'; //定义了一个【变量】$biao。将他的值设置为鼠标 $biao = '鼠标'; //$$shu 就是可变变量:在已声明的变量$shu前又加上了一个变量符 echo $$shu; ?>
上面的过程说明:$shu的值为字符串的'biao'。我在$shu前再加上一个$(美元符号),可以理解成为以下的变形过程:
$$shu
${$shu} 分成两块来看
${'biao'} 把变量$shu解释成了biao
$biao 而$biao也是一个变量对应的值是:鼠标
3-20 php常量和变量之外部变量
外部变量
PHP的外部变量是PHP 在使用过程中规定好的一些变量。这个变量的规定是这样规定的,就这样使用。
我们先讲解几个最常用的例子,我们将下面的表单命名为user.html:
<html> <head> </head> <body> <form action="reg.php" method="get"> <input type="text" name="username" /> <input type="password" name="pwd" /> <input type="submit" value="提交" /> </form> </body> </html>
上现是很基础的一段HTML代码,在这段代码的主要意思是把用户和密码,采用get方法,将数据发送给reg.php(在上面代码的第6行规定的)。reg.php想办法接收用户传过来的username和pwd这两个值。
我们得出我们的第一个外部变量:$GET。
**$GET 的主要作用是将得到get传值的数据。**
我们写一个reg.php,用$_GET来接收值试试:
<?php //$_GET后面加上中括号,将username作为字符串放在中括号里面,就得到了表单里面的<input type="text" name="username" /> 的值 $u = $_GET['username']; echo $u.'<br />'; //$_GET['pwd'] 得到表单<input type="text" name="username" /> 的值 $passwd = $_GET['pwd']; echo $passwd.'<br />'; ?>
你可以输出值看一下结果。通过上面的实验我们知道了,通过$_GET这个外部变量,可以得到从表单输入的值。
大家在实验的时候会发现地址栏上面有一个特点:
根据上图,观察特点:
reg.php后面跟了一个?(问号)
表单里面的username变在了地址栏里面
表单面username的值输入的是root,在username后面跟了个=(等号)输入的值
username(名字)=root(值) 后面的密码是password(名字)=123123(值),中间有&(and符)分开
密码是可见的,那怎么样保证安全呢。让我在注册的过程当中,密码不在地址栏里面被人看到呢?
这个时候我们需要使用到post传值,post传值是在地址栏中不可见的。
同样上面例子的代码我们进行修改,html代码如下:
<html> <head> </head> <body> <!-- 这一行method 对应的值改为了post --> <form action="reg.php" method="post"> <input type="text" name="username" /> <input type="password" name="pwd" /> <input type="submit" value="提交" /> </form> </body> </html>
PHP的代码里面的$GET全改为了$POST:
<?php //$_POST后面加上中括号,将username作为字符串放在中括号里面,就得到了表单里面的<input type="text" name="username" /> 的值 $u = $_POST['username']; echo $u.'<br />'; //$_POST['pwd'] 得到表单<input type="text" name="username" /> 的值 $passwd = $_POST['pwd']; echo $passwd.'<br />'; ?>
观察特点:
reg.php后的?(问号)不见了。后面的username和password也不见了。那他怎么传递数据的呢?
他是通过我们看不见的浏览器的请求头文件传递的数据。所以在URL(网址)栏不可见。
注:附录中有如何通过火狐浏览器的firebug查看传递结果的演示过程。这一块都是HTTP协议规定的传送方式。
除此之外,我们还有$_REQUEST来接收数据。现在我们这样处理:
将php代码段中的$POST全改为$REQUEST,代码如下:
<?php $u = $_REQUEST['username']; echo $u.'<br />'; $passwd = $_REQUEST['pwd']; echo $passwd.'<br />'; ?>
把网页user.html里面的这一行中的method,改为get执行一次,再改为Post再运行一次,看看结果:
<form action="reg.php" method="post">
通过上面的实验你会发现$_REQUEST即可以接收get传值也可以接收post传值。
另外,我们总结一些外部变量,要求知识点的学习级别:了解含义,默写这个单词的写法和作用。
全局变量名 | 功能说明 |
---|---|
$_COOKIE | 得到会话控制中cookie传值 |
$_SESSION | 得到会话控制中session的值 |
$_FILES | 得到文件上传的结果 |
$_GET | 得到get传值的结果 |
$_POST | 得到post传值的结果 |
$_REQUEST | 即能得到get的传值结果,也能得到Post传值的结果 |
请再记一句话:以上这些变量全是超全局的。(以后讲解超全局的含义)。
注:
1.我们认为从用户输入过来的所有数据都不是可信的。本书的下半部份会专门讲解限制和过滤
2.在提交数据的时候,我们常用的方法有get和post。可以这样理解,get传值在url中可见,而post传值在url中不可见。
而post传值在url中不可见,是通过浏览器的header头部份将数据发送给指定服务器的。需要通过专门的工具才能看到Post发送的值为什么。
不能使用get方式来作密码的传输方式。
3-21 PHP常量和变量之环境变量
环境变量我们主要用的有$SERVER和$ENV两个环境变量。
不过,$_ENV逐渐被PHP的新版本给废弃了。
【重点】知道在哪儿查看环境变量的名字(key)和值(value),记住并默写几个常用的环境变量。
_SERVER['中间的值'],是需要我们了解意思的。
如果我们需要显示我们当前访问的这个phpinfo();页面文件放在哪儿,就可以执行:
<?php //我在上图左侧找到的一项,在前面加上了一个$(美元符),就显示出来了当前文件的路径 echo $_SERVER['SCRIPT_FILENAME']; ?>
我们来了解一些常用的环境变量的键名和值对应的意思:
键名 | 含义 |
---|---|
$_SERVER["REQUEST_METHOD"] | 请求当前PHP页面的方法 |
$_SERVER["REQUEST_URI"] | 请求的URI |
$_SERVER["SERVER_SOFTWARE"] | 用的是哪一种服务器 |
$_SERVER["REMOTE_ADDR"] | 客户的IP地址 |
$_SERVER["SERVER_ADDR"] | 当前服务器的IP地址 |
$_SERVER["SCRIPT_FILENAME"] | 主前请求文件的路径 |
$_SERVER["HTTP_USER_AGENT"] | 当前访问这个网址的电脑和浏览器的情况 |
$_SERVER["HTTP_REFERER"] | 上级来源(用户从哪个地址进入当前网页的) |
$_SERVER["REQUEST_TIME"] | 当前的时间 |
URI 和URL都是网址,但是URL带有了主机地址部份,而URI不带主机地址部份,例如:
http://www.shejibiji.com/abc.php?username=php 上面是一个URL(统一资源定位符),而URI是不带主机和(http://)/)
协议的部份:
abc.php?username=php
3-22 php常量和变量之变量引用
我们来对比两段代码的执行结果:
第一段代码,没有任何区别。跟我们原有的PHP代码一模一样:
<?php $fo = 5; //$fo的值为5,将5赋值 $bar = $fo; //$bar的值原来为5,现在将值改为6 $bar = 6; //$bar的结果为6 echo $bar.'<br />'; //$fo的结果为5 echo $fo.'<br />'; ?>
第二段代码:
<?php $fo = 5; //注意,加上了一个&符哟 $bar = &$fo; $bar = 6; //$bar的结果为6 echo $bar.'<br />'; //$fo的结果为6 echo $fo.'<br />'; ?>
为什么两个结果都变成6了呢?
我经常跟大家这样来举例。我们可以这样来想象:一个变量名,对应了一个数据值。如下图:
而加上&(and 符后),把变量指向同一个存值空间了,如下图:
也就是不论$fo或$bar的值如何发生变化,$fo变$bar也变,$bar发生变化,$fo也会发生变化。
3-23 php基础语法之算术运算
算数运算符,就是大家小学所学绝大多数知识:
符号 | 说明 | 举例 |
---|---|---|
+ | 加号 | $x + $y |
- | 减号 | $x - $y |
* | 乘号,乘以 | $x * $y |
/ | 除号,除以 | $x / $y |
% | 取余也叫取模、求模 | $x % $y |
与我们数学所学一样,也有优先级:先乘除,后加减。如果你想更明确的改变优先级,那就用()【小括号】,将想要优先的值给括起来。
3-24 php基础语法之赋值运算
那么PHP的赋值运算符还有几个:
符号 | 举例 | 等价式 |
---|---|---|
+= | $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 |
.= | $x .= $y | $x = $x . $y |
上面的例子和等价式都有明确的说明。
$x += $y 等价于 $x = $x + $y
<?php $x = 5; $y = 8; $x += $y; echo $x; ?>
以上的全部记住即可。都是一些语法上的规定,没什么好说的。
3-25 php基础语法之自加自减
自加、自减运算
自加自减,就是把自己加1,或者减1。
如果你学习过其他编程语言。你会发现,此处的用法又是计算机里面的一个规定。可以这样用,用起来更加简洁。
符号 | 说明 |
---|---|
$x++ | 先赋值后加 |
$x-- | 先赋值后减 |
++$x | 先加后赋值 |
--$x | 先减后赋值 |
上面的用法其实挺简单的,按照上面的例子。我们分成步骤去,按过程去判断即可。
<?php $x = 5; //先赋值后加:即先将$x的值赋值给$y。$x的值为5,所以将$x的值赋值给$y。$y也为5 $y = $x++; //$x的结果输出为6,因为赋值给$y后,$x自己又把自己进行了+1操作。所以,$x的结果为6 echo $x; ?>
我们来对比一下先加后赋值,如下:
<?php $x = 5; //先将$x自加1,$x等于5,自加1后结果为6。因此,$y的结果为6 //自加后,再将结果6偷偷的赋值给自己$x $y = ++$x; //$x的结果输出也为6。因为$x执行+1完成后,将5+1的结果赋值给了自己 echo $x; ?>
请回答,下面$water + $paper的结果为多少?
<?php $x = 5; $y = 6; $foo = $x++ + $x--; $bar = ++$y + ++$x; $cup = $x-- + $y--; $paper = ++$x + $x++; $water = $y-- + $x--; echo $water + $paper; ?>
标准答案是25。
学习笔记
同一个式子中,变量是会从左往右进行加减的。
比如:$x=1;
paper = ++$x + $x++;
++$x 后,$x变成了2,后面那个$x++作为加数时也就是2了,然后再++,paper为4。
3-26 php基础语法之比较运算符
说明 | 符号 |
---|---|
大于 | > |
小于 | < |
大于等于 | >= |
小于等于 | <= |
不等于 | != |
等于 | ==(赋值是=号,所以==规定为等于) |
全等(判断类型等于) | === |
全不等(判断类型不等于) | !== |
接下来的一个重点是演示,等于(==)和全等于也叫判断类型等于(===)。
我们来写一段代码,大家看看两段代码就是符号PHP学院,为什么结果有这么大的差距呢?
下面这段代码执行出来的结果,运行了真区间。
<?php $x = 5; $y = '5'; if($x == $y){ echo '结果为真'; }else{ echo '结果为假'; } ?>
下面这段代码执行出来的结果,运行了假区间。
<?php $x = 5; $y = '5'; if($x === $y){ echo '结果为真'; }else{ echo '结果为假'; } ?>
我们对比区别发现:
下面这段代码是===(三个等号,我们说他还有一个名字是判断类型等于)。而$x为整型的5.$y为字符串类型的5.类型PHP学院,所以执行的是假区间。而上面一段代码,是两个等号不判断类型,所以执行的是真区间。
3-27 php基础语法之逻辑运算
逻辑运算符比较简单,是我们人类进行逻辑思考时的一种方式。
讲出很多吊丝男士的心愿:某一个女人,要不长得漂亮、要不比我有钱我就娶她。如果一个条件都没有,那就算了。
上面的这种不评价好坏的心理状态,只是来说明这就是典型的计算机思维。
美丽这个条件成立(true) 或者 财富这个条件成立(true),则执行娶她的行为和动作。否则,就不娶这个女孩。
那我们把这些逻辑关于进行了归纳和总结,下面表格中的:$x为条件一,$y 为条件二。进行说明:
逻辑与,中文解释为并且。可理解为,$x 并且 $y 都为真(true)的时候执行。
逻辑或,中文解释为或者。可以理解为,$x或者$y其中一个为真(true)的时候执行。
逻辑非,中文解释取反。如果$x的执为假(false),进行一次非操作。非假(false)就为真了,就可以执行真区间了。反推true,则执行假区间了。
逻辑异或,如果$x和$y相同则为false,不相同则为true。
举例 | 说明 | 详细说明 |
---|---|---|
$x and $y | 逻辑与(并且关系) | $x 和$y 为真则返回真 |
$x && $y | 同上 | 同上 |
$x or $y | 逻辑或 | $x,$y均为false时为假,其他情况全为真 |
$a||$b | 同上 | 同上 |
!$x | 逻辑非 | 取反,即true变为false,false变为true |
$x xor $y | 逻辑异或 | 相同取false,相异为true |
【重点知识】短路
短路就是采用一个懒人模式来思考问题。
逻辑与的特性是:两边为true即为true,其他情况均为假。
逻辑或的特性是:两边为假均为假,其他情况全为真。
我们现在把自己想象成一个懒汉,非常非常懒。来思考逻辑与和逻辑或。可不可以这样理解:
逻辑与:如果前面第一个条件为false了,后面就可以不用执行了。
用代码表示:if($x && $y) 如果$x已经为false了,后面的$y 就没有执行必要了。
逻辑或:前面第一个条件为true了,后面就不用执行了。
用代码表示:if($x || $y) 如果$x已经为true了,后面的$y 就没有执行必要了。
我们写段代码来证明一下:
<?php $x = false; $y = 2; if($x && $y++){ echo '真'; }else{ echo '假'; } //结果还为2,说明没有执行$y++ echo $y; ?>
代码如下,将两个&符改为一个&符试试:
<?php $x = false; $y = 2; if($x & $y++){ echo '真'; }else{ echo '假'; } //再看看结果 echo $y; ?>
运行结果答案是3
通过上例我们知道了&&与&的区别,||和 |的区别。我们也了解了什么是短路。那我们在什么地方可以用到短路呢?有一些奇怪的写法,我们必须了清楚。其实就是基础语法的再应用。
回顾3.3.1最后一段内容:
<?php //如果为defined('AUTH')存在AUTH常量则为true,不访问后面的exit了。如果为false则执行exit defined('AUTH') or exit('存在安全因素不准访问'); ?>
上面的一段代码就是典型的短路应用的代码
exit 的意思是指在此处停止运行,退出。后面的PHP代码不再执行了。它有两种用法:
1,直接exit; 就是直接退出
2,exit(‘提示内容’),退出的时候还给出一段提示内容
3-28 PHP基础语法之 位运算
略略略
3-29 PHP基础语法之 三元运算符和其它运算符
三元运算符和其它运算符
此外还有一些特殊的运算符和符号,我们再来进行讲解。可能以后我们需要用到。
符号 | 说明 |
---|---|
$x? 真代码段:假代码段 | 判断是否为真假 ? 真情况 : 假情况; |
``(反引号) | 反引号中间插代命令,执行系统命令,等价于shell_exec函数 |
@ | 单行抑制错误,把这一行的错误不让它显示出来了,效率低不建议使用 |
=> | 数组下标访问符 |
-> | 对象访问符 |
instanceof | 判断某个对象是否来自某个类,如果是的返回true,如果不是返回false |
三元运算符,相当于是if...else结构。不过三元运算符的写法更加简洁,语法格式如下:
$x? 真代码段(只能写一句代码):假代码段(只能写一句代码);
代码如下:
<?php $x = true; $x ? $y = 5 : $y = 6; //输出5 echo $y; ?>
反引号就更加特殊了,我们经常需要显示IP地址,在PHP里面可不可能显示我们windows的IP地址呢?用反引号,就可以执行我们的命令(不过有些虚拟服务器是禁止执行这些的命令脚本的):
<?php echo '<pre>'; echo `ipconfig`; echo '</pre>'; ?>
上面的代码你执行看看效果,是不是显示出来了你机器的IP地址和一堆和IP相关的参数?
@符是指单行抑制错误,以后的章节我们还会讲解到。此处为了解级别。
<?php //打开一个不存在的文件adfsafasdfasfasdfdsadf.txt,你运行一下会发现报错了。 //再前面再加上一个@符看看效果 $fp = fopen('adfsafasdfasfasdfdsadf.txt','r'); //@$fp = fopen('adfsafasdfasfasdfdsadf.txt','r'); ?>
数组下标访问符,以后也会有一章讲解,此处了解一下就可以了:
<?php $data = array('sina' =>'新浪' ,'sohu' => '搜狐'); ?>
对象访问符->和instanceof 都是了解级别,以后也有专门的章节进行讲解:
<?php //实例化一个对象 $obj = new StdClass(); //判断某对象是某由某个类实例化,如果是的则执行真 if($obj instanceof stdClass){ echo '真'; }else{ echo '假'; } //向obj对象中追加一个成员属性为username $obj -> username = 'PHP中文网'; echo $obj -> username; ?>
上面的所有例子中,除了三元运算符、@符、反引号外。其他的学习级别均为了解,在以后讲解的时候。知道有这个符号即可。