1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>PHP核心知识纲要</title>
  6. <script src="jquery-1.7.1.js"></script>
  7. <script>
  8. $(function(){
  9. $("ul").hide();
  10. $("body>ul").show();
  11.  
  12. $("li").each(function(){
  13. if($(this)[0].childNodes.length > 1 && $("ul",this).size() > 0)
  14. {
  15. $($(this)[0].childNodes[0]).wrap("<a href='#'></a>");
  16.  
  17. }
  18. });
  19. $("li > a").click(function(){
  20. $(this).next().toggle();
  21. $(this).css({"text-decoration":"underline"});
  22. return false;
  23. });
  24. $("ul:first").dblclick(function(){
  25. $("ul").show();
  26. });
  27.  
  28. //$("li>ul").toggle();
  29. //$("li>ul:first").toggle();
  30.  
  31. });
  32. </script>
  33. <style type="text/css">
  34. <!--
  35. body,td,th {
  36. font-family: 微软雅黑;
  37. }
  38. -->
  39. </style></head>
  40.  
  41. <body>
  42. <ul>
  43. <li>php介绍
  44. <ul>
  45. <li>缩写:Personal Home Page ==&gt;&gt;PHP:HypeText Preprocessor </li>
  46. <li>历史
  47. <ul>
  48. <li>1995PHP/FI,Rasmus Lorderf,Personal Home Page </li>
  49. <li>1997PHP/FI2.0,1998PHP3,2000PHP4,2005PHP5 </li>
  50. </ul>
  51. </li>
  52. <li>应用范围:
  53. <ul>
  54. <li>web服务器端脚本:主要作用</li>
  55. <li>命令行脚本
  56. <ul>
  57. <li>运行php文件:php.exe -f &quot;php文件路径&quot;</li>
  58. <li>运行php代码:php.exe -r &quot;php脚本代码&quot;</li>
  59. </ul>
  60. </li>
  61. <li>应用程序图形界面 </li>
  62. </ul>
  63. </li>
  64. </ul>
  65. </li>
  66. <li>php运行环境
  67. <ul>
  68. <li>BS软件模式
  69. <ul>
  70. <li>浏览器软件若干 </li>
  71. <li>web服务器软件若干 </li>
  72. <li>后台程序语言若干 </li>
  73. <li>web运行流程:
  74. <ul>
  75. <li>浏览器输入地址,回车(发送请求) </li>
  76. <li>根据规则找到对应web服务器。规则如下:
  77. <ul>
  78. <li>首先在本机hosts文件中找对应IP </li>
  79. <li>如果hosts中没有找到,则到互联网上找对应IP </li>
  80. <li>如果还是没有找到,则终止请求,返回“找不到服务器”提示 </li>
  81. </ul>
  82. </li>
  83. <li>web服务器取得对应文件 </li>
  84. <li>如有需要,对该文件进行一定的处理(比如php代码执行) </li>
  85. <li>将文件(或执行结果文件)返回给浏览器(返回应答) </li>
  86. <li>浏览器接收到文件 </li>
  87. <li>浏览器处理文件(显示/执行) </li>
  88. </ul>
  89. </li>
  90. </ul>
  91. </li>
  92. <li>web服务器运行模式
  93. <ul>
  94. <li>安装apache软件
  95. <ul>
  96. <li>测试apache </li>
  97. </ul>
  98. </li>
  99. <li>将php配置为apache模块:loadModule php5_module &quot;php5apache2_2.dll路径&quot;</li>
  100. <li>告知apache何时调用php模块
  101. <ul>
  102. <li>方式1:FilesMatch〉setHandler &quot;application/x-httpd-php&quot;</li>
  103. <li>方式2:addType application/x-httpd-php .php .php3</li>
  104. <li>测试php运行: </li>
  105. </ul>
  106. </li>
  107. </ul>
  108. </li>
  109. <li>配置php
  110. <ul>
  111. <li>使用phpinfo()测试。</li>
  112. <li>确定php的配置文件
  113. <ul>
  114. <li>PHPIniDir 设定php.in文件位置 </li>
  115. </ul>
  116. </li>
  117. <li>修改php配置
  118. <ul>
  119. <li>设置时区:timezone=PRC </li>
  120. <li>设置扩展库目录:extension_dir </li>
  121. <li>打开扩展库:mysql, mysqli </li>
  122. </ul>
  123. </li>
  124. </ul>
  125. </li>
  126. </ul>
  127. </li>
  128. <li>安装mysql数据库
  129. <ul>
  130. <li>安装过程: </li>
  131. <li>相关配置过程:
  132. <ul>
  133. <li>设置环境变量以方便登录 </li>
  134. <li>对php.ini,可以打开对应扩展mysql </li>
  135. </ul>
  136. </li>
  137. <li>操作mysql数据库的基本流程
  138. <ul>
  139. <li>客户端连接mysql服务器 </li>
  140. <li>客户端发送命令(操作语句) </li>
  141. <li>服务器执行语句 </li>
  142. <li>服务器返回执行结果 </li>
  143. <li>客户端展示执行结果 </li>
  144. <li>断开连接(退出登录) </li>
  145. </ul>
  146. </li>
  147. </ul>
  148. </li>
  149. <li>虚拟主机基本配置
  150. <ul>
  151. <li>端口监听设置 </li>
  152. <li>主机配置的关键项
  153. <ul>
  154. <li>主机名: </li>
  155. <li>主机目录: </li>
  156. </ul>
  157. </li>
  158. <li>目录的访问设置
  159. <ul>
  160. <li>Options</li>
  161. <li>Order</li>
  162. <li>Allow和Deny</li>
  163. <li>AllowOverride</li>
  164. <li>.htaccess文件 </li>
  165. </ul>
  166. </li>
  167. <li>其他相关设置
  168. <ul>
  169. <li>默认页设置DirectoryIndex </li>
  170. <li>主机别名设置ServerAlias </li>
  171. <li>目录别名设置Alias </li>
  172. </ul>
  173. </li>
  174. <li>多域名虚拟主机配置:
  175. <ul>
  176. <li>打开主配置文件中的httpd-vhosts.conf开关 </li>
  177. <li>编辑多域名配置文件httpd-vhosts.conf</li>
  178. <li>设定要进行多域名配置的IP及端口:NameVirtualHost *:80</li>
  179. <li>一个一个主机进行配置:
  180. <ul>
  181. <li>设定主机域名:ServerName</li>
  182. <li>设定主机目录:DocumentRoot</li>
  183. <li>设定目录访问:Directory权限设定 </li>
  184. </ul>
  185. </li>
  186. </ul>
  187. </li>
  188. </ul>
  189. </li>
  190. <li>PHP运行基本环境配置与设定
  191. <ul>
  192. <li>确定配置文件所在位置:用phpinfo.php查看 </li>
  193. <li>修改php的时区设定 </li>
  194. <li>设定php的标记形式:
  195. <ul>
  196. <li>典型(标准)标记形式 </li>
  197. <li>脚本形式&lt;script language=&quot;php&quot;&gt;</li>
  198. <li>短标记形式:short_open_tag </li>
  199. <li>结束标记有时可以省略</li>
  200. </ul>
  201. </li>
  202. </ul>
  203. </li>
  204. <li>php基本语法形式:
  205. <ul>
  206. <li>区分大小写
  207. <ul>
  208. <li>是指变量名区分大小写</li>
  209. <li>但函数名不区分</li>
  210. <li>而系统中使用的关键字也不区分大小写,比如if, else, for</li>
  211. </ul>
  212. </li>
  213. <li>一条语句使用一个分号结束
  214. <ul>
  215. <li>最后一个分号可省略 </li>
  216. <li>php结束标记省略则不能省略最后一个分号 </li>
  217. </ul>
  218. </li>
  219. <li>php注释形式
  220. <ul>
  221. <li>单行注释
  222. <ul>
  223. <li>//常规风格(推荐) </li>
  224. <li>#配置文件风格 </li>
  225. </ul>
  226. </li>
  227. <li>多行注释
  228. <ul>
  229. <li>多行注释技巧1:/*.... //*/ </li>
  230. <li>多行注释技巧2:if语句 </li>
  231. </ul>
  232. </li>
  233. </ul>
  234. </li>
  235. </ul>
  236. </li>
  237. <li>变量:
  238. <ul>
  239. <li>含义:包含名称和值一个标识符
  240. <ul>
  241. <li>名称和值的关系可以称为“引用” (指向)</li>
  242. <li>使用一个变量名其实是指使用该变量所“引用”(指向)的值</li>
  243. </ul>
  244. </li>
  245. <li>使用形式:变量必须以$开头,后面紧跟变量名 </li>
  246. <li>定义形式:直接给一个变量赋值,如果是第一次,就算是定义了——没有单纯的定义变量而不赋值的语句。</li>
  247. <li>变量基本操作:
  248. <ul>
  249. <li>赋值: </li>
  250. <li>取值: </li>
  251. <li>判断isset(): 就是判断一个变量是否“有效”,不存在或值为null都是无效的,其他有效。</li>
  252. <li>删除unset():就是断开变量名跟数据之间的“引用关系” </li>
  253. </ul>
  254. </li>
  255. <li>变量命名基本规则
  256. <ul>
  257. <li>以字母或下划线开头</li>
  258. <li>后跟任意数量(含0个)的字母,数字和下划线 </li>
  259. </ul>
  260. </li>
  261. <li>变量命名推荐规则:
  262. <ul>
  263. <li>骆驼命名法: </li>
  264. <li>帕斯卡命名法: </li>
  265. <li>下划线间隔法: </li>
  266. </ul>
  267. </li>
  268. <li>变量间的传值方式:
  269. <ul>
  270. <li>赋值传值(值传递):在php中,变量之间默认都是“值传递”,语法形式为:$v1 = $v2; 即将一个变量的“数据内容”复制一份再赋值给另一个变量。</li>
  271. <li>引用传值(引用传递):可以使用“&amp;”运算符来强制引用传值,语法形式为:$v1 = &amp;$v2;
  272. <ul>
  273. <li>例:$v1 = 10; $v2 = &amp;$v1;</li>
  274. <li>$v2 = 20;</li>
  275. <li>则:echo $v1;//结果是20,这就是引用。</li>
  276. </ul>
  277. </li>
  278. </ul>
  279. </li>
  280. <li>可变变量: 变量的名字本身又是一个变量,则此时称其为可变变量,形式类似这样:$$变量名;
  281. <ul>
  282. <li>例:$a = 'b'; $b = 10; 则 echo $$a; 输出结果是10,此时“$$a”就是可变变量;</li>
  283. </ul>
  284. </li>
  285. <li>预定义变量(超全局变量/数组):
  286. <ul>
  287. <li>综述:
  288. <ul>
  289. <li>主要有:$_GET, $_POST, $_REQUEST, $_SERVER, $GLOBALS</li>
  290. <li>均是数组</li>
  291. <li>系统定义与维护</li>
  292. <li>具有超全局作用域</li>
  293. <li>不同情形下可能具有不同的值</li>
  294. </ul>
  295. </li>
  296. <li>$_GET:get请求(发送数据)的4种形式
  297. <ul>
  298. <li>&lt;form  method=”get” &gt;</li>
  299. <li>&lt;a  href=”abc.php?a=5&amp;b=xyz”&gt;内容&lt;/a&gt; </li>
  300. <li>location.href=”abc.php?a=5&amp;b=xyz” ;</li>
  301. <li>location.assign(“abc.php?a=5&amp;b=xyz”);</li>
  302. </ul>
  303. </li>
  304. <li>$_POST
  305. <ul>
  306. <li>基本形式:&lt;form  method=”post” &gt;</li>
  307. </ul>
  308. </li>
  309. <ul>
  310. <li>注意特殊的表单项的写法:多选通常要使用数组形式命名 </li>
  311. <li>另外,post方式时在action中还可以带参数,且作为get方式 </li>
  312. </ul>
  313. <li>$_REQUEST
  314. <ul>
  315. <li>实际是$_GET和$_POST的合集 </li>
  316. <li>如果两者有重名项,默认是$_POST项覆盖$_GET项 </li>
  317. <li>可以在php.ini配置文件中设定先后顺序,后者覆盖前者:request_order=GP </li>
  318. <li>$_GET, $_POST, $_REQUEST三种数据是相互独立的。 </li>
  319. </ul>
  320. </li>
  321. <li>$_SERVER:保存了服务器或客户端的有关信息。
  322. <ul>
  323. <li>常用的有:REMOTE_ADDR, DOCUMENT_ROOT, PHP_SELF </li>
  324. <li>输出所有项(可能每台服务器有所差异) </li>
  325. </ul>
  326. </li>
  327. <li>$GLOBALS:保存了用户定义的所有全局变量的数据 </li>
  328. </ul>
  329. </li>
  330. </ul>
  331. </li>
  332. <li>常量:
  333. <ul>
  334. <li>含义: </li>
  335. <li>定义形式:
  336. <ul>
  337. <li>使用define()函数定义
  338. <ul>
  339. <li>推荐常用名使用全大写形式</li>
  340. </ul>
  341. </li>
  342. <li>使用const语法定义
  343. <ul>
  344. <li>但const语法只能在“最顶层”的代码域中使用</li>
  345. <li>也即,const语法不能在函数中或条件语句中或其他表示一个“范围”的语句中使用</li>
  346. </ul>
  347. </li>
  348. </ul>
  349. </li>
  350. <li>使用形式:
  351. 常量的使用就是取得其值;
  352. 有以下2个方式:
  353. <ul>
  354. <li>1,直接使用名字:echo PI;</li>
  355. <li>2,或使用constant()函数:echo constant(&quot;PI&quot;);</li>
  356. </ul>
  357. </li>
  358. <li>常量和变量的区别
  359. <ul>
  360. <li>定义形式不同: </li>
  361. <li>使用形式不同:常量无需$符号 </li>
  362. <li>可变程度不同:常量的值不可以改变,常量也不可以销毁 </li>
  363. <li>作用范围不同:常量具有超全局作用域 (函数内外都可以直接使用)</li>
  364. <li>可用类型不同:常量只能存储标量类型 </li>
  365. </ul>
  366. </li>
  367. <li>判断常量是否存在:defined() </li>
  368. <li>一个特殊情况: 当使用未定义的常量时;</li>
  369. <li>预定义常量:
  370. <ul>
  371. <li>比如M_PI, PHP_OS, PHP_VERSION,PHP_INT_MAX </li>
  372. <li>参考手册〉附录〉保留字列表〉预定义常量 </li>
  373. </ul>
  374. </li>
  375. <li>魔术常量
  376. <ul>
  377. <li>比如:__DIR__,__FILE__,__LINE__ </li>
  378. <li>魔术常量其实类似变量,其值随着不同代码而变化;</li>
  379. <li>参考手册〉语言参考〉常量〉魔术常量 </li>
  380. </ul>
  381. </li>
  382. </ul>
  383. </li>
  384. <li>数据类型:
  385. <ul>
  386. <li>类型总体划分:
  387. <ul>
  388. <li>标量类型: int, float, string, bool</li>
  389. <li>复合类型: array, object</li>
  390. <li>特殊类型: null, resouce</li>
  391. </ul>
  392. </li>
  393. <li>整数类型:int, integer
  394. <ul>
  395. <li>整数的的不同进制形式的写法:
  396. <ul>
  397. <li>十进制写法:123</li>
  398. <li>八进制写法: 0123</li>
  399. <li>十六进制写法: 0x123</li>
  400. </ul>
  401. </li>
  402. <li>进制转换问题
  403. <ul>
  404. <li>十进制转二进制decbin(),除2取余倒着写 </li>
  405. <li>十进制转八进制decoct(),除8取余倒着写 </li>
  406. <li>十进制转十六进制dechex(),除16取余倒着写 </li>
  407. <li>二进制转十进制bindec(),每位数值乘以2的权值然后相加 </li>
  408. <li>八进制转十进制octdec() ,每位数值乘以8的权值然后相加 </li>
  409. <li>十六进制转十进制hexdec() ,每位数值乘以16的权值然后相加 </li>
  410. <li>注意:十进制转为其他进制结果是字符串,其他进制转为十进制要求给定数据是字符串形式</li>
  411. </ul>
  412. </li>
  413. </ul>
  414. </li>
  415. <li>浮点数类型:float,double
  416. ,real
  417. <ul>
  418. <li>浮点数的2种写法:
  419. <ul>
  420. <li>小数写法:</li>
  421. <li>科学计数法:</li>
  422. </ul>
  423. </li>
  424. <li>关于浮点数的细节知识
  425. <ul>
  426. <li>浮点数不应进行大小比较</li>
  427. <li>小数转二进制的做法:乘2并顺序取整数部分 </li>
  428. <li>当整数运算的结果超出整数的范围后,会自动转换为浮点数。</li>
  429. </ul>
  430. </li>
  431. </ul>
  432. </li>
  433. <li>字符串类型:string
  434. <ul>
  435. <li>单引号字符串: </li>
  436. <li>双引号字符串: </li>
  437. <li>定界符字符串heredoc: </li>
  438. <li>定界符字符串nowdoc: </li>
  439. <li>字符串中的变量:双引号和heredoc形式中可以识别 </li>
  440. </ul>
  441. </li>
  442. <li>布尔类型:bool, boolean
  443. <ul>
  444. <li>被当作false的数据 :null, &quot;&quot;, 0, 0.0, &quot;0&quot;, array(), 未定义</li>
  445. <li>其他的都会当作true</li>
  446. </ul>
  447. </li>
  448. <li>数组类型: array
  449. <ul>
  450. <li>定义: </li>
  451. <li>赋值: </li>
  452. <li>取值: </li>
  453. <li>下标,键,key </li>
  454. <li>值,value </li>
  455. <li>元素顺序问题 </li>
  456. </ul>
  457. </li>
  458. <li>对象类型: object
  459. <ul>
  460. <li>定义类: </li>
  461. <li>创建对象: </li>
  462. <li>对象属性操作:</li>
  463. <li>对象方法操作: </li>
  464. </ul>
  465. </li>
  466. <li>资源类型:resource
  467. <ul>
  468. <li>含义:基本上都是指对外部数据的引用。<br />
  469. 不是PHP语言通过某种语法形式“创造”的数据,而是外部本来就有该数据(比如数据库,文件,图片),PHP只是通过某种语法(或方式)来对其进行某些操作。 </li>
  470. </ul>
  471. </li>
  472. <li>空类型:null </li>
  473. <li>类型转换问题:
  474. <ul>
  475. <li>自动转换:
  476. 根据数据所使用的具体环境而可能会发生自动转换,
  477. 常见的自动转换情形如:
  478. <ul>
  479. <li>if(数据){}:转为bool类型 </li>
  480. <li>算术运算符:转为数字类型 </li>
  481. <li>连接运算符:转为字符串类型 </li>
  482. <li>比较运算符:转为布尔类型或数字类型 </li>
  483. </ul>
  484. </li>
  485. <li>强制转换:
  486. <ul>
  487. <li>语法:(目标类型)数据 </li>
  488. <li>常见:(int), (float), (string), (bool) </li>
  489. </ul>
  490. </li>
  491. </ul>
  492. </li>
  493. <li>类型相关的系统函数:
  494. <ul>
  495. <li>var_dump()</li>
  496. <li>getType(), setType();</li>
  497. <li>isset(), empty(), unset();</li>
  498. <li>is_XX类型() 系列函数:</li>
  499. </ul>
  500. </li>
  501. </ul>
  502. </li>
  503. <li>运算符
  504. <ul>
  505. <li>算术运算符:
  506. <ul>
  507. <li>一般 </li>
  508. <li>注意取余运算%,先取整,再取余 </li>
  509. <li>自增自减运算符
  510. <ul>
  511. <li>常规:对数字进行自加1或自减1。 </li>
  512. <li>字符串: 只能自增,且自增的效果就是“下一个字符” </li>
  513. <li>布尔值递增递减无效 </li>
  514. <li>null递减无效,递增结果为1 </li>
  515. </ul>
  516. </li>
  517. <li>前自增和后自增的区别(自减类似):
  518. <ul>
  519. <li>前++:先完成变量的递增运算,再取得该变量的值参与别的运算。 </li>
  520. <li>后++:先将原来变量的值临时存储,再将变量值递增,最后再将临时存储的值参与别的运算。 </li>
  521. <li>推论1:如果独立语句中进行自加运算,前自加后自加没有区别 。</li>
  522. <li>推论2:如果前自加后自加是放在别的语句中,则会有所区别。 </li>
  523. <li>推论3: 前加加比后加加效率略高(在循环中建议使用前加加)。</li>
  524. </ul>
  525. </li>
  526. </ul>
  527. </li>
  528. <li>比较运算符:
  529. <ul>
  530. <li>一般比较: </li>
  531. <li>==和===比较 </li>
  532. <li>不要对浮点数直接进行大小比较 </li>
  533. <li>常见不同类型的比较
  534. <ul>
  535. <li>有布尔值,转为布尔值比较 </li>
  536. <li>有数字转为数字比较 </li>
  537. <li>两边都是纯数字字符串,转为数字比较 </li>
  538. <li>否则就按字符串比较 </li>
  539. </ul>
  540. </li>
  541. </ul>
  542. </li>
  543. <li>逻辑运算符:
  544. <ul>
  545. <li>基本:
  546. <ul>
  547. <li>与运算:</li>
  548. <li>或运算:</li>
  549. <li>非运算:</li>
  550. </ul>
  551. </li>
  552. <li>短路现象
  553. <ul>
  554. <li>逻辑与短路: </li>
  555. <li>逻辑或短路: </li>
  556. </ul>
  557. </li>
  558. </ul>
  559. </li>
  560. <li>字符串运算符: </li>
  561. <li>赋值运算符:
  562. <ul>
  563. <li>标准赋值 </li>
  564. <li>自赋值 </li>
  565. </ul>
  566. </li>
  567. <li>条件(三目)运算符: </li>
  568. <li>位运算符:
  569. <ul>
  570. <li>位运算符基本规则:
  571. 针对0和1这2个二进制数字的基本位运算
  572. <ul>
  573. <li>&amp; : 两个都是1,结果才是1(有一个是0,结果就是0);</li>
  574. <li>| : 两个都是0,结果才是0(有一个是1,结果就是1);</li>
  575. <li>~ : 取二进制数字的相反值,即:~1的结果是0,~0的结果是1;</li>
  576. <li>^:2个运算数相同,结果是0,两个运算符不同,结果是1。</li>
  577. </ul>
  578. </li>
  579. <li>按位与运算(&amp;): </li>
  580. <li>按位或运算(|): </li>
  581. <li>按位非运算(~): </li>
  582. <li>按位左移运算(&lt;&lt;): </li>
  583. <li>按位右移运算(&gt;&gt;): </li>
  584. <li>按位异或运算(^): </li>
  585. <li>补充介绍:原码,反码,补码
  586. <ul>
  587. <li>原码:一个数字的原始二进制形式,人可理解。其中最左1位为符号位,0表示正数,1表示负数。 </li>
  588. <li>反码:正数的反码是其本身(即不变),负数的反码:符号位不变,各位取反</li>
  589. <li>补码:正数的补码是其本身(即不变),负数的补码:符号位不变,各位取反后加1(即反码加1)</li>
  590. <li>补码还原:正数无需还原,负数:符号位不变,各位取反加1——三码转换时,符号位独立(不参与转换)</li>
  591. <li>计算机cpu中的运算,只有加法运算,没有减法运算</li>
  592. <li>用补码来表示一个数,就可以将减法转换为加法:15-13相当于15+(-13) ——实际运算时,符号位一起(参与运算)</li>
  593. <li>举例计算:5+3, 5-3 </li>
  594. </ul>
  595. </li>
  596. <li> 应用:管理一组对象(事物)的开关状态
  597. <ul>
  598. <li>有些事物(数据)只有2个状态(值),此时可以称为“开关状态”,比如灯的亮灭状态,商品是否推荐状态</li>
  599. <li>用二进制原理可以方便轻松管理多个该类事物的状态:</li>
  600. <li>每个事物的状态用一个变量值来表示:$S1=1,$S2=2,$S3=4,$S4=8,$S5=16,...</li>
  601. <li>则所有灯的总状态变量:$state = &quot;11111&quot;(2进制)就表示他们都是“开”的。$state = &quot;11110&quot;(2进制)就表示第1盏灯是关的,其余是开的。$state=&quot;11010&quot;(2进制)就表示第1第3盏灯是关的,其余是开的。</li>
  602. <li>判断某盏灯的状态(亮或灭):如果($state &amp; $Sn)&gt;0,则表示亮,否则表示灭(其中$Sn代表某盏灯,即$S1,$S2,$S3,$S4,$S5之一,下同)。</li>
  603. <li>对于任意的初始状态,想要打开某盏灯:$state = $state | $Sn。</li>
  604. <li>对于任意的初始状态,想要关闭某盏灯:$state = $state &amp; ~$Sn。</li>
  605. </ul>
  606. </li>
  607. </ul>
  608. </li>
  609. <li>数组运算符:+  ==   !=   &lt;&gt;    ===    !==
  610. <ul>
  611. <li>联合(+):将右边的数组项合并到左边数组的后面,得到一个新数组。如有重复键,则结果以左边的为准</li>
  612. <li>相等(==): 如果两个数组具有相同的键名和键值(可以顺序不同,或类型不同),则返回true</li>
  613. <li>不相等(!=, &lt;&gt;) :如果两个数组不是相等(==),则返回true</li>
  614. <li>全等(===):如果两个数组具有相同的键名和键值且顺序和类型都一样,则返回true</li>
  615. <li>不全等(!==) : 如果两个数组不是全等(===),则返回true</li>
  616. </ul>
  617. </li>
  618. <li>错误控制运算符@:用于一个表达式的前面,以抑制该表达式可能产生的报错信息。</li>
  619. <li>运算符的优先级问题
  620. <ul>
  621. <li>要意识到运算符有优先级问题</li>
  622. <li>括号最优先,赋值最落后(通常)</li>
  623. <li>先乘除后加减</li>
  624. <li>大致:单目运算符〉算术运算符〉比较运算符〉逻辑运算符(除了“非”运算)</li>
  625. </ul>
  626. </li>
  627. </ul>
  628. </li>
  629. <li>流程控制:
  630. <ul>
  631. <li>流程图基本符号:开始结束,语句(块),判断,输入输出,走向 </li>
  632. <li>分支结构
  633. <ul>
  634. <li>if</li>
  635. <li>if else</li>
  636. <li>if else if(推荐)</li>
  637. <li>if elseif</li>
  638. <li>if else if else</li>
  639. <li>switch
  640. <ul>
  641. <li>break的作用 </li>
  642. <li>不使用break的技巧</li>
  643. </ul>
  644. </li>
  645. </ul>
  646. </li>
  647. <li>循环结构:
  648. <ul>
  649. <li>while</li>
  650. <li>do while</li>
  651. <li>for</li>
  652. <li>foreach(用于数组遍历循环) </li>
  653. <li>循环的中断
  654. <ul>
  655. <li>break</li>
  656. <li>continue</li>
  657. <li>中断层级 </li>
  658. </ul>
  659. </li>
  660. </ul>
  661. </li>
  662. <li>部分流程控制的替换语法:
  663. <ul>
  664. <li>if ( ... ) :   。。。。  endif; </li>
  665. <li>if ( ... ) :  。。。else: 。。。 endif; </li>
  666. <li>if ( ... ): 。。。elseif( ... ) : 。。。 elseif( ... ): 。。。 else: 。。。 endif; </li>
  667. <li>switch( ... ) : case ... case ... endSwitch;</li>
  668. <li>while(...): 。。。endwhile;</li>
  669. <li>for(...; ...; ...): :。。。 endfor;</li>
  670. </ul>
  671. </li>
  672. <li>
  673. goto语句:
  674. <ul>
  675. <li>基本形式: goto Flag; ... Flag: .....</li>
  676. <li>注意事项:
  677. <ul>
  678. <li>不能跳入循环中</li>
  679. <li>不能跳入函数中</li>
  680. <li>不能跳出函数外</li>
  681. <li>不能跳出文件外</li>
  682. </ul>
  683. </li>
  684. </ul>
  685. </li>
  686. <li>控制脚本执行进度
  687. <ul>
  688. <li>die() / exit();</li>
  689. <li>sleep()</li>
  690. </ul>
  691. </li>
  692. </ul>
  693. </li>
  694. <li>文件加载
  695. <ul>
  696. <li>综述和基本语法:include, require, include_once, require_once:</li>
  697. <li>文件路径问题
  698. <ul>
  699. <li>相对路径: ./    ../</li>
  700. <li>绝对路径: c:/abc/def/ 或:http://www.abc.com</li>
  701. <li>无路径设定(只给出文件名,不推荐):默认会在当前网页所在目录下找该文件</li>
  702. </ul>
  703. </li>
  704. <li>文件载入和执行过程:
  705. <ul>
  706. <li>从include语句处退出php脚本模式(进入html代码模式)</li>
  707. <li>载入include语句所设定的文件中的代码,并执行之(如同在当前文件中一样)</li>
  708. <li>退出html模式重新进入php脚本模式,继续之后的代码</li>
  709. </ul>
  710. </li>
  711. <li>include_once 和include的区别</li>
  712. <li>require 和 include的区别:引用失败(出错)时,include警告并继续,require终止。</li>
  713. <li>require 和 require_once的区别</li>
  714. <li>在被载入文件中 return 关键字的作用
  715. <ul>
  716. <li>默认情况下include载入成功返回1,载入失败返回false</li>
  717. <li>但被包含的文件中可以使用return语句返回数据值并终止该文件的后续部分的执行</li>
  718. <li>return返回的数据如同函数返回值一样可以进一步处理(比如赋值给其他变量)</li>
  719. </ul>
  720. </li>
  721. </ul>
  722. </li>
  723. <li>错误处理:
  724. <ul>
  725. <li>错误的分类:
  726. <ul>
  727. <li>语法错误:程序没法运行,直接提示语法错误</li>
  728. <li>运行时错误:只有程序运行到某行,或在某些特定的情形下运行才会发生的错误。</li>
  729. <li>逻辑错误:程序从头到尾运行都没有发生(并提示)错误,但程序运行计算的结果是错误的。</li>
  730. </ul>
  731. </li>
  732. <li>错误分级与代号: 不同的错误会导致不同程度的程序运行反应,这就是错误的分级。
  733. 错误代号其实只是一个系统内部常量。也就是说,这些错误代号是一个系统预先定义好的数据,然后系统根据发生的不同错误情形,而分配不同的值供程序员使用来判断错误类型。
  734. <ul>
  735. <li>系统错误:E_ERROR, E_WARNING, E_NOTICE</li>
  736. <li>用户错误:E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE</li>
  737. <li>所有错误: E_ALL | E_STRICT</li>
  738. <li>PHP手册〉函数参考〉影响PHP行为的扩展〉错误处理〉预定义常量</li>
  739. </ul>
  740. </li>
  741. <li>错误的触发:
  742. <ul>
  743. <li>程序运行时触发。</li>
  744. <li>程序中通过触发函数来人为触发3种用户错误
  745. <ul>
  746. <li>trigger_error(&quot;错误提示文字&quot;, 错误类型T)</li>
  747. <li>错误类型T:E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE之一</li>
  748. </ul>
  749. </li>
  750. <li>其中,系统关键错误(E_ERROR)或用户关键错误(E_USER_ERROR)一旦发生,则程序停止执行。</li>
  751. </ul>
  752. </li>
  753. <li>显示错误报告:
  754. <ul>
  755. <li>display_errors = On || Off ,或 ini_set(&quot;display_errors&quot;, 0或1);</li>
  756. <li>error_reporting = E_ALL,或ini_set('error_reporting', E_ALL);</li>
  757. </ul>
  758. </li>
  759. <li>记录错误日志:
  760. <ul>
  761. <li>log_errors = On||Off, 或ini_set('log_errors', 1或0);</li>
  762. <li>error_log = &quot;错误日志文件名&quot;, 或ini_set('error_log', &quot;错误日志文件名&quot;);</li>
  763. <li>error_log = &quot;syslog&quot;则会将错误信息记录到系统日志去。</li>
  764. </ul>
  765. </li>
  766. <li>自定义错误处理器:
  767. <ul>
  768. <li>设定错误由我们自定义函数来处理:set_error_handler(&quot;函数名&quot;);</li>
  769. <li>定义该函数,带4个参数:function errorHandler($errNo, $errMsg, $errFile, $errLine){...}</li>
  770. <li>这样,发生错误之后,就会调用该函数来处理该错误</li>
  771. <li>但如果发生系统关键错误(E_ERROR),则不会去调用自定义错误处理函数,而是会直接停止运行,并按php.ini的设定显示或记录错误信息。</li>
  772. <li>除了系统关键错误,其他错误发生后则不会再去显示或记录错误了,而是按照自定义错误处理函数中的代码执行。</li>
  773. </ul>
  774. </li>
  775. </ul>
  776. </li>
  777. <li>函数
  778. <ul>
  779. <li>基本使用
  780. <ul>
  781. <li>函数定义形式</li>
  782. <li>函数调用形式</li>
  783. <li>函数调用流程分析
  784. <ul>
  785. <li>开始调用:实际参数传数据给形式参数</li>
  786. <li>程序执行流程进入到函数中(一个独立的运行空间),跟全局执行空间是隔离的</li>
  787. <li>按常规的程序逻辑执行函数中的代码</li>
  788. <li>如果碰到return语句,则终止函数的执行,跳回函数开始调用的位置;</li>
  789. <li>如果执行到函数的最后位置,也同样跳回函数开始调用的位置</li>
  790. </ul>
  791. </li>
  792. </ul>
  793. </li>
  794. <li>函数参数
  795. <ul>
  796. <li>形式参数,形参,parameter</li>
  797. <li>实际参数,实参,arguement</li>
  798. <li>参数的默认值
  799. <ul>
  800. <li>形式:形式参数上给其赋值(就是默认值)</li>
  801. <li>要求:
  802. <ul>
  803. <li>默认值不能是对象或资源类型;</li>
  804. <li>默认值只能是常量表达式,或常量,不能是变量</li>
  805. <li>默认值参数必须放在非默认值参数的右边</li>
  806. </ul>
  807. </li>
  808. </ul>
  809. </li>
  810. <li>参数传值问题
  811. <ul>
  812. <li>默认情况下,参数传值采用的是“值传递”的方式进行传值。</li>
  813. <li>可以在形式参数的前面使用“&”符号,来达到“引用传递”的传值方式。</li>
  814. <li>注意1:如果是引用传值,则实参只能是一个“变量”——也即变量跟变量之间才有引用传值方式问题。</li>
  815. <li>注意2:引用传值的形参变量,在函数内部改变该形参变量的值,则对应实参变量的值也就改变。</li>
  816. </ul>
  817. </li>
  818. <li>参数的数量问题
  819. <ul>
  820. <li>常规:实际参数数量跟形式参数一致;</li>
  821. <li>实际参数数量多于形式参数,不报错(很多其他语言是报错的);</li>
  822. <li>实际参数数量少于形式参数,则分为:
  823. <ul>
  824. <li>实际参数数量少于形式参数的非默认参数数量,则报错</li>
  825. <li>实际参数数量不少于形式参数的非默认参数数量,则不报错,不够部分,使用默认参数值</li>
  826. </ul>
  827. </li>
  828. <li>不定参数数量的情形:
  829. <ul>
  830. <li>类似:var_dump()可以传递不定个数的参数,如何做实现?</li>
  831. <li>定义的时候不定义形式参数</li>
  832. <li>在函数内部,使用func_get_args()获取所有传递过来的实际参数值,结果是一个数组</li>
  833. <li>在函数内部,使用func_get_arg(n)获得第n个参数(n从0开始)</li>
  834. <li>在函数内部,使用func_num_args()获得所有实际参数的个数</li>
  835. </ul>
  836. </li>
  837. </ul>
  838. </li>
  839. </ul>
  840. </li>
  841. <li>函数的返回值
  842. <ul>
  843. <li>一个函数,可以返回数据值,也可以不返回。需不需要返回数据值,由应用所需来决定。</li>
  844. <li>如果需要返回值,则使用return语句后面跟一个数据(直接数据或变量数据或常量数据),就可以返回该数据(值)。</li>
  845. <li>如果不需要返回值,则函数中可以没有return语句,或有return语句但没有其后没有跟一个数据。</li>
  846. <li>return语句的作用,不管后面跟不跟数据值,都会立即终止函数的执行,返回到函数调用的位置并继续后续工作。</li>
  847. </ul>
  848. </li>
  849. <li>函数的其他形式
  850. <ul>
  851. <li>可变函数:一个变量名后面带括号,则会被识别为可变函数:找到与该变量的值同名的函数并执行之。</li>
  852. <li>匿名函数:没有名字的一个函数,可将其赋值给一个变量,然后该变量后面加括号就可以调用该函数
  853. <ul>
  854. <li>$f1 = function($p1, $p2) { ........ }</li>
  855. <li>call_user_func_array($f1, array(1, 2)); </li>
  856. </ul>
  857. </li>
  858. <li>或纯粹是一个没有名字的函数,且直接当作其他函数的参数(即该函数的参数是一个函数)。
  859. <ul>
  860. <li>call_user_func_array( <strong>function($p1, $p2) { ........ }</strong> , array(1, 2) ); array_walk(数组,$f1)</li>
  861. <li>这种当作其他函数参数的函数,通常称为“callable”(可调函数),或“callback”(回调函数)。</li>
  862. </ul>
  863. </li>
  864. </ul>
  865. </li>
  866. <li>变量作用域
  867. <ul>
  868. <li>局部作用域(局部变量)
  869. <ul>
  870. <li>静态局部变量:静态变量只能赋值为一个直接的标量值,不能是计算值,或另一个变量值。</li>
  871. </ul>
  872. </li>
  873. <li>全局作用域(全局变量)</li>
  874. <li>超全局作用域(超全局变量)</li>
  875. <li>局部访问全局变量
  876. <ul>
  877. <li>使用$GLOBALS超全局数组</li>
  878. <li>使用global关键字:本质是设定一个局部变量来引用某个全局变量,删掉该局部变量,全局变量仍然存在</li>
  879. <li>$GLOBALS数组中的元素跟全局变量是一一对应关系。删掉(unset)一个,另一个也就没有了</li>
  880. <li>使用$GLOBALS数组的一个新元素,则可以“创造”全局变量,如:$GLOBALS['v1'] = 1; #假设之前没有$v1这个全局变量,则这一行之后就有了</li>
  881. </ul>
  882. </li>
  883. </ul>
  884. </li>
  885. <li>有关函数的系统函数
  886. <ul>
  887. <li>function_exists()</li>
  888. <li>func_get_arg()</li>
  889. <li>func_get_args()</li>
  890. <li>func_num_args()</li>
  891. </ul>
  892. </li>
  893. <li>函数相关编程思想
  894. <ul>
  895. <li>递归思想:</li>
  896. <li>递推(迭代)思想:</li>
  897. </ul>
  898. </li>
  899. <li>常用内部函数:
  900. <ul>
  901. <li>字符串函数:
  902. <ul>
  903. <li>输出与格式化:echo , print, printf, print_r, var_dump.</li>
  904. <li>字符串去除与填充:trim, ltrim, rtrim, str_pad</li>
  905. <li>字符串连接与分割:implode, join, explode, str_split</li>
  906. <li>字符串截取:substr, strchr, strrchr, </li>
  907. <li>字符串替换:str_replace, substr_replace</li>
  908. <li>字符串长度与位置: strlen, strpos, strrpos, </li>
  909. <li>字符转换:strtolower, strtoupper, lcfirst, ucfirst, ucwords</li>
  910. <li>特殊字符处理:nl2br, addslashes, htmlspecialchars, htmlspecialchars_decode,</li>
  911. </ul>
  912. </li>
  913. <li>时间函数:
  914. <ul>
  915. <li>time, microtime, mktime, date, idate, strtotime, date_add, date_diff, date_default_timezone_set, date_default_timezone_get</li>
  916. </ul>
  917. </li>
  918. <li>数学函数:
  919. <ul>
  920. <li>max, min, round, ceil, floor, abs, sqrt, pow, round, rand</li>
  921. </ul>
  922. </li>
  923. </ul>
  924. </li>
  925. </ul>
  926. </li>
  927. <li>数组
  928. <ul>
  929. <li>数组基础
  930. <ul>
  931. <li>定义</li>
  932. <li>取值</li>
  933. <li>赋值</li>
  934. </ul>
  935. </li>
  936. <li>数组分类
  937. <ul>
  938. <li>从键值关系来分
  939. <ul>
  940. <li>关联数组</li>
  941. <li>索引数组</li>
  942. <li>混合数组</li>
  943. </ul>
  944. </li>
  945. <li>从数组层次来分
  946. <ul>
  947. <li>一维数组</li>
  948. <li>多维数组</li>
  949. <li>混合数组</li>
  950. <li>“维”的本质</li>
  951. </ul>
  952. </li>
  953. </ul>
  954. </li>
  955. <li>数组遍历
  956. <ul>
  957. <li>foreach基本语法</li>
  958. <li>数组指针操作与遍历原理</li>
  959. <li>foreach遍历流程图</li>
  960. <li>for+next遍历数组</li>
  961. <li>while+each()+list()遍历数组</li>
  962. <li>foreach遍历的细节探讨:
  963. <ul>
  964. <li>foreach也是正常的循环语法结构,可以有break和continue等操作。</li>
  965. <li>遍历过程中值变量默认的传值方式是值传递。</li>
  966. <li>遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key =&gt; &amp;$value){ ... }</li>
  967. <li>foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环。</li>
  968. <li>foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。</li>
  969. </ul>
  970. </li>
  971. </ul>
  972. </li>
  973. <li>数组函数
  974. <ul>
  975. <li>指针操作函数: current, key, next, prev, reset, end, each</li>
  976. <li>单元操作函数: array_pop,array_push, array_shift, array_unshift, array_slice, array_splice</li>
  977. <li>排序函数: sort, asort, ksort, usort, rsort, arsort , krsort , shuffle, </li>
  978. <li>查找函数: in_array, array_key_exists, array_search</li>
  979. <li>其他函数: count, array_reverse, array_merge, array_sum, array_keys, array_values,array_map, array_walk, range</li>
  980. </ul>
  981. </li>
  982. <li>数组排序算法
  983. <ul>
  984. <li>冒泡排序</li>
  985. <li>选择排序</li>
  986. <li>插入排序</li>
  987. <li>快速排序</li>
  988. </ul>
  989. </li>
  990. <li>数组查找算法
  991. <ul>
  992. <li>顺序查找</li>
  993. <li>二分查</li>
  994. </ul>
  995. </li>
  996. </ul>
  997. </li>
  998. <li></li>
  999. </ul>
  1000. </body>
  1001. </html>

