首頁(yè) 培訓(xùn)網(wǎng) 最新資訊 熱門問答

PHP

13013833891 免費(fèi)試聽 在線客服

您的位置: 蘇州培訓(xùn)網(wǎng) > PHP培訓(xùn)資訊 > 蘇州php初學(xué)者必備知識(shí)培訓(xùn)

蘇州php初學(xué)者必備知識(shí)培訓(xùn)

來源:教育聯(lián)展網(wǎng) | 發(fā)布時(shí)間: | 編輯:佚名

在技術(shù)學(xué)習(xí)的道路上,能掌握一些有用的技巧,對(duì)于初學(xué)者是非常有幫助的,本文就為大家總結(jié)了php初學(xué)者必備的15大技巧,相信能讓你的php學(xué)習(xí)更順利。

蘇州php初學(xué)者必備知識(shí)培訓(xùn)

在技術(shù)學(xué)習(xí)的道路上,能掌握一些有用的技巧,對(duì)于初學(xué)者是非常有幫助的,本文就為大家總結(jié)了php初學(xué)者必備的15大技巧,相信能讓你的php學(xué)習(xí)更順利。

1.php初學(xué)者培訓(xùn):不要在你的應(yīng)用程序中g(shù)zip輸出,讓apache來做

考慮使用ob_gzhandler?不,別這樣做。它沒有任何意義。PHP應(yīng)該是來寫應(yīng)用程序的。不要擔(dān)心PHP中有關(guān)如何優(yōu)化在服務(wù)器和瀏覽器之間傳輸?shù)臄?shù)據(jù)。

使用apache mod_gzip/mod_deflate**.htaccess文件壓縮內(nèi)容。

2.php初學(xué)者培訓(xùn):從php echo javascript代碼時(shí)使用json_encode

有些時(shí)候一些JavaScript代碼是從php動(dòng)態(tài)生成的。

$images = array( 'myself.png' , 'friends.png' , 'colleagues.png');$js_code = '';foreach($images as $image){$js_code .= "'$image' ,";}$js_code = 'var images = [' . $js_code . ']; ';echo $js_code;//Output is var images = ['myself.png' ,'friends.png' ,'colleagues.png' ,];

放聰明點(diǎn)。使用json_encode:

$images = array( 'myself.png' , 'friends.png' , 'colleagues.png');$js_code = 'var images = ' . json_encode($images);echo $js_code;//Output is : var images = ["myself.png","friends.png","colleagues.png"]

這不是很整潔?

3.php初學(xué)者培訓(xùn):在寫入任何文件之前檢查目錄是否可寫

在寫入或保存任何文件之前,請(qǐng)務(wù)必要檢查該目錄是否是可寫的,如果不可寫的話,會(huì)閃爍錯(cuò)誤消息。這將節(jié)省你大量的“調(diào)試”時(shí)間。當(dāng)你工作于Linux時(shí),權(quán)限是必須要處理的,并且會(huì)有很多很多的權(quán)限問題時(shí),當(dāng)目錄不可寫,文件無法讀取等的時(shí)候。

請(qǐng)確保你的應(yīng)用程序盡可能智能化,并在**短的時(shí)間內(nèi)報(bào)告**重要的信息。

$contents = "All the content";$file_path = "/var/www/project/content.txt";file_put_contents($file_path , $contents);

這完全正確。但有一些間接的問題。file_put_contents可能會(huì)因?yàn)橐恍┰蚨。?

  • 父目錄不存在

  • 目錄存在,但不可寫

  • 鎖定文件用于寫入?

因此,在寫入文件之前**能夠一切都弄明確。

$contents = "All the content";$dir = '/var/www/project';$file_path = $dir . "/content.txt";if(is_writable($dir)){    file_put_contents($file_path , $contents);}else{    die("Directory $dir is not writable, or does not exist. Please check");}

**這樣做,你就能得到哪里文件寫入失敗以及為什么失敗的準(zhǔn)確信息。

4.php初學(xué)者培訓(xùn):改變應(yīng)用程序創(chuàng)建的文件的權(quán)限

