1擦俐、function foo( &$var ){ unset($var); } $a=5; foo($a); var_dump($a);輸出什么?
????輸出 int(5) ;
????//如果在函數(shù)中?unset()?一個通過引用傳遞的變量乍赫,則只是局部變量被銷毀
2、include 和 require 的區(qū)別是什么?為避免多次包含同一文件,可以用(?)語句替代他們?
????include: 當(dāng)引用文件存在錯誤時,不會中斷文件的執(zhí)行,系統(tǒng)給出一個警告性錯誤放仗。
????require:當(dāng)引用文件存在錯誤時,會終止文件的執(zhí)行,系統(tǒng)報(bào)一個致命性的錯誤寂诱。
????使用require語句來調(diào)用文件時,只要程序一執(zhí)行,就會立刻調(diào)用外部文件进肯。
????使用include語句調(diào)用文件時,只有程序執(zhí)行到該代碼段時,才會調(diào)用外部文件牡彻。
????include_once:使用該語句導(dǎo)入文件前先檢測該文件是否在該頁面的其他部分被應(yīng)用過。如果有崇呵,則不會重復(fù)引用該文件缤剧,程序只能引用一次
????require_once:和require功能基本一樣,不同的是它先會檢查要引用的文件是不是已將在該程序中的其他地方被引用過,如果有域慷,則不會在重復(fù)調(diào)用該文件
3荒辕、簡述關(guān)鍵字this、parent犹褒、self抵窒、static 、const分別為什么意思?
????this:當(dāng)前實(shí)例化的對象化漆。parent:指向當(dāng)前父類的指針估脆。self:當(dāng)前類的本身。
????static:聲明靜態(tài)的方法或?qū)傩宰啤onst:定義一個常量的關(guān)鍵字疙赠。
4、簡述這4個方法在php中的用途 __call()朦拖、__callStatic()圃阳、__get()、__set();
????__call( ):當(dāng)調(diào)用的方法不存在或者權(quán)限不足時,會自動執(zhí)行璧帝。
????__callStatic( ):當(dāng)調(diào)用的靜態(tài)方法不存在或者權(quán)限不足時捍岳、會自動執(zhí)行。
????__get():用來獲取私有屬性;? ? __set():用來設(shè)置私有屬性睬隶。
5锣夹、http狀態(tài)碼: 200、301苏潜、302银萍、400、401恤左、403贴唇、404、500飞袋、502戳气、503分別表示什么?
????200:表示成功????301:被請求的資源已永久移動到新位置? ? 302:請求的資源現(xiàn)在臨時從不同的url響應(yīng)請求
????400:通用的客戶端錯誤狀態(tài)? ? 401:當(dāng)前請求需要用戶驗(yàn)證? ? 403:服務(wù)器已經(jīng)理解請求,但是拒絕執(zhí)行它
????404:請求失敗巧鸭,請求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)
????500:服務(wù)器錯誤響應(yīng)? ? 502:作為代理工作的服務(wù)器執(zhí)行請求時出現(xiàn)問題
????503:由于臨時的服務(wù)器維護(hù)或者過載瓶您,服務(wù)器當(dāng)前無法處理請求。
5、http協(xié)議有幾種請求方法?
????get : 發(fā)送請求獲取服務(wù)器上的資源
????post:向服務(wù)器提交資源讓服務(wù)器處理
????delete:請求服務(wù)器刪除某資源
????put:向指定資源位置上傳其最新內(nèi)容
????head:主要用來獲取響應(yīng)頭信息
????trace:回顯服務(wù)器收到的請求
????options:返回服務(wù)器針對特定資源所支持的HTTP請求方法
????connect:h t t p 協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器
6览闰、有數(shù)組12.34,要得到0.34,用程序如何時實(shí)現(xiàn)?
????$num = 12.34; echo bcsub( $num,floor($num),2 );? //輸出0.34
????bcsub(? );? //將二個高精確度數(shù)字相減? 1參數(shù)減去2參數(shù),3參數(shù)保留小數(shù)點(diǎn)幾位數(shù)
????floor();? //舍去小數(shù)部分取整
7芯肤、MySQL中 varchar 與 char 有什么區(qū)別?
????varchar是可變長度,比如varchar(10),如果小于10,則插入多少就算多少個。
????cahr是固定長度,比如char(10),如果插入的字符小于10個,則用空格填滿,永遠(yuǎn)都是10個压鉴。
8、優(yōu)化sql 語句 "SELECT * from product WHERE state=1 OR level =2";
? ? " select * form product where state = 1 union select * from product where level = 2 ";
????union //只是簡單將兩個結(jié)果合并后返回锻拘。如有重復(fù)記錄則去掉重復(fù)記錄油吭。
? ? union //只是單純的把各個查詢組合到一起。不會去判斷數(shù)據(jù)是否重復(fù)署拟。
? ? 因?yàn)槭褂?or 會導(dǎo)致數(shù)據(jù)庫引擎放棄索引進(jìn)行全表掃描婉宰。
9、優(yōu)化sql語句"SELECT * FROM t WHERE id IN (2,3)"
? ? "select * form t where id = 1 union select * from t where id = 2?"
? ??如果是連續(xù)數(shù)值推穷,可以用between代替:?用于 WHERE 表達(dá)式中心包,選取介于兩個值之間的數(shù)據(jù)范圍。
? ? "select * from t where id between 2 and 3 "? ??
? ??盡量避免使用in 和not in馒铃,會導(dǎo)致數(shù)據(jù)庫引擎放棄索引進(jìn)行全表掃描蟹腾。
10、優(yōu)化sql語句"SELECT * FROM t1 WHERE username IN (SELECT username FROM t2)"
? ?????"select * from t1 where exists( select * from t2 where t2.username = t1.username )"
????? ??exists;? ? //用于檢查子查詢返回時true或false区宇。//外層查詢表小于子查詢表娃殖,則用exists,反之用in。
????? ? //返回真時,則外層查詢語句將進(jìn)行查詢议谷。//返回假時,外層查詢語句不查詢或查詢不出任何記錄
11炉爆、優(yōu)化sql語句SELECT * FROM t WHERE username LIKE '%li%
? ??????盡量避免在字段開頭模糊查詢,會導(dǎo)致數(shù)據(jù)庫引擎放棄索引進(jìn)行全表掃描
? ??????SELECT * FROM t WHERE username LIKE 'li%'
????????優(yōu)化方式:盡量在字段后面使用模糊查詢
12卧晓、優(yōu)化sql語句 SELECT * FROM t2 WHERE score/10 = 9
? ??????盡量避免在where條件等號的左側(cè)進(jìn)行表達(dá)式芬首,會導(dǎo)致數(shù)據(jù)庫引擎放棄索引進(jìn)行全表掃描
? ? ? ? 優(yōu)化方式: 可以將表達(dá)式、函數(shù)操作移動到等號右側(cè)逼裆。
? ? ? ? select * from t2 where score = 10 * 9
?13郁稍、優(yōu)化sql語句 SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'?
? ????????盡量避免在where條件執(zhí)行函數(shù)操作,會導(dǎo)致數(shù)據(jù)庫引擎放棄索引進(jìn)行全表掃描
? ? ? ? ? ?select * from t2 where username like 'li%'
? ? ? ? ? ? substr( str,pos,len )? ? //從pos開始位置,截取len個字符(空白也算)
14波附、以下代碼會產(chǎn)生什么?為什么?
? ? ? ? $num = 10;
? ? ? ? function test(){ $num=$num*10; }??
? ? ? ? test();? ? echo $num;
? ? ? ? ? 答: 函數(shù)內(nèi)會報(bào)錯,因?yàn)榫植孔饔糜騼?nèi)不能訪問全局變量艺晴、全局作用域內(nèi)不能訪問局部變量。??
????????????????輸出10;
15掸屡、php語言的一大優(yōu)勢是跨平臺,什么是跨平臺?
? ? ? ? ? ? 1封寞、php是一門解釋性腳本語言。所以php的程序如果需要運(yùn)行仅财,首先需要php解釋器將php程序文件讀入狈究,然后再進(jìn)行解析執(zhí)行,所以php的程序編寫是面向php解釋器,而不是平臺,而每個平臺都有對應(yīng)的php解釋器版本,所以只要php代碼滿足對應(yīng)的解釋器盏求,就能運(yùn)行抖锥,也就看上去實(shí)現(xiàn)了跨平臺運(yùn)行亿眠。
? ? ? ? ? ? 2、PHP的運(yùn)行環(huán)境最優(yōu)搭配為Apache+MySQL+PHP磅废,此運(yùn)行環(huán)境可以在不同操作系統(tǒng)(例如windows纳像、Linux等)上配置,不受操作系統(tǒng)的限制拯勉,所以叫跨平臺竟趾。
16、web 開發(fā)中數(shù)據(jù)提交方式有幾種?有什么區(qū)別?百度使用哪種方式?
? ? ? ? 可以通過? get 和 post 宫峦、ajax 岔帽。
????????使用get方式向服務(wù)器發(fā)送表單數(shù)據(jù)時,表單數(shù)據(jù)將附加在URL屬性的末端导绷;
? ? ? ? 使用post方法發(fā)送數(shù)據(jù)時犀勒,數(shù)據(jù)會放置在主體中發(fā)送。
? ??????js支持ajax方式創(chuàng)建HTTP請求妥曲,可以通過在HTML頁面元素的事件處理函數(shù)中創(chuàng)建ajax請求贾费,在url參數(shù)里攜帶所需提交的參數(shù),從而提交到后臺逾一,這種方式提交后頁面不會刷新铸本。
17、什么是會話跟蹤技術(shù)遵堵?在項(xiàng)目中你是怎么樣用到的?
????????????當(dāng)一個客戶端連接到服務(wù)器時箱玷,服務(wù)器會出現(xiàn)一個session,客戶端會保存一些cookie數(shù)據(jù)陌宿,用于記錄用戶的狀態(tài)锡足。一般在項(xiàng)目中用于登錄狀態(tài)的檢測以及一些信息的關(guān)聯(lián)。
18壳坪、掌握 php 的哪些框架舶得、模板引擎、系統(tǒng)等
? ? ? ? ? ? tp框架爽蝴、Smarty沐批、windos和linux操作系統(tǒng)
19、說一下你所掌握的網(wǎng)頁前端技術(shù)有哪些?
? ? ? ? html? +css蝎亚、jq 九孩、js
20、ajax的優(yōu)勢是什么?
? ? ? ? 1发框、異步請求躺彬,不妨礙用戶瀏覽頁面或者其他操作
? ? ? ? 2、局部刷新、無需重新刷新頁面
? ? ? ? 3宪拥、AJAX 基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)仿野,不需要下載瀏覽器插件
? ? ? ? 4、AJAX可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端她君、減輕服務(wù)器和帶寬的負(fù)擔(dān)
21脚作、列舉出10個數(shù)據(jù)庫操作常用的關(guān)鍵字
? ? ? ? 1、limit? ?(這個可以用來做分頁)
? ? ? ? mysql>select * from table limit 5,10;? ? //檢索記錄行從第5條開始取10條,也就是6-15
? ? ? ? mysql>select * from table limit 10,-1;? ? //檢索記錄行從第10條開始,到結(jié)束(-1)
? ? ? ? mysql>select * from table limit 5;? ? //檢索前 5 個記錄行
? ? ? ? SELECT * FROM t_user WHERE email=?;? ? //由于email 沒有索引,會導(dǎo)致全表掃描
? ? ? ??SELECT * FROM t_user WHERE email=? LIMIT 1; //優(yōu)化后,只要找到對應(yīng)的一條記錄,就不會繼續(xù)想下掃描
? ? ? ? 2、union & union all (兩個結(jié)果集合并為一個)
? ? ? ? 對重復(fù)結(jié)果的處理: union 進(jìn)行表連接會篩選掉重復(fù)的記錄, union all 不會去除重復(fù)的記錄
? ? ? ? 對排序的處理:? union 將會按照字段的順序進(jìn)行排序,union all 只是簡單的將兩個結(jié)果集合并后返回
? ? ? ? 從效率上來說,union all 比 union 快很多,如果可以確認(rèn)合并兩個結(jié)果集中不包含重復(fù)數(shù)據(jù)且不需要排序的話,那么就使用union all。
? ? ? ? 3闰集、join (聯(lián)表)
? ? ? ? left join (左聯(lián)接) 返回左表的所有記錄和右表中聯(lián)結(jié)字段相等的記錄
? ? ? ? right join(右聯(lián)接) 返回右表的所有記錄和左表中聯(lián)結(jié)字段相等的記錄
? ? ? ? inner join(等值聯(lián)接) 只返回兩個表中聯(lián)接字段相等的行
? ? ? ? 4恰梢、select (查詢) update(修改) delete(刪除) insert(添加)
? ? ? ? 5、distinct (去重)?
????????select distinct name from table; //查詢table表中name不重復(fù)的字段
? ? ? ? select distinct * from table; //查詢table表中所有不重復(fù)的記錄行
? ? ? ? 6酿秸、between (在...之間)
? ? ? ? select * from table where between age 30 and 40; //查詢table表中年齡在30-40之間的用戶
? ? ? ? 7灭翔、like (模糊搜索)
? ? ? ? select * from table where name like '張%'; //查詢匹配張開頭的name字段
? ? ? ? 8、sum(求和)
? ? ? ? select sum(age) from table ;? ? //查詢所有年齡之和
? ??????select sum(price) from goods where id = 1 or id =2;? ?//查詢id為1和2的商品價(jià)格之和
? ? ? ? 9辣苏、max min(最大值肝箱、最小值)
? ? ? ? select max(price) from table ; //查詢table表中最高的價(jià)格
? ? ? ? 10、 avg (平均值)
? ? ? ? ?select avg(age) from table; //所有人的平均年齡
? ? ? ? ?11稀蟋、order by (排序)
? ? ? ? ? select * from table order by price; //默認(rèn)從小到大的正序,按價(jià)格從小到大查詢出所有記錄行
? ? ? ? ? select * from table order by price desc; //按照價(jià)格從大到小的順序查詢出所有記錄行
? ? ? ? ? 12煌张、group by (分組)
? ? ? ? ? ? select sex,count(*) from table group by sex; //分組查詢男女總?cè)藬?shù)
? ? ? ? ? ? 查詢后的結(jié)果是:? sex|男|女? ?count(*)|10|8? ? ?
? ? ? ? ? ? 13、having (分組后篩選,和where用法相似)
? ? ? ? ? ? select sex,count(*) from table group by sex having sex='男'; //分組只查詢男的總?cè)藬?shù)
? ? ? ? ? ? 查詢后的結(jié)果是:? sex|男? count(*)|10
22退客、請用原生連接任意數(shù)據(jù)庫并進(jìn)行增刪改查操作
? ? ? ? ? ? $host = 'localhost';? ?$database = 'test';? ?$username = 'root';? ?$password = 'root';
? ? ? ? ? ? $selectName = 'harry'; //要查找的用戶名,一般是用戶輸入的信息骏融。
? ? ? ? ? ? $connection = mysql_connect( $host, $username, $password ); //連接到數(shù)據(jù)庫
? ? ? ? ? ? mysql_query("set name 'utf-8' "); //編碼轉(zhuǎn)化
? ? ? ? ? ? $selectDb = mysql_select_db( $database ); //選擇數(shù)據(jù)庫
? ? ? ? ? ? $selectName = mysql_real_escape_string($selectName); //防止sql注入
? ? ? ? ? ? $query = "select * from user where name = '$selectName' " //構(gòu)建查詢語句
? ? ? ? ? ? $result = mysql_query($query);? //執(zhí)行查詢
? ? ? ? ? ? ?while( $row = mysql_fetch_row($result) ) {? ? //只要while表達(dá)式的值為true就重復(fù)執(zhí)行嵌套中的循環(huán)語句。
? ? ? ? ? ? ? ? ? ? ?$name = $row[ 0 ];? ?$age = $row[ 1 ];? ?
? ? ? ? ? ? ? ? ? ? ? echo "Name : $name Age : $age? \n";
? ? ? ? ? ? ?}? ? // mysql_fetch_row()從結(jié)果集中取得一行作為數(shù)字?jǐn)?shù)組
? ? ? ? ? ? //添加記錄
? ? ? ? ? ? $insertName = mysql_real_escape_string($insertName); //防止sql注入
? ? ? ? ? ? $insertSql = " inser into user(name,age) values ( '$insertName',18 ) ";
? ? ? ? ? ? $result = mysql_query( $insertSql );
? ? ? ? ? ? echo $result ;
? ? ? ? ? ? //更新記錄
? ? ? ? ? ? ?$updateSql = " update user set age = 19 where name = $insertName ";
? ? ? ? ? ? $result = mysql_query( $updateSql );
? ? ? ? ? ? echo $result;
? ? ? ? ? ? //刪除記錄
? ? ? ? ? ? $deleteSql = " delete from user where age = 19 ";
? ? ? ? ? ? $result = mysql_query( $deleteSql );
? ? ? ? ? ? echo $result;????
? ? ? ? ? ? ?mysql_close( $connection ); //關(guān)閉連接
23萌狂、簡述 private 档玻、protected 、public 修飾符的訪問權(quán)限
? ? private : 私有的茫藏、該類型的屬性和方法只能在本類內(nèi)部訪問
? ? protected:受保護(hù)的误趴、只有在本類和子類的內(nèi)部可以訪問
? ? public:公開的、類內(nèi)部外部均可以訪問
24务傲、xml 與 html 的主要區(qū)別
? ? ?HTML 是超文本標(biāo)記語言凉当、是網(wǎng)頁制作所必備的、超文本是指頁面中內(nèi)可以包含圖片售葡、鏈接看杭、音樂、程序等非文字元素
? ? ?XML是可拓展標(biāo)記語言天通、被設(shè)計(jì)用來描述數(shù)據(jù)泊窘、XML標(biāo)簽沒有被預(yù)定義、需要自行定義標(biāo)簽。
區(qū)別:XML被設(shè)計(jì)用來攜帶數(shù)據(jù);? XML被設(shè)計(jì)用來描述數(shù)據(jù)烘豹,其焦點(diǎn)是數(shù)據(jù)的內(nèi)容;
? ??????HTML被設(shè)計(jì)用來顯示數(shù)據(jù)瓜贾,其焦點(diǎn)是數(shù)據(jù)的外觀;
? ??????HTML旨在顯示信息,而XML旨在描述信息
? ??????XML被設(shè)計(jì)用來結(jié)構(gòu)化携悯、存儲以及傳輸信息
25祭芦、抽象類和接口的概念以及區(qū)別?
定義為抽象的類不能被實(shí)例化,任何一個類,如果他里面有一個方法是被聲明為抽象的、那么這個類就必須被聲明為抽象的憔鬼。被定義為抽象的方法只是聲明了其調(diào)用方式龟劲、不能定義具體的功能實(shí)現(xiàn)。繼承一個抽象類的時候轴或、子類必須定義父類所有的抽象方法昌跌。這些方法的訪問控制必須和父類一樣或者更為寬松。
abstract class AbstractClass{ abstract protected function index(); //要求子類定義這些方法 }
使用接口(interface);可以指定某個類必須實(shí)現(xiàn)哪些方法照雁、但不需要定義這些方法的具體內(nèi)容蚕愤。
接口中定義的所有方法都必須是公有的、這是接口的特性饺蚊。
要實(shí)現(xiàn)一個接口,使用implements 操作符萍诱。類中必須實(shí)現(xiàn)接口定義的所有方法、否則會報(bào)一個致命錯誤污呼。
類可以實(shí)現(xiàn)多個接口,用逗號分隔多個接口的名稱裕坊。接口可以通過extends繼承。
區(qū)別:1燕酷、接口中不可以聲明變量籍凝、但可以聲明常量。抽象類中可以聲明各種變量悟狱。
2静浴、接口沒有構(gòu)造函數(shù)、抽象類有挤渐。
3苹享、接口中的方法默認(rèn)為public。抽象類的方法可以是public浴麻、protected得问、private。
4软免、一個類可以繼承多個接口宫纬、但只能繼承一個抽象類。
26膏萧、什么是構(gòu)造函數(shù)?什么是析構(gòu)函數(shù)?作用是什么?? ??
構(gòu)造函數(shù):__construct();在使用new關(guān)鍵字實(shí)例化一個對象時自動執(zhí)行,通常用于對對象的屬性進(jìn)行初始化
析構(gòu)函數(shù):_distory();在對象被銷毀的時候自動執(zhí)行漓骚、通常用于釋放對象所占用的第三方資源蝌衔。
27、常用的魔術(shù)方法有哪些?舉例說明
????__clone(); //在克隆對象時自動執(zhí)行蝌蹂。在克隆對象的時候可以同時執(zhí)行其他的操作噩斟、甚至可以阻止對象被克隆。
????__toString();//在對象被當(dāng)做字符串使用時自動執(zhí)行孤个。兼容對象的字符串調(diào)用形式剃允、根據(jù)用戶需求顯示出對象的字符串形態(tài)。
????__invoke();//在對象被當(dāng)做函數(shù)使用時自動執(zhí)行齐鲤。兼容對象的函數(shù)調(diào)用形式斥废、允許用戶像使用函數(shù)一樣使用對象。
28给郊、如何進(jìn)行sql優(yōu)化?
1牡肉、可以通過創(chuàng)建索引。索引的作用在于能快速找出某個列中有一特定值的行,mysql能夠快速達(dá)到一個位置去搜索數(shù)據(jù)文件淆九、而不必查看所有數(shù)據(jù)荚板。
2、like語句操作吩屹。like "%小明%" 不會使用索引;而like "小明%" 可以使用索引。
3拧抖、不要在列上進(jìn)行運(yùn)算煤搜。select * from table? where year(addtate)<2007,這樣會在每個行上進(jìn)行運(yùn)算、會導(dǎo)致索引生效而進(jìn)行全表掃描唧席。因此可以改為 select * from table where addtate <"2007 01-01";
4擦盾、 避免在where條件等號的左側(cè)進(jìn)行表達(dá)式。比如 select * from table where score/10 = 9;
會導(dǎo)致數(shù)據(jù)庫引擎放棄索引進(jìn)行全表掃描淌哟〖B可以將表達(dá)式移動到等號右側(cè)。
select * from table where score = 9*10;
5徒仓、使用union 代替 or 腐碱。 同樣or會導(dǎo)致放棄索引全表掃描、union會把兩個結(jié)果合并后返回掉弛。
比如 select * from table where id=1 or name = "小明";
select * from table where id = 1 union select * from table where name = "小明";
29症见、thinkphp 如何防止sql注入?
30、如何開啟調(diào)試模式?調(diào)試模式有什么好處?
? ? 在application/config.php 配置文件中把 show_error_msg 顯示錯誤信息的false改為true
? ? app_debug 應(yīng)用調(diào)試模式也改為true; 就開啟調(diào)試模式了殃饿。
? ? ?調(diào)試模式的優(yōu)勢在于: 開啟日志記錄,任何錯誤信息和調(diào)試信息都會詳細(xì)記錄,便于調(diào)試
? ? 2谋作、會詳細(xì)記錄整個執(zhí)行過程
????3、模板修改可即使生效
? ? 4乎芳、發(fā)生異常的時候會顯示詳細(xì)的異常信息? ?
31遵蚜、tp中的url模式有哪幾種?默認(rèn)是哪種?
tp中url模式有三種,
普通模式:只能使用 path_info 的方式訪問,所有路由規(guī)則均失效帖池。
混合模式:tp5默認(rèn)的模式、如果為一個地址定義了路由規(guī)則吭净、則必須使用該規(guī)則訪問,如果沒有定義規(guī)則睡汹、則按照普通模式方式訪問即可
強(qiáng)制模式:全站所有必須定義路由規(guī)則,并且必須使用定義好的路由規(guī)則訪問。
32攒钳、thinkphp框架中 D函數(shù) 與 M函數(shù) 的區(qū)別是什么?
thinkphp 中D函數(shù)和M函數(shù)都用于實(shí)例化一個模型類帮孔、 M函數(shù) 用于高效實(shí)例化一個基礎(chǔ)模型類。
而D函數(shù) 用于實(shí)例化一個用戶定義模型類不撑。
M函數(shù)使用場景:
1文兢、對數(shù)據(jù)表進(jìn)行簡單的CURD操作而無復(fù)雜的業(yè)務(wù)邏輯時
2、只有個別表有較為復(fù)雜的業(yè)務(wù)邏輯時焕檬、將m函數(shù)與實(shí)例化CommonModel 類結(jié)合使用
D函數(shù)使用場景:
1姆坚、需要使用ThinkPHP模型中一些高級的功能、如自動驗(yàn)證实愚、關(guān)聯(lián)模型等
2兼呵、業(yè)務(wù)邏輯比較復(fù)雜時、且涉及的表較多
3腊敲、將業(yè)務(wù)邏輯定義在了自定義的模型類里面,而想在操作中實(shí)現(xiàn)這些業(yè)務(wù)邏輯
33击喂、雙引號和單引號的區(qū)別?
php中雙引號里面的字段會經(jīng)過編譯器解釋、然后在當(dāng)做html代碼輸出碰辅。
單引號里面的不進(jìn)行解釋懂昂、直接輸出。
從字面上就可以看出,單引號比雙引號要快了没宾。
所以如果內(nèi)部只有純字符串的時候,用單引號(速度快),內(nèi)部有別的東西(如變量)的時候,用雙號引更好點(diǎn)
34凌彬、常用的超全局變量(8個)
超全局變量是在全部作用域中始終可用的內(nèi)置變量。
$get : get傳送方式
$post : post傳送方式
$request : 可以接受到 get 和 post 兩種方式的值
$global : 引用全局作用域中可用的全部變量
$files : 上傳文件使用
$server : 系統(tǒng)環(huán)境變量
$session : 用于會話控制
$cookie : 用于會話控制
$_new : 服務(wù)器換環(huán)境變量
35循衰、優(yōu)化數(shù)據(jù)庫的方法
可以通過索引:索引的作用在于能快速找到某個列中有一特定值的行铲敛。mysql能到達(dá)一個位置去搜索數(shù)據(jù)文件、而不必查詢所有文件会钝。
選取合適的字段屬性:mysql能夠很好的進(jìn)行大數(shù)據(jù)量的存取伐蒋、但一般來說數(shù)據(jù)庫中的表越小,在它上面的執(zhí)行的查詢速度也就越快。因此在創(chuàng)建表的時候迁酸、為了獲取更好的性能咽弦、我們可以將表中的字段寬度盡可能的設(shè)小。比如在定義郵政這個字段時胁出、如果將其設(shè)置char(255),顯然給數(shù)據(jù)庫增加不必要的空間型型、使用varchar也是多余、因?yàn)樗拈L度是固定的全蝶、因此使用char(6)就可以很好的完成任務(wù)闹蒜。
數(shù)據(jù)庫的事務(wù):事務(wù)的作用是:要么語句塊的每條語句都成功寺枉、要么都失敗、保持了數(shù)據(jù)庫中數(shù)據(jù)的一致性和完整性绷落。比如現(xiàn)在有某條數(shù)據(jù)要同時插入兩張相關(guān)聯(lián)的表中姥闪、可能會出現(xiàn)這種情況、第一張表更新成功后砌烁、數(shù)據(jù)庫突然出現(xiàn)意外狀況筐喳、導(dǎo)致第二張表沒有操作成功。這樣會造成數(shù)據(jù)的不完整函喉、甚至破壞數(shù)據(jù)避归、要避免這種情況發(fā)生就要使用事務(wù)。
事務(wù)以BENGIN關(guān)鍵字開始管呵、COMMIT關(guān)鍵字結(jié)束梳毙、在這期間只要有一條sql操作失敗、那么ROOLBACK命令就能把數(shù)據(jù)庫恢復(fù)到BENGIN開始之前的狀態(tài)捐下。
事務(wù)的另一個重要的作用是當(dāng)多個用戶同時使用相同的數(shù)據(jù)源時账锹、它可以利用鎖定數(shù)據(jù)的方法為用戶提供一種安全的訪問方式。這樣可以保證用戶的操作不被其他用戶干擾坷襟。
36奸柬、(mysql)請寫出數(shù)據(jù)類型( int? char? varchar? datetime? text )的意思; varchar 和 cahr 有什么區(qū)別?
int :整數(shù)類型
datetime:日期時間類型 "2019-04-22 18:00:00"
text :字符串類型
char:固定長度,char(4)不管存入幾個字節(jié),都將占用4個字節(jié)
varchar:可變長度,根據(jù)實(shí)際存入的字符,計(jì)算長度
37、談?wù)刴vc的認(rèn)識
mvc是一種設(shè)計(jì)模式婴程、它讓我們把業(yè)務(wù)邏輯和具體的數(shù)據(jù)顯示區(qū)分開鸟缕、進(jìn)行分層。
m : 是model 模型排抬、完成具體的業(yè)務(wù)邏輯。
v : view 視圖授段、負(fù)責(zé)展示信息
c: controller 控制器蹲蒲、調(diào)用應(yīng)用流程、接收輸入并傳送給model和view
mvc模式的定義是model侵贵、controller届搁、view三者之間的橋梁。controller以及view都依賴于model,因?yàn)閏ontroller和view都得向model發(fā)送數(shù)據(jù)請求窍育。數(shù)據(jù)通過controller輸入到你的系統(tǒng)當(dāng)中,并最終通過view顯示出結(jié)果卡睦。
38、簡述 cookie 的設(shè)置及獲取過程
? ? ? ?//使用setCookie創(chuàng)建一個名為username,值為小明,過期時間為10秒的cookie;? ??
??? ? setCookie( "username","小明",time()+10 ) //setCookie("名稱","值",過期時間);
? ? ? ? //用$_COOKIE[ ] , 取出username的值,放在變量$name 中漱抓。然后打印出來表锻。
? ? $naem = $_COOKIE[ 'username' ]; echo $name;
運(yùn)行代碼,第一次會出現(xiàn)報(bào)錯、報(bào)錯的原因是$_COOKIE['username']的值不存在乞娄。再次刷新瞬逊、cookie的值就出來了显歧。
過了10秒后,再次刷新,又會報(bào)錯、那是因?yàn)閏ookie緩存以及超過了緩存時間确镊。只要再次刷新cookie值又會有了士骤。
如果不設(shè)置時間,瀏覽器不關(guān)時、能夠永遠(yuǎn)訪問不會過期蕾域、當(dāng)瀏覽器關(guān)閉時拷肌、就無法訪問了。
39旨巷、php 讀取文件內(nèi)容的幾種方法和函數(shù)?
? ? ? ? file_exists()檢查文件或目錄是否存在巨缘。
? ??一、fopen函數(shù):打開文件或者 URL契沫。
????feof函數(shù): 檢查是否已經(jīng)到達(dá)文件的結(jié)尾带猴。到達(dá)返回true,未到返回false。
????fgets函數(shù): 從打開的文件中返回第一行懈万。 fclose函數(shù):關(guān)閉一個打開的文件
????$my_file = fopen( "myfile.txt","r" );
????while( !feof($my_file) ){
????? ? $line = $fgets($my_file);
????? ? echo $line;
????}
????fclose( $my_file );
? ??二拴清、readfile 函數(shù) :讀入一個文件并寫入到輸出緩沖。成功則返回文件中讀入的字節(jié)數(shù)会通。
????$myfile = readfile('./myfile.txt');
????echo $myfile;
? ??三口予、file_get_contents 函數(shù) :?把整個文件讀入一個字符串中。
? ? $myfile = file_get_contents( 'myfile.txt' );
? ? echo $myfile;
? ? 四涕侈、file 函數(shù): 把整個文件讀入一個數(shù)組中
? ? $myfile = file( 'myfile.txt' );
? ? print_r( $myfile );
40沪停、如果你想要自動加載類、下面哪種函數(shù)聲明時正確的?
? ??php 中 魔術(shù)方法 __autoload(); //通過定義這個函數(shù)來啟用類的自動加載裳涛。
? ? //這樣非常容易避免了木张,當(dāng)一個項(xiàng)目非常大時,不停的require文件
? ? tp:?Loader::addClassMap
41端三、php程序使用utf-8編碼舷礼、以下程序輸出的結(jié)果是什么?
42、用php實(shí)現(xiàn)冒泡排序郊闯、將數(shù)組$a = array() 按照從小到大的方式進(jìn)行排序
冒泡排序:1妻献、比較相鄰的元素。如果第一個比第二個大团赁,就交換他們兩個? ??
? ? ? ? ? ? ? ? 2育拨、對每一對相鄰元素做同樣的工作,從開始第一對到結(jié)尾的最后一對欢摄。在這一點(diǎn)熬丧,最后的元素應(yīng)該會是最大的數(shù)。
????????????????3怀挠、針對所有的元素重復(fù)以上的步驟锹引,除了最后一個
? ? ? ? ? ? ? ? 4矗钟、持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較
? ??
43嫌变、表單提交中 get 和post 的異同點(diǎn)
? ? 1吨艇、get是從服務(wù)器上獲取數(shù)據(jù) , post是向服務(wù)器傳送數(shù)據(jù)。
? ? 2腾啥、對于get方式,服務(wù)器端用 Request.QueryString 獲取變量的值东涡。
? ? ? ? post方式,服務(wù)器端用Request.From 獲取提交的數(shù)據(jù)。
? ? 3倘待、get傳送的數(shù)據(jù)量比較小疮跑、不能大于2kb。 post傳送的數(shù)據(jù)量較大凸舵、一般被默認(rèn)不受限制祖娘。
? ? 4、get安全性比較低啊奄、post安全性較高渐苏。
? ? 5、get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中菇夸,值和表單內(nèi)各個字段一一對應(yīng)琼富,在URL中可以看到。post是通過HTTPpost機(jī)制庄新,將表單內(nèi)各個字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址鞠眉。用戶看不到這個過程。
44择诈、請用遞歸實(shí)現(xiàn)一個階乘求值算法
? ??階乘就是:一個正整數(shù)的階乘是所有小于及等于該數(shù)的正整數(shù)的積械蹋,并且0的階乘為1。
? ? 自然數(shù) n 的階乘寫作n!; n!=1x2x3..xn羞芍。
? ? function demo($a){
? ? ? ? if( $a>1 ){? $r = $a*demo($a-1) }else{? $r = $a;? }
? ? ? ? return $r; }
? ?$a = 6;? ? echo $a.'的階乘的值是'.demo($a);
45哗戈、php 不適用第三個變量實(shí)現(xiàn)交換兩個變量的值
46、用php打印出前一天的時間格式 2017-09-11 10:07:24
$data = date("Y-m-d h:i:s",strtotime("-1 day"));
echo $data;
$data = date( "y-m-d h:i:s",time()-24*3600 );
echo $data;
47涩金、session 與 cookie 的區(qū)別是什么?請從協(xié)議,產(chǎn)生的原因
????因?yàn)閔ttp是無狀態(tài)協(xié)議、一旦數(shù)據(jù)交換完畢暇仲、客戶端與服務(wù)器端的連接就會關(guān)閉步做。再次交換數(shù)據(jù)需要建立新的連接。這就意味著服務(wù)器無法從連接上跟蹤會話奈附。于是需要引入一種機(jī)制全度、cookie就順應(yīng)而生。
????session是另一種記錄客戶端狀態(tài)的機(jī)制斥滤。不同的是cookie保存在客戶端瀏覽器中将鸵。而session保存在服務(wù)器上勉盅。
????客戶端瀏覽服務(wù)器的時候、服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上顶掉。這就是seesion草娜。
????區(qū)別:
????1、cookie是存放在瀏覽器端痒筒、大多數(shù)情況下單個域名最多保存20個cookie宰闰。每個cookie保存的數(shù)據(jù)不超過4k。
????2簿透、session存儲在服務(wù)端移袍、默認(rèn)是以文件的形式存儲。也可以存儲在數(shù)據(jù)庫和redis等緩存內(nèi)存中老充。
? ? 3葡盗、session是占用的服務(wù)器內(nèi)存、所以內(nèi)存越大啡浊、能存的值越大觅够、原則上講無上限、一般用于存儲對安全要求較高的重要數(shù)據(jù)虫啥。
? ? 1蔚约、保存位置:cookie存放在瀏覽器端、session存儲在服務(wù)器
? ? 2涂籽、生命周期:cookie用戶瀏覽器關(guān)閉苹祟、理想的話可以長期保存
? ? 3、設(shè)置方法:setCookie('name','admin',10)评雌、$_session['name']='admin';
? ? 4树枫、安全方面:數(shù)據(jù)在服務(wù)器端安全、數(shù)據(jù)在客戶端不安全
48景东、isset() 和 empty() 區(qū)別?
isset() : 一般用來檢測變量是否設(shè)置砂轻。變量不存在或者變量存在值為null返回false、變量存在且值不為null返回true斤吐。只能用于變量搔涝。
empty() :?? 判斷值是否為空。若變量不存在 或 存在值為0和措、'0'庄呈、null、false派阱、array()诬留、var、$var;以及沒有任何屬性的對象、都返回true文兑。其余則返回false盒刚。只能用于變量。
49绿贞、 mysql 的存儲引擎,myisam 和innodb 的區(qū)別
innodb : 專注數(shù)據(jù)的完整性和安全性因块、涉及利益、金錢交易,這種需要嚴(yán)謹(jǐn)性樟蠕、安全性比較高的贮聂、例如股票、
主要區(qū)別:
? ? 1寨辩、myisam是非事務(wù)安全型的吓懈、innodb是事務(wù)安全型的
? ? 2、myisam只支持表鎖靡狞、innodb支持行鎖耻警、表鎖。
? ? 3甸怕、myisam不支持外鍵甘穿、innodb支持外鍵
? ? 4、因?yàn)閙yisam相對簡單梢杭、所以效率上要優(yōu)于innodb
? ? 5温兼、innodb表相對myisam表更加安全
應(yīng)用場景:
? ? myisam : 如果應(yīng)用中需要大量的select 查詢,則使用myisam
? ? innodb;如果你的數(shù)據(jù)執(zhí)行大量的insert、update,出于性能方面的考慮武契、應(yīng)該適應(yīng)innodb
50募判、如何實(shí)現(xiàn)字符串翻轉(zhuǎn)
????strrev(); 函數(shù)反轉(zhuǎn)字符串。
????echo strrev( 'hello' );
51咒唆、php 序列化和反序列化用的函數(shù)
序列化函數(shù)serialize()届垫。//將變量轉(zhuǎn)換為可保存或傳輸?shù)淖址倪^程
$arr = [ 'name'=>'小明','age'=>18,'length'=>100 ];
$a = serialize( $arr );? ? echo $a;
輸出:????a:3:{ s:4:"name";s:6:"小明";????s:3:"age";i:18;????s:6:"length";i:100; }
//返回序列化之后的字符串,可以存儲于任何地方全释。
file_put_contents( './serialize.txt',$a );????//將序列化字符串存到記事本中
反序列化函數(shù)unserialize()装处。//對一個以序列化的字符串,將其轉(zhuǎn)化為原來的變量。
$str = file_get_contents( './serialize.text' );? ? //讀取記事本的數(shù)據(jù)
$arr = unserialize( $arr );????//反序列化
print_r( $arr );? ? //輸出原先變量的值(數(shù)組)
序列化可以將PHP中 對象浸船、類妄迁、數(shù)組、變量李命、匿名函數(shù)等登淘,轉(zhuǎn)化為字符串,這樣用戶就方便儲存和傳輸项戴,對服務(wù)器或web中減輕一定的壓力形帮。
52槽惫、數(shù)據(jù)庫中的事務(wù)是什么?
數(shù)據(jù)庫的事務(wù):要么語句塊中的每條語句都成功周叮、要么都失敗辩撑。可以保持?jǐn)?shù)據(jù)庫中數(shù)據(jù)的一致性和完整性仿耽。
比如要把某個數(shù)據(jù)同時插入到兩張相關(guān)聯(lián)的表中合冀、可能會出現(xiàn)這種情況、第一個表成功更新后项贺、數(shù)據(jù)庫突然出現(xiàn)意外狀況君躺、導(dǎo)致第二個表中的操作沒有完成。這樣會造成數(shù)據(jù)的不完整开缎、甚至?xí)茐臄?shù)據(jù)庫中的數(shù)據(jù)棕叫。要避免這種情況發(fā)生,就應(yīng)該使用事務(wù)。
事務(wù)以BEGIN關(guān)鍵字開始奕删、COMMIT關(guān)鍵字結(jié)束俺泣。在這之間任何一條sql操作失敗、那么ROOKBACK命令就可以把數(shù)據(jù)庫恢復(fù)到BENGIN開始之前的狀態(tài)完残。
事務(wù)的另一個重要作用是當(dāng)多個用戶同時使用相同的數(shù)據(jù)源時伏钠、它可以利用鎖定數(shù)據(jù)庫的方法來為提供一種安全的訪問方式。這樣可以保證用戶的操作不會被其他用戶干擾谨设。
53熟掂、寫一個方法獲取文件的拓展名
54、說明php 中的傳值 和傳引用的區(qū)別?并說明傳值什么時候傳引用
? ? 傳值:將實(shí)參賦值給形參,那么對形參的修改不會影響到實(shí)參的值扎拣。
? ? $a = 1 ; $b = $a ; $b = 2 ; echo $a,$b;? ? //輸出: 12
? ? 傳引用:真正的以地址的方式傳遞參數(shù),傳遞以后,形參和實(shí)參都是同一個對象赴肚、只是名字不同。
? ? 對形參的修改將會影響實(shí)參的值鹏秋。
? ? $a = 1 ; $b=&$a ; $b = 2; echo $a,$b;? ? //輸出: 22
55尊蚁、給出數(shù)組$array=array( 1,6,9,5,8,3,7,2,4 ),寫一方法對數(shù)組$array進(jìn)行排序,排序后的結(jié)果為$array( 1,2,3,4,5,6,7,8,9 )
? ??$array = array(?1,6,9,5,8,3,7,2,4 );
? ??asort( $array ); //根據(jù)值,以升序?qū)?shù)組進(jìn)行排序。 print_r( $arr );? ? //輸出1,2,3,4,5,6,7,8,9?
? ??//也可以使用冒泡排序
? ? //輸出 123456789
56侣夷、面向?qū)ο蟮奶卣饔心男?
? ??php面對對象編程的三個基本特征分別為封裝横朋、繼承、多態(tài)百拓。
? ??封裝:將方法琴锭、屬性等封裝到一個類、通過聲明訪問權(quán)限控制訪問衙传。
? ??繼承:通過繼承父類决帖、能訪問到其父類所擁有的非私有的方法和屬性、增加代碼重用性
? ??多態(tài):能夠重寫繼承對象的方法蓖捶、體現(xiàn)了對已存在的代碼的可替換性和靈活性
57地回、在執(zhí)行 mysql 數(shù)據(jù)庫 insert 時應(yīng)該注意的問題有哪些?
插入操作時,如果字段是系統(tǒng)關(guān)鍵字、會提示SQL語句有問題、需要給關(guān)鍵字段加上``反引號就可以刻像。不必更改字段畅买。
58、用javascript 來實(shí)現(xiàn)驗(yàn)證郵箱地址不能是中文的方法?
? ? ? ? \u4E00-\u9FA5 : 匹配所有漢字细睡。
? ? ? ? \w :?匹配字母或數(shù)字或下劃線或漢字 等價(jià)于 '[ ^A-Za-z0-9_ ]'谷羞。
? ? ? ? \d : 匹配數(shù)字
? ? ? ? + : 匹配前面的子表達(dá)式一次或者多次
? ? ? ? reg.test(email) == /[?\u4E00-\u9FA5 ]/.test( email ); //測試是否匹配正則表達(dá)式
59、輸出下個月的第一天
? ??echo date('Y-m-01',strtotime("+1 month"));? ? //2019-05-01