百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

PHP从基础到入门(二)(php的基础知识)

haoteby 2025-02-04 14:07 2 浏览

本文章为连载文章PHP入门的第二篇

建议先阅读前篇文章:PHP从基础到入门(一)

流程控制

循环结构

循环的中断

循环中,有两种中断语句可以使用:

break:

用于完全终止某个循环,让执行流程进入到循环语句后面的语句;

continue:

用于停止当前正在进行的当次循环,而进入到循环的“下一次”过程中去(通常就是循环的开始位置);

在php中,该两个循环有更强的能力:中断“更多层”的循环,语法如下:

break 正整数n; //比如1,2,3;

continue 正整数n; //比如1,2,3;

循环的“层”,指的是从当前中断语句(break或continue)算起,往代码的“外部”数循环的个数,就是层数。比如:

for(...){ //循环1

for(...){ //循环2

for(...){ //循环3

break 2; //此时会中断循环2:其实指中断“2层”

//对此break语句,循环3是其“第一层”,循环2是其第2层,循环1是其第3层

}

contine 2; //此时会中断循环12:其实指中断“2层”

//对此contine语句,循环2是其“第1层”,循环1是其第2层,

}

}

do while循环:

for循环语句形式:

for(【循环变量初始化】; 【循环变量的条件判断】; 【循环变量的改变】){

//循环体语句。。。。

}

while循环语句形式:

【循环变量初始化】

while(【循环变量的条件判断】){

//循环体语句。。。

【循环变量的改变】

}

do while循环语句形式:

【循环变量初始化】

do {

//循环体语句。。。

【循环变量的改变】

}while(【循环变量的条件判断】);

说明:

1,do while会先进入循环体执行一次(不判断条件);

2,然后,判断循环条件是否满足,如果满足,又会回到do的开始位置(进入循环体)执行——这就是循环的正常情况。

3,如果不满足,就结束循环。

流程控制的替代语法

if ( ... ) : 。。。。 endif;

if ( ... ) : 。。。else: 。。。 endif;

if ( ... ): 。。。elseif( ... ) : 。。。 elseif( ... ): 。。。 else: 。。。 endif;

switch( ... ) : case ... case ... endSwitch;

while(...): 。。。endwhile;

for(...; ...; ...): 。。。 endfor;

goto语句:

学此语句的目的是:不要用它!

语法形式:

//程序从这里开始:

标识符2:

语句群1.。。。。。

goto 标识符1; //含义是:立即跳转到标识符1所在位置的下一行继续执行

语句群2.。。。。。

标识符1:

语句群3.。。。。。

goto 标识符2:;

控制脚本执行顺序

die(字符串)/exit(字符串):

输出该字符串后,立即停止php的执行!即后续程序不再执行,包括后续的其他所有php和html代码部分。

exit是die的同义词。他们也可以不加字符串,而是直接停止。

sleep($n)

让程序停止运行指定的秒数。然后等待过了那个时间后,就继续运行!

注意,其单位是“秒”;

文件加载

综述和基本语法:

1,有4个文件加载语句:include, require, include_once, require_once

2,他们的使用形式完全一样,比如: include “要加载的文件路径”; 或: include (“要加载的文件路径”);

3,他们的含义也几乎完全一样:只是在加载失败时或是否重复加载这种情况,有所不同。

4,他们可以载入php或html文件;

文件加载的路径问题:

前提说明:以下的说明举例,以include为例,也适用于其他3个加载语句;

有3中路径形式可以使用:

相对路径:

是相对于当前网页文件所在的位置来定位某个被加载的文件位置,主要依赖以下2个特殊的路径符号:

./ :表示当前位置,即当前网页文件所在的位置(目录);

../ :表示上一级位置,即当前网页文件所在的位置的上一级位置(目录);

我们需要用这2个符号来表达位置信息,比如:

include ‘./page1.php’; //表示当前网页文件所在位置的page1.php文件;

include ‘../page2.php’;

include ‘../ab/page3.html’;

绝对路径:

绝对路径又分2种:

本地绝对路径:

比如:

include “c:/d1/d2/p1.php”;

include “f:/f1/abc/p2.html”;