當(dāng)在Linux環(huán)境下工作時(shí),權(quán)限處理會(huì)浪費(fèi)你很多時(shí)間。因此,只要你的php應(yīng)用程序創(chuàng)建了一些文件,那就應(yīng)該修改它們的權(quán)限以確保它們?cè)谕饷妗捌揭捉恕?。否則,例如,文件是由“php”用戶創(chuàng)建的,而你作為一個(gè)不同的用戶,系統(tǒng)就不會(huì)讓你訪問或打開文件,然后你必須努力獲得root權(quán)限,更改文件權(quán)限等等。

// Read and write for owner, read for everybody elsechmod("/somedir/somefile", 0644);// Everything for owner, read and execute for otherschmod("/somedir/somefile", 0755);

5.php初學(xué)者培訓(xùn):不要檢查提交按鈕值來檢查表單提交

if($_POST['submit'] == 'Save'){    //Save the things}

以上代碼在大多數(shù)時(shí)候是正確的,除了應(yīng)用程序使用多語(yǔ)言的情況。然后“Save”可以是很多不同的東西。那么你該如何再做比較?所以不能依靠提交按鈕的值。相反,使用這個(gè):

if( $_SERVER['REQUEST_METHOD'] == 'POST' and isset($_POST['submit']) ){    //Save the things}

現(xiàn)在你就可以擺脫提交按鈕的值了。

6.php初學(xué)者培訓(xùn):在函數(shù)中總是有相同值的地方使用靜態(tài)變量

//Delay for some timefunction delay(){    $sync_delay = get_option('sync_delay');    echo "<br />Delaying for $sync_delay seconds...";    sleep($sync_delay);    echo "Done <br />";}

相反,使用靜態(tài)變量:

//Delay for some timefunction delay(){    static $sync_delay = null;    if($sync_delay == null)    {    $sync_delay = get_option('sync_delay');    }    echo "<br />Delaying for $sync_delay seconds...";    sleep($sync_delay);    echo "Done <br />";}

7.php初學(xué)者培訓(xùn):不要直接使用$ _SESSION變量

一些簡(jiǎn)單的例子是:

$_SESSION['username'] = $username;$username = $_SESSION['username'];

但是這有一個(gè)問題。如果你正在相同域中運(yùn)行多個(gè)應(yīng)用程序,會(huì)話變量會(huì)發(fā)生沖突。2個(gè)不同的應(yīng)用程序在會(huì)話變量中可能會(huì)設(shè)置相同的鍵名。舉個(gè)例子,一個(gè)相同域的前端門戶和后臺(tái)管理應(yīng)用程序。

因此,用包裝函數(shù)使用應(yīng)用程序特定鍵:

define('APP_ID' , 'abc_corp_ecommerce');//Function to get a session variablefunction session_get($key){    $k = APP_ID . '.' . $key;    if(isset($_SESSION[$k]))    {        return $_SESSION[$k];    }    return false;}//Function set the session variablefunction session_set($key , $value){    $k = APP_ID . '.' . $key;    $_SESSION[$k] = $value;    return true;}

8.php初學(xué)者培訓(xùn):封裝實(shí)用輔助函數(shù)到一個(gè)類中

所以,你必須在一個(gè)文件中有很多實(shí)用函數(shù):

function utility_a(){    //This function does a utility thing like string processing}function utility_b(){    //This function does nother utility thing like database processing}function utility_c(){    //This function is ...}

自由地在應(yīng)用程序中使用函數(shù)。那么你或許想要將它們包裝成一個(gè)類作為靜態(tài)函數(shù):

class Utility{    public static function utility_a()    {    }    public static function utility_b()    {    }    public static function utility_c()    {    }}//and call them as $a = Utility::utility_a();$b = Utility::utility_b();

這里你可以得到的一個(gè)明顯好處是,如果php有相似名稱的內(nèi)置函數(shù),那么名稱不會(huì)發(fā)生沖突。

從另一個(gè)角度看,你可以在相同的應(yīng)用程序中保持多個(gè)版本的相同類,而不會(huì)發(fā)生任何沖突。因?yàn)樗环庋b了,就是這樣。

9.php初學(xué)者培訓(xùn):一些傻瓜式技巧

  • 使用echo代替print

  • 使用str_replace代替preg_replace,除非你確定需要它

  • 不要使用short tags

  • 對(duì)于簡(jiǎn)單的字符串使用單引號(hào)代替雙引號(hào)

  • 在header重定向之后要記得做一個(gè)exit

  • 千萬不要把函數(shù)調(diào)用放到for循環(huán)控制行中。

  • isset比strlen快

  • 正確和一致地格式化你的代碼

  • 不要丟失循環(huán)或if-else塊的括號(hào)。

不要寫這樣的代碼:

if($a == true) $a_count  ;

這絕對(duì)是一種浪費(fèi)。

這樣寫

if($a == true){    $a_count  ;}

不要**吃掉語(yǔ)法縮短你的代碼。而是要讓你的邏輯更簡(jiǎn)短。使用具有代碼高亮功能的文本編輯器。代碼高亮有助于減少錯(cuò)誤。

10. php初學(xué)者培訓(xùn):使用array_map快速處理數(shù)組

比方說,你要trim一個(gè)數(shù)組的所有元素。新手會(huì)這樣做:

foreach($arr as $c => $v){    $arr[$c] = trim($v);}

但它可以使用array_map變得更整潔:

$arr = array_map('trim' , $arr);

這適用于trim數(shù)組$arr的所有元素。另一個(gè)類似的函數(shù)是array_walk。

11.php初學(xué)者培訓(xùn):使用php過濾器驗(yàn)證數(shù)據(jù)

你是不是使用正則表達(dá)式來驗(yàn)證如電子郵件,IP地址等值?是的,每個(gè)人都是這樣做的?,F(xiàn)在,讓我們?cè)囋囈粋€(gè)不同的東西,那就是過濾器。

php過濾器擴(kuò)展程序?qū)⑻峁┖?jiǎn)單的方法來有效驗(yàn)證或校驗(yàn)值。