php核心纪要 整理的更多相关文章

  1. 【Windows】windows核心编程整理(下)

    windows核心编程整理(上) windows核心编程整理(下) 线程的堆栈 每当创建一个线程时,系统就会为线程的堆栈(每个线程有他自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个以保 ...

  2. 【Windows】windows核心编程整理(上)

    小续 这是我11年看<windows核心编程>时所作的一些笔记,现整理出来共享给大家 windows核心编程整理(上) windows核心编程整理(下) 线程的基础知识 进程是不活泼的,进 ...

  3. 2019年Spring核心知识点整理,看看你掌握了多少?

    前言 如今做Java尤其是web几乎是避免不了和Spring打交道了,但是Spring是这样的大而全,新鲜名词不断产生,学起来给人一种凌乱的感觉,在这里总结一下,理顺头绪. Spring 概述 Spr ...

  4. Java 生态核心知识点整理

    又到了求职的金三银四的黄金月份,我相信有不少小伙伴已经摩拳擦掌的准备寻找下一份工作. 就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句 ...

  5. Flex核心属性整理

    main axis和cross axis的位置不一定是水平和垂直的,以flex-direction的值即为主轴方向 justify-content:主轴对齐方式 space-between:将多余空间 ...

  6. .NET 解决方案 核心库整理

    一系列令人敬畏的.NET核心库,工具,框架和软件: https://www.cnblogs.com/weifeng123/p/11039345.html 企业级解决方案收录:  https://www ...

  7. 阿里 P8 高级架构师吐血总结的 《Java 核心知识整理&面试.pdf》| 免费分享

    最近在网上发现一份非常棒的 PDF 资料,据说是阿里 P8 级高级架构师吐血总结的, 其中内容覆盖很广,包括 Java 核心基础.Java 多线程.高并发.Spring.微服务.Netty 与 RPC ...

  8. Nifi简介及核心概念整理

    简介 Apache NiFi 是一个易于使用.功能强大而且可靠的数据拉取.数据处理和分发系统,用于自动化管理系统间的数据流. 它支持高度可配置的指示图的数据路由.转换和系统中介逻辑,支持从多种数据源动 ...

  9. 两年经验拿到蚂蚁金服,字节offer,附上金九银十BAT面试核心知识点整理

    前言 我自己是本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找 ...

随机推荐

  1. [cloud][sdn] openstack openflow opendaylight openvswitch

    https://www.quora.com/What-is-the-relation-between-OpenStack-OpenDaylight-OpenFlow-and-Open-vSwitch- ...

  2. 为QtCreator项目模板添加自动中文支持

    每用QtCreator创建一个Qt项目时都要为它添加中文支持,比如qt4: 就要在main.cpp里添加 QTextCodec* codec = QTextCodec::codecForName(&q ...

  3. .net core开发工具与SDK

    一.开发工具 开发工具使用Visual Studio 2017 下载官网:https://visualstudio.microsoft.com/zh-hans/vs/ 相关的安装已经有很多文章介绍过, ...

  4. CF997C Sky Full of Stars 数论

    正解:容斥 解题报告: 传送门! 两个方法,分别港下QAQ 先说第一种 首先要推出式子,就∑2*C(i,n)*(-1)i+1*3i*3n*n-n+3*∑∑(-1)i+j+1*C(i,n)*C(j,n) ...

  5. 【JMeter】【性能测试】响应信息不明确的接口做关联

    1:做接口关联的时候,发现接口响应没有可以利用的信息.如下图只返回了一个成功的标识,这样的接口如何与之关联? 通过抓包观察后续的修改功能,发现需要传入一个id和一个title.但是前面的接口没有返回, ...

  6. h5 中的 section 标签

    转自 http://www.studyofnet.com/news/331.html 本文导读:<section> 标签定义文档中的节(section.区段).比如章节.页眉.页脚或文档中 ...

  7. dedecms如何去除后台登陆验证码

    用dedecms批量建站一般直接把文件打包复制,然后导入数据库,一个新网站就好了,但有时后台一直无法登录,提示验证码错误.那我们就想怎么把验证码关闭,现在就给大家解决织梦去掉后台登陆验证码.我们知道d ...

  8. NYOJ 食物链(WA)

    1.WA代码 思路:预先分好3类,对每一行数据进行分类和真话假话判断 WA原因:前面某些行的数据 需要依赖 后面某些行给的数据 才能进行分类 初步改正思路( 对于前面给的无法直接分类的数据进行记录,等 ...

  9. 实习培训——Java异常处理(8)

    实习培训——Java异常处理(8) Java 异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 j ...

  10. 删除docker registry镜像脚本

    使用: 删除指定镜像:/usr/local/bin/delete_docker_registry_image -i 镜像名 删除指定镜像指定标签:/usr/local/bin/delete_docke ...