特别注意:我们其实几乎都不应该在代码中直接写这种本地绝对路径!

但,其实我们这种本地绝对路径的写法是很常用的!

那怎么做?示例如下:

网络绝对路径:

比如:

include “http://www.abc.com/p1.php”;

include “http://www.baidu.com/index.php”;

“无路径”(不推荐):

形式就是没有给出路径信息,而只给出文件名,我们不推荐。

比如:include ‘page1.php’; //此时通常其实php语言引擎会在当前网页目录下找该文件。

文件载入和执行过程详解

第1步:从include语句处退出php脚本模式(进入html代码模式)

第2步:载入include语句所设定的文件中的代码,并执行之(如同在当前文件中一样)

第3步:退出html模式重新进入php脚本模式,继续执行之后的代码

它相当于:

4个载入语句的区别

include和require的区别:

include载入文件失败时(即没有找到该文件),报一个“提示错误”,然后继续执行后续代码;

requre载入文件失败时,报错并立即终止执行。

通常,require用于在程序中,后续的代码依赖于载入的文件的时候。

include_once和require_once的区别:

同include和require的区别:

include和include_once的区别:

include载入的文件不判断是否重复,只要有include语句,就会载入一次——即此时可能导致重复载入。

include_once载入的文件会有内部判断机制是否“前面代码”已经载入过,如果载入过,就不再载入。

require和require_once的区别:

同include和include_once的区别。

在被载入文件中return语句的作用

1,一个载入语句,如果载入成功,其实是有返回值的,为1,如果载入失败,则返回的是false。

(虽然我们通常不去使用该返回值)。

但,如果被载入文件中有return语句,此时就有另外的机制和作用:

2,return语句此时的作用是终止载入过程——该return语句的后续被载入文件的代码不再载入。

运行结果为:

3,return语句也可以用于该被载入文件载入时返回一个数据,形式为:return XX数据;

运行结果为:

错误处理

错误的分类

通常分3种:

语法错误:

程序运行之前,都要先检查语法。如果语法有错误,就会立即报错,并且不会去执行程序。

运行时错误:

就是在程序语法检查通过后,,开始运行程序并在此过程中遇到的错误。常见的有3中:

提示性错误:

警告性错误:

致命错误:

逻辑错误:

指的是,程序本身可以正常执行,没有报错——但“计算结果”却错了。

错误的分级

php语言中,将各种错误进行了不同级别的分类归纳,并形成大约有10几个级别的错误,这就是技术层面的错误分级。

每一级别的错误,都有一个“代号”,这个代号其实也就是一个系统内部的“常量而已”。比如:

系统常见错误:

E_ERROR: 致命错误

E_WARNING: 警告性错误

E_NOTICE: 提示性错误

用户可自定义的错误:

E_USER_ERROR: 自定义致命错误

E_USER_WARNING: 自定义警告性错误

E_USER_NOTICE: 自定义提示性错误

其他:

E_STRICT: 严谨性语法检查错误

E_ALL 代表“所有错误”。

详细参考手册:

下面来看看这些错误代号的实际值:

运行结果为:

错误的触发

错误的触发,就是让错误“发生”。

有两种方式会触发错误:

系统触发

程序运行到某行代码,确实出现了某种错误,此时系统就会报错——这就是触发了系统错误。

系统触发的典型错误有这3种:

E_NOTICE: 提示性错误:会输出错误提示,并继续执行后续代码;

比如使用不存在的变量或常量:

E_WARNING: 警告性错误:会输出错误提示,并继续执行后续代码(也可能看具体情况,比如require)

比如include载入一个不存在的文件:

E_ERROR: 致命错误:导致程序无法执行后续语句;

比如调用一个不存在的函数!

自定义触发:

当我们处理某些数据的时候,本来数据本身是没有错误的,但根据具体应用(业务)的需要,会要求数据满足某种条件,而该数据并不满足的时候,我们就可以在程序中“主动”去触发(创建)一个错误,以表明该数据的“非法性”。

语法形式:

trigger_error(“错误提示信息内容”, 3中用户错误代号之一);

其中触发了用户的致命错误(E_USER_ERROR),也会终止程序的后续执行。