12.php初學(xué)者培訓(xùn):強(qiáng)制類型檢查

$amount = intval( $_GET['amount'] );$rate = (int) $_GET['rate'];

這是一種好習(xí)慣。

13.php初學(xué)者培訓(xùn):使用set_error_handler()將Php錯(cuò)誤寫入到文件

set_error_handler()可以用來設(shè)置自定義的錯(cuò)誤處理程序。在文件中編寫一些重要的錯(cuò)誤用于日志是個(gè)好主意。

14.php初學(xué)者培訓(xùn):小心處理大型數(shù)組

大型的數(shù)組或字符串,如果一個(gè)變量保存了一些規(guī)模非常大的東西,那么要小心處理。常見錯(cuò)誤是創(chuàng)建副本,然后耗盡內(nèi)存,并得到內(nèi)存溢出的致命錯(cuò)誤:

$db_records_in_array_format; //This is a big array holding 1000 rows from a table each having 20 columns , every row is atleast 100 bytes , so total 1000 * 20 * 100 = 2MB$cc = $db_records_in_array_format; //2MB moresome_function($cc); //Another 2MB ?

當(dāng)導(dǎo)入csv文件或?qū)С霰淼絚sv文件時(shí),上面這樣的代碼很常見。

像上面這樣做可能經(jīng)常會(huì)由于內(nèi)存限制而讓腳本崩潰。對(duì)于小規(guī)模的變量它不會(huì)出現(xiàn)問題,但當(dāng)處理大型數(shù)組時(shí)一定要對(duì)此加以避免。

考慮**引用傳遞它們,或者將它們存儲(chǔ)在一個(gè)類變量中:

$a = get_large_array();pass_to_function(&$a);

這樣一來,相同的變量(并非其副本)將用于該函數(shù)。

