[PHP基础语法]php入门教程之一周学会PHP – PHP学习笔记

2020年8月14日学习笔记评论80,417字数 12981阅读43分16秒阅读模式

[PHP学习笔记]php入门教程之一周学会PHP

教程:php入门教程之一周学会PHP
链接:https://www.php.cn/code/4800.html

第3章 php基本语法

3-03 PHP变量特点

我们在PHP中的变量也是如此。不过有几个特点:

  1. 必须要以$开始。如变量x必须要写成$x;
  2. 变量的首字母不能以数字开始;
  3. 变量的名字区分大小写;
  4. 变量不要用特殊符号、中文,_不算特殊符号;
  5. 变量命名要有意义(别写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语言中声明字符串有三种方式:

  1. 用单引号声明
  2. 用双引号声明
  3. 用字界符声明(需要输入非常大段的字符串时使用)

字界符声明

  1. 在变量后面的等号写三个小于号(<<<)。
  2. 然后在<<<后面写上字符(建议英文大写字符)。如下例中的:ABC
  3. 然后换行写上任意想写的字符
  4. 写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。如下例中的:ABC;
<?php

$dingjie = <<<ABC
  如果
       非要在这个滚犊子
   前
       面<br />
      加上一段
   <i>距离的话</i>
   我想说:<h1>思想有多远,你就跟我滚多远</h1>
ABC;
?>

那双引号和单引号有什么区别呢?

【重要知识点】PHP面试题中,高概率面试题(建议背诵并实验三遍以上)

  1. 双引号解析变量,但是单引号不解析变量。
  2. 在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。
    一定要在变量后面接上特殊字符,例如空格等分开。
  3. 如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
  4. 双引号解析转义字符,单引号不解析转义字符。但,单引号能解析' 和\ 转义符号
  5. 单引号效率高于双引号,尽可能使用单引号
  6. 双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。
  7. 神奇的字符串拼接胶水——(.)点,用来拼接字符串。
  8. 我们将定界符声明字符串视为双引号一样的功能来看待。

下面是针对第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)类型:

  1. 通过变量赋值明确指定为变量的值为NULL
  2. 一个变量没有给任何值
  3. 使用函数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数据类型之查看和判断数据类型

查看数据类型

  1. gettype(传入一个变量) 能够获得变量的类型
  2. 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数据类型之自动转换和强制转换

【默写级别】布尔值的自动类型转换、强制类型转换的英文单词

布尔值的自动类型转换

自动类型转换,就是数据类型在某些情况下,自动会变为其他的类型参与运算。自动类型转换的发生时机是:运算和判断的时候某些值会自动进行转换。

下面的情况是布尔值判断时的自动类型转换

  1. 整型的0为假,其他整型值全为真
  2. 浮点的0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
  3. 空字符串为假,只要里面有一个空格都算真。
  4. 字符串的0,也将其看作是假。其他的都为真
  5. 空数组也将其视为假,只要里面有一个值,就为真。
  6. 空也为假
  7. 未声明成功的资源也为假

我们针对以上针理的规则一项一项来做实验看看结果。

3-17 对象

  1. 知道对象是一个复合类型
  2. 对象的英文叫object,var_dump一个变量的时候看到的类型为object的,这个变量就是对象类型

所谓复合类型:就是在一个类型中可以同时存入字符串、浮点、整型、布尔等

3-18 php常量和变量之用常量限制用户跳过某些文件

常量在代码中的定义、书写方式:

define(常量名,常量值)

注:

  1. 常量值只能为上一章中我们讲到的标量。
  2. 常量名可以小写,但是通常大写
  3. 常量名可以不加引号,但是通常加上引号。
  4. 在字符串中调用常量的时候,必须在引号外面
  5. 常量名建议只用字母和下划线

我们用代码来实验一下:

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这个外部变量,可以得到从表单输入的值。

大家在实验的时候会发现地址栏上面有一个特点:

QQ截图20161114101233.png

根据上图,观察特点:

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 />';
?>

QQ截图20161114101322.png

观察特点:
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了呢?

我经常跟大家这样来举例。我们可以这样来想象:一个变量名,对应了一个数据值。如下图:

2015-08-02_55bdc64daf9e3.png

而加上&(and 符后),把变量指向同一个存值空间了,如下图:

2015-08-02_55bdc68312f9b.png

也就是不论$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;

?>

上面的所有例子中,除了三元运算符、@符、反引号外。其他的学习级别均为了解,在以后讲解的时候。知道有这个符号即可。

匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定