错误报告的显示问题

所谓错误报告,就是显示在网页上的错误提示内容!

有关错误报告,有2个问题需要处理:

是否显示错误报告(display_errors):

有2种做法可以来设定是否显示:

做法1:

在php.ini文件中,设定display_erros的值,为on(显示),或为off(不显示)

可以修改为:

当然,作为开发阶段,我们都应该显示错误信息。

注意:前提条件都是我们apache已经装载了php.ini文件——这一点,需要在apache的配置文件httpd.config中加入如下一行:

PHPIniDir “php.ini文件的了位置(路径)”

比如:

方法2:

直接在php的脚本文件中设使用函数ini_set()来对其进行设置:

当然,如果设置为1,就是显示!

注意:

1,不管哪种形式,该单词是一样的:display:errors

2,使用php.ini配置,影响的是全局(即所有php网页);

3,在某个脚本代码中使用ini_set()设置,就只影响该脚本代码本身——这是常用的方式。

4,脚本中的设置优先于php.ini中的设置。

显示哪些级别的错误报告(error_reporting):

显然,前提是“display_errors”设置为On(或1),表示可以显示。

显示哪些级别的错误报告,也有2个做法:

做法1:在php.ini文件中;

这个值目前代表“所有错误”,都显示。

修改为:

此时就只显示E_NOTICE级别的错误

更多示例为:

error_reporting = E_NOTICE | E_WARING | E_ERROR //显示该3种;

error_reporting = E_ERROR | E_USER_ERROR //显示该2种严重错误

要想代表真正的“所有错误”,应该写为:E_ERROR | E_STRICT,图示如下:

做法2:在当前的脚本代码中:

跟php.ini中设置其实是一样,举一些例子如下:

ini_set(“error_reporting”, E_NOTICE); //就显示该一个级别的错误

ini_set(“error_reporting”, E_NOTICE | E_WARNING), //显示2个级别

ini_set(“error_reporting”, E_NOTICE | E_WARNING | E_ERROR), //显示3个级别

ini_set(“error_reporting”, E_ALL | E_STRICT), //这才代表显示所有错误!

错误日志的记录问题

错误日志其实就是错误报告,只是它会“写入文件中”,此时就称为错误日志!

也有2个问题,每个问题也有2种做法:

是否记录log_errors:

php.ini中:

log_errors = On 或 Off

脚本中:

ini_set(“log_erros”, 1); 或 0

补充一句:

1:ini_set(“php配置项”, 值); //用于脚本中设置php.ini中是某项的值。

2,:$v1 = ini_get(“php配置项”); //用于获取php.ini中是某项的值

记录到哪里error_log:

一般就只有2个写法:

写法1:直接使用一个文件名,此时系统会自动在每个文件夹下都建立该文件名,并用其记录该文件夹下的所有网页文件发生的错误信息。

然后执行一个有错误的网页,并可以观察到:

写法2:使用一个特殊的名字“syslog”,则此时所有错误信息都会记录到系统的“日志文件”中。

系统日志文件在这里:控制面板》管理工具》事件查看器》window日志》应用程序:

然后执行一个有错误的网页,并可以观察到:

自定义错误处理器

什么叫错误处理器?

就是一旦发生错误,用来处理该错误的一种“机器”——其实就是一个函数。

自定义错误处理,就是指:

让系统不要去处理错误了,而完全由我们(开发者)来对错误进行处理:显示和记录。

做法,其实非常简单,就2步:

第一步:

设定要用于处理错误的函数名!

set_error_handler(“f1”);

第二步:

去定义该函数!

function f1(){

//这里可以任意写代码:自然正常是去显示错误报告,和记录错误日志。

}

更多课程请搜索微信公众号“爱搞机个人版”,喜欢学习的建议关注下,所有课程免费! 点下关注不迷路!

相关推荐

手机如何检测是否被安装木马程序?如何防止路由器被黑客重置?

黑客攻击无线路由器有3种途径:...

盈盈可握的娇媚——全能美物ORICO WRE-30

由于工作的关系经常出差,在酒店除了一个RJ45接头,通常都没有无线网络可以提供,不可能自己携带太大的无线路由器,便携式的也买过几个,但是功能上大打折扣实在无法忍受,一直期盼能有既便携也功能丰富强大的产...