class A{    function first()    {        $this->a = get_large_array();        $this->pass_to_function();    }    function pass_to_function()    {        //process $this->a    }}

盡快復(fù)原它們,這樣內(nèi)存就能被釋放,并且腳本的其余部分就能放松。

下面是關(guān)于如何**引用來賦值從而節(jié)省內(nèi)存的一個(gè)簡(jiǎn)單示例。

<?phpini_set('display_errors' , true);error_reporting(E_ALL);$a = array();for($i = 0; $i < 100000 ; $i  ){    $a[$i] = 'A'.$i;}echo 'Memory usage in MB : '. memory_get_usage() / 1000000 . '<br />';$b = $a;$b[0] = 'B';echo 'Memory usage in MB after 1st copy : '. memory_get_usage() / 1000000 . '<br />';$c = $a;$c[0] = 'B';echo 'Memory usage in MB after 2st copy : '. memory_get_usage() / 1000000 . '<br />';$d =& $a;$d[0] = 'B';echo 'Memory usage in MB after 3st copy (reference) : '. memory_get_usage() / 1000000 . '<br />';

一個(gè)典型php 5.4機(jī)器上的輸出是:

Memory usage in MB : 18.08208Memory usage in MB after 1st copy : 27.930944Memory usage in MB after 2st copy : 37.779808Memory usage in MB after 3st copy (reference) : 37.779864

因此可以看出,內(nèi)存被保存在第3份**引用的副本中。否則,在所有普通副本中內(nèi)存將被越來越多地使用。

15.php初學(xué)者培訓(xùn):在整個(gè)腳本中使用單一的數(shù)據(jù)庫(kù)連接

請(qǐng)確保你在整個(gè)腳本使用單一的數(shù)據(jù)庫(kù)連接。從一開始就打開連接,使用至結(jié)束,并在結(jié)束時(shí)關(guān)閉它。不要像這樣在函數(shù)內(nèi)打開連接:

function add_to_cart(){    $db = new Database();    $db->query("INSERT INTO cart .....");}function empty_cart(){    $db = new Database();    $db->query("DELETE FROM cart .....");}

有多個(gè)連接也不好,會(huì)因?yàn)槊總€(gè)連接都需要時(shí)間來創(chuàng)建和使用更多的內(nèi)存,而導(dǎo)致執(zhí)行減緩。

在特殊情況下。例如數(shù)據(jù)庫(kù)連接,可以使用單例模式。




立刻咨詢,領(lǐng)取限 量報(bào)班資格

咨詢聯(lián)系方式:13777371146(莊老師)或者QQ:1073963412 還可以直接在線咨詢

想了解更多蘇州PHP網(wǎng)站開發(fā)培訓(xùn)相關(guān)信息,記得在線留言哦!

熱門機(jī)構(gòu)推薦
PHP

免費(fèi)體驗(yàn)課開班倒計(jì)時(shí)

11: 41: 09

稍后會(huì)有專業(yè)老師給您回電,請(qǐng)保持電話暢通

咨詢電話:13013833891

本周熱門資訊

全國(guó)分站 熱門機(jī)構(gòu)

北京PHP培訓(xùn) 上海PHP培訓(xùn) 廣州PHP培訓(xùn) 深圳PHP培訓(xùn) 杭州PHP培訓(xùn) 蘇州PHP培訓(xùn) 南京PHP培訓(xùn) 天津PHP培訓(xùn) 佛山PHP培訓(xùn) 南寧PHP培訓(xùn) 長(zhǎng)沙PHP培訓(xùn) 重慶PHP培訓(xùn) 太原PHP培訓(xùn) 青島PHP培訓(xùn) 寧波PHP培訓(xùn) 鄭州PHP培訓(xùn) 西安PHP培訓(xùn) 廈門PHP培訓(xùn) 武漢PHP培訓(xùn) 成都PHP培訓(xùn) 無錫PHP培訓(xùn) 濟(jì)南PHP培訓(xùn) 昆明PHP培訓(xùn) 貴陽(yáng)PHP培訓(xùn) 揚(yáng)州PHP培訓(xùn) 徐州PHP培訓(xùn) 珠海PHP培訓(xùn) 合肥PHP培訓(xùn) 長(zhǎng)春PHP培訓(xùn)

珠海達(dá)內(nèi)教育武漢達(dá)內(nèi)教育石家莊達(dá)內(nèi)教育鄭州達(dá)內(nèi)教育

申請(qǐng)?jiān)嚶犆~

QQ:1413838287
加盟合作:0755-83654572