1.php**的開始標記
php**以<?php開始 ,以?>結束 。這主要是因為php在建立之初是為了方便寫網頁,所以大部分**是嵌入到html頁面裡面的,php檔案允許包含除了php**外的其他內容。為了區別html**和php**,php檔案裡面php**會包含在<?php ?>之間,標記之外的內容會原樣輸出。
<?php //...這裡寫php**?>
注意:
a. 早期的**也有使用和?>標記的。
b. 後來因為web開發流行mvc模式,開始前後端分離,前端更多使用模板渲染,甚至最近幾年流行的mvvm已經不需要服務端來渲染頁面。所以為了讓php在執行過程中,專案檔案太多的情況下,不至於在輸出結果中輸出額外的空白字元,現在php檔案一般<?php會頂格,檔案末尾的?>會省去,這樣整個檔案都當作php**,不會原樣輸出?>之後可能存在的空格。
<?php //全是php**?>
c. php檔案編碼一般使用utf-8不帶bom。因為某些情況下,bom會輸出多餘的不可見字元,產生不好排查的疑難bug。至於gbk之類的編碼,只有比較老的系統使用,在和utf-8混用極易產生亂碼。
2. 基本語法
a. 變數和常量
<?php //php的變數以美元符開始($),不需要提前宣告,可以直接賦值,如:$number=1;//數字$string="1";//字串$bool=true;//布林型別//這裡有一點要注意的是,數字和字串在比較的時候,會自動轉換型別//比如1==「1」是返回true的,這是弱型別語言的乙個特徵$a=array();//陣列$a=;//還是陣列,這種寫法是5.4新增的$a=new stdclass;//物件//要注意的一點是,php裡面,陣列和其他語言陣列並不是一樣的,php裡面的array本質上是hash table//包括了一般語言裡的陣列和hashmap等不同型別的資料結構[1,2,3,4,5];//類似於其他語言的陣列,key為0,1,2...["key0"=>1,"key1"=>2];//類似於其他語言hashmap的形式[ 10,"key"=>1,];//混合形式,此處10的key是0,陣列定義時未指定key的,會從0開始賦值[10=>1,2];//如果key為數字,則後面元素key從此元素的key開始增加,2的key是11//陣列有一些基本的操作,$a = 10;//不指定key的時候,會將元素新增到陣列末尾array_push($a,10);//和上面等價$a+$b;//此操作和array_merge類似,但有一些不同,至於具體什麼不同,可以自己實驗一下,或者去翻php的文件。這裡是常見的面試題。//常量分為下面兩種define("a_constant",1);//define定義的常量是全域性作用的,重複定義會報乙個notice,//這裡注意的是一般常量不要用兩個下劃線開頭(__),因為內建的全域性變數常常以此開頭,避免重複。//其次常量一般大寫以表明是常量。const a_constant=1;//此種定義常量如果在類定義體裡面宣告的話,需要通過類名來引用class a //使用方式是 a::a_constant
b. 判斷語句
<?phpif (1==1)else
c. 迴圈語句php的迴圈語句有幾種形式,
d. switch-case
<?php //注意一點 ,switch-case裡面的break,和c一樣,如果不加break,會穿透到下乙個case裡面去。//可以試試注釋掉break看看執行結果//php裡面注釋有兩種 一種是兩個斜線// 另外一種是多行注釋 /**/$target=100;switch($target)
函式,類,命名空間<?php //這樣可以定義乙個函式,//注意函式的作用域,全域性變數要宣告global$s = "global var";function afunc()";}//class a}//命名空間,用於組織隔離**namespace n;
介紹了基本的語法,這裡肯定還有一些細節無法盡述,我盡量把語法裡最基本的核心部分介紹了一下。這些內容可以說是提綱,同時掌握這些語法,至少基本的**已經可以實現了,要想學習更多更詳細的內容請檢視php的官方**
為了熟練掌握使用這些語法知識,我們需要實踐練習一些編碼題目。程式設計說到底是乙個工程方面的技能,需要不斷的練習和實踐才能更深入掌握。這裡,我們來用php實現乙個快速排序演算法。快速排序是非常常見和實用的排序演算法,這裡給出乙個簡單的示例,主要用於演示語法。實際因為效率問題,可能會用更多的優化方式,同時會增加自定義的排序比較方法,更加靈活,滿足更普遍的排序需求。
<?phpfunction qsort($arr)$base = intval($len/2);$bigger = ;$smaller = ;$equal = ;foreach($arr as $item)elseif($item==$arr[$base])else}return array_merge(qsort($bigger),$equal,qsort($smaller));}print_r(qsort([23,5,7,84,22,454,2,54,63,2,6786,232]));
把上面**儲存為study2.php,執行。
看結果,沒錯,已經是有序排列了,而且是按照預想的排序方式,降序排列。大家可以根據快速排序演算法自己寫或者改進**,通過寫**來熟悉語法。
numpy bincount 通俗易懂
bincount的用途很簡單,就是統計出乙個列表的各個元素的出現次數。例如輸入是 1,0,2,2,1,2,3,5 那麼輸出就是 1,2,3,1,0,1 這樣的結果可能並不是很直觀,可能依然會有同學會問為什麼會輸出這樣的結果。我們看看 假如我們把輸入的列表中的數字都統計一遍,形成乙個字典 key是列表...
通俗易懂的C STL
泛型程式設計 generic programming 是一種語言機制,通過它可以實現乙個標準的容器庫。像類一樣,泛型也是一種抽象資料型別,但是泛型不屬於物件導向,它是物件導向的補充和發展。泛型程式設計在c 上的應用主要體現在兩方面 函式模板和類模板。接下來舉個栗子 csdn部落格 anyway,模板...
遷移學習,通俗易懂
一.背景 在之前用深度神經網路進行引數訓練時,我們每次的訓練都是從頭開始的,隨機地初始化網路。在網路層數不深的時候,訓練時間可以接受,但隨著現在網路構越來越複雜,網路層數越來越深,少則幾十層,多者上百層甚至上千層,如果任然每次都從頭開始訓練,時間的開銷則會非常大。例如imagenet網路的訓練常常需...