安卓重大锁屏密码漏洞,国产手机有几个中招了?

上周,一条新闻吸引了托尼注意。只用一张SIM卡,1分钟不到就能解锁你的安卓手机?...

零代码+免费+联网搜索:用DeepSeek+AnythingLLM搭建专属AI知识库

引言在信息爆炸的时代,如何高效管理私有数据并借助AI能力实现精准问答?本地私有知识库成为解决数据安全与智能化的最佳方案。本文将手把手教你使用开源工具AnythingLLM(项目地址:...

iOS越狱更轻松?黑客破解Lightning连接器

IT之家(www.ithome.com):iOS越狱更轻松?黑客破解Lightning连接器近日,德国黑客StefanEsser,也就是人们熟知的i0n1c在他Twitter上表示,黑客已成功破解了...

如何在 Windows 11 中更改 PIN

#寻找数码点评派#打开Windows设置,转到帐户登录选项,然后选择PIN(WindowsHello)...

2019年终黑客工具盘点-最佳篇

2019已经匆匆溜走,在2020伊始,小兮为大家带来了2019年终工具盘点的最佳篇,将分成三个部分为大家推荐工具,分别是Windows最佳工具、Linux最佳工具和手机最佳工具。话不多说,开整!Win...

磁盘被 BitLocker 锁住了怎么办?教你轻松解决

如果你的磁盘被BitLocker锁住,通常是因为系统检测到潜在的安全风险(如硬件改动、多次密码错误等)或丢失了密钥。以下是分步解决方案:一、确认被锁原因①硬件改动:更换主板、TPM芯片或启动顺序变化可...

风靡全球的安全应用AppLock,同样可能泄露隐私

安全研究人员发现,DoMobileLtd.公司开发的知名的安卓安全应用AppLock存在多个漏洞,容易受到黑客攻击。AppLock应用锁简介AppLock在超过50个国家拥有1亿多用户,它自身支持2...

安卓5.1.1前所有版本曝密码漏洞,轻松乱码即可破解锁屏

据德州大学研究人员发现代号棒棒糖的Android5.x存在一个严重的软件漏洞,只要攻击者能拿到机子的情况下,手机若设置的是数字密码解锁方式,只要输入足够长的乱码就能绕过屏幕锁定,进入到HOME主页取...

手机里有钱的,这5项设置要打开,就算丢了别人也偷不走

随着手机支付时代的到来,可恨的坏人也紧跟支付方式的变化,改为盯上了我们的手机。如果你手机里有钱的,那么一定不要掉以轻心,做好以下5项设置,让手机里的钱的更安全。设置SIM卡锁定设置SIM卡锁定,其实就...

原来破解邻居家的WiFi这么难?还是用万能钥匙吧

我们中的许多人认为,入侵wifi就像用铁锤打破塑料锁一样,并且使用以下提到的工具也是如此。入侵无线网络只是从防御性安全转移到攻击性安全的开始部分。入侵wifi包括捕获连接的握手并使用字典攻击等各种攻击...

电脑开机PIN码忘记了怎么办?教你不用重装系统也可以重置

在使用电脑的时候,我们往往会为了保护电脑的安全,从而设置开机密码。但是总会出现PIN码忘记导致无法开机使用,特别是许多用户反复的输入错误密码导致登录次数过多或者重复的开关机,登录选项被禁用,请使用其他...

送你个使用锦囊 防止蓝牙耳机被“策反”

你每天戴的蓝牙耳机可能被定位跟踪?近日有报道称,部分蓝牙耳机存在安全漏洞,可被不法分子快速植入具有定位功能的代码,从而实现远程跟踪,甚至监听。这一话题迅速登上微博热搜榜,不少网友惊呼:自己身边居然潜伏...

系统小技巧:无懈可击 Windows组策略管理系统密码

为了保护自己的系统安全,我们一般都会为系统设置密码。不过很多人为了记忆方便,设置的都是类似“123456”这样的简单密码,或者即使设置了较为复杂的密码,但是使用的时间很长也不变化。这些密码策略其实都有...