hp通常用來寫服務器端程序,通過php渲染HTML代碼并輸出到客戶端,或者用來寫API接口,服務器端的php程序通常是通過http協議進行調用訪問的。
其實php程序也可以通過命令行調用,我們在寫程序的時候,為了驗證某個功能是否正確,可以直接寫一段調用代碼,然后通過命令行運行,就可以得到驗證結果了。
通過命令行運行php程序有如下的好處:
1 在開發程序的時候可以不用切換到瀏覽器進行測試,在phpstrom里直接通過終端窗口就可以執行驗證程序了
2 通過命令行程序,可以快速建立最簡單的單元測試代碼,當然,如果要進行系統化、規范化的單元測試,最好還是選擇phpunit 或者是 codeception等測試框架進行測試
3 通過命令行調用php程序,可以避免因為web服務器配置而引起的錯誤,導致程序調試時誤導了開發者,我曾經在php的web端代碼里調用curl功能,發現請求的目標服務器一直返回400錯誤,因為忽略了是web服務器的原因,一直在調試代碼,最后才發現代碼是正確的,只是因為web服務器配置的問題,導致調用curl功能出錯了,如果切換到命令行程序下代碼是正常運行的,這樣其實工作的重點就變成跳轉web服務器的配置,而不是在糊里糊涂的修改代碼了。
下面我們就來看看怎么在命令行下執行php代碼。
下面的代碼是一個用php代碼寫的石頭剪刀布游戲:
<?php echo "****開始玩游戲****\r\n"; $game=new Game(); $isContinu=1; while ($isContinu){ echo "請選擇你要出什么:1代表石頭、2代表剪刀、3代表布、0代表退出游戲\r\n"; $input=intval(trim(fgets(STDIN))); switch ($input) { case 1: case 2: case 3: $computerSkill=$game->computerFight(); $result=$game->pk($input, $computerSkill); echo "你出:". $game->skills[$input].","; echo "電腦出:".$game->skills[$computerSkill].","; echo "你".$game->pkResult[$result]."\r\n"; break; case 0: echo '您已經退出游戲'; $isContinu=0; break; default: echo "輸入有誤,只能輸入0到3的數字,1代表石頭、2代表剪刀、3代表布、0代表退出游戲\r\n"; $isContinu=1; } } class SkillNode{ public $previous=null; public $next=null; public $data=null; } class Game { public $skills=[1=>'石頭',2=>'剪刀',3=>'布']; public $pkResult=['輸了','贏了','平局']; public $skillNodeList=array(); public $roundCount=0; public $winCount=0; public $loseCount=0; public $tieCount=0; public function __construct() { for ($i=1; $i < 4; $i++) { $skillNode=new SkillNode(); $skillNode->data=$i; if ($i==1) { $skillNode->previous=3; $skillNode->next=$i+1; } elseif ($i==3) { $skillNode->previous=$i-1; $skillNode->next=1; }else{ $skillNode->previous=$i-1; $skillNode->next=$i+1; } $this->skillNodeList[$i]=$skillNode; } } public function pk($skillMan,$skillComputer){ $this->roundCount+=1; if ($skillMan==$skillComputer) { $this->tieCount+=1; return 2; }else{ if (($this->skillNodeList[$skillMan])->next==$skillComputer) { $this->winCount+=1; return 1; }else{ $this->loseCount+=1; return 0; } } } public function computerFight() { return random_int(1, 3); } } ?>
假設我們將上面的代碼保存到d盤的rockgame.php文件上,這樣我們在phpstorm的terminal窗口,用下面的代碼就可以通過命令行調用該程序了:
因為rockgame.php文件保存在D盤根目錄下,我用cd命令,跳轉到D盤,然后執行下面的命令就可以了,當然,前提條件是:你的電腦已經安裝了php并且將php的路徑加入到了系統參數中了:
php rockgame.php
結果入下圖:
石頭、剪刀、布,只有三個游戲技能,最簡單的方式用幾個判斷語句就可以了,但是,為了體現封裝的效果,用了OOP的方式,建立了game類,將游戲的業務邏輯封裝到了game類里。
同時,為了體現可擴展性和代碼判斷邏輯的統一,特意建立了skillNode類,并在游戲構造函數里進行了初始化,這樣在pk方法里,就可以用統一的判斷邏輯,假設游戲后來有更多的游戲技能加入,同時,游戲的pk邏輯不變化的話,就只要往技能列表里增加技能元素就好,不用修改其他代碼了。
HP是世界上最好的語言,這是一個老梗。
有不少學習PHP的程序員后來去做了前端開發,畢竟近些年前端開發還是蠻吃香的。
學習PHP不僅僅要學習html,而且還要學習CSS。
CSS是萬維網聯盟在 HTML 4.0 之外提出,目的是為了讓CSS完成樣式與內容的分離。
那么,CSS如何入門呢?w3cschool在這里分享幾個方法:
w3cschool官方本身就有CSS教程,我們看教程的目的主要還是要了解CSS到底是干什么用的。
其實,用一句簡單的話來說,改變我們看的網頁的樣子.。
w3cschool新開發了CSS微課,這可能是很多程序員小伙伴所需要的。
CSS直接抓住了CSS教程中比較核心的一些概念和語法,并且有實戰的訓練習題。
其內容包括了CSS基礎、CSS文本樣式、CSS屬性、CSS定位和布局,讓你系統、立體地全面認識CSS。
CSS微課實現了游戲化的編程體驗,關卡是循序漸進的,這迫使你不能跳躍而忽略一些重要的編程知識。
其中,習題類型包含了判斷題、選擇題、實戰訓練題。
理論離不開實戰,CSS微課做到了例子多,概括技術全面。
當你可以通關的時候,你已經對CSS算是有一個比較深刻的認識,也掌握了一定的CSS編程技能。
學編程一定要讓編程本身變得有趣,所以大可以先玩編程。
用CSS微課學習是一種有趣化的方法。
另外,閱讀《css禪意花園》,就當成一本故事書看,隨便翻翻你會發現css確實很好玩的。
.昨日回顧
編號 | 姓名 | 性別 | 學歷 | 畢業院校 |
1 | 張三 | 男 | 大專 | 中國人民大學 |
2 | 李四 | |||
3 |
<table>
<tr>
<th>編號</th>
<th>標題</th>
<th>發布日期</th>
</tr>
<tr>
<td>1</td>
<td>重蔚自留地</td>
<td>2014-10-20</td>
</tr>
</table>
如果使用表格來排版網頁,搜索引擎搜互的幾乎很低。
DIV+CSS布局或排版網頁,層級一般為3層左右。
HTML網頁是一個結構化的文檔,是一按層次順序展示的一個文檔。
<table>的子元素(標記)是<tbody>,而不是<tr>;
<tr>是<tbody>的子元素
2.表單
1、表單的主要功能:就是用來搜索用戶信息。
2、表單的工作原理
用戶填寫有表單的網頁,單擊某個按鈕進行提交;
用戶填寫的表單數據,將發到服務器;
服務器上有專門的程序來對用戶提交的數據進行驗證;
如果有錯誤,服務器會返回給瀏覽器一個錯誤信息;
如果沒有錯誤,PHP程序會將用戶提交的數據寫入數據庫,并返回一個成功的信息。
補充:
用戶輸入的信息是否正確,比如:郵箱地址、電話號碼、用戶名是否重名等
這些信息都是由PHP后臺程序來做驗證。
3、<form>標記:是一組標記(多個標記)
<form name=“form1” action=“login.php”>
用戶名:<input type=“text” name=“username” size=“50” />
密碼:<input type=“password” name=“password” size=“50” />
<input type=“submit” name=“submit” value=“提交” />
</form>
注意:所有表單元素都必須放在<form>中,然后一起提交給服務器。
<form>的常用屬性
Name:指表單的名稱,這個名稱一般給JS或PHP來用。
比如:要獲取“用戶名”框中輸入的信息,用JS獲取是:document.form1.username.value
Action:設置表單數據的處理程序文件名;比如:login.php
Method:表單數據的提交方式。有兩種方式:GET和POST
默認的提交方式:就是GET方式。
GET方式:將表單中的數據(以“名稱/值”)形式,追加到表單處理程序(action指定)的末尾。
缺點:提交少量信息、不太安全、只能提交簡單的數據,一般可以提交100個字節內的數據
http://www.sina.com.cn/news.php?id=234
POST方式:將表單數據直接發放ACTION指定的處理程序,并沒有在地址欄顯示。
優點:提交海量數據、相對比較安全、提交的數據類型多樣化
Enctype:是指表單數據的編碼方式(加密方式)
Application/x-www-form-urlencoded 普通的加密方式(默認)
Multipart/form-data 只有上傳文件時使用。
單行文本框:用戶名、地址、聯系方式、郵編等
<input type=“text” name=“名稱” value=“默認值” size=“多少個字符寬” maxlength=“最多可放多少個字符” />
注意:如果要把表單元素排齊,請使用表格來排,排的順序是<form>標記中嵌<table>,<td>中放每一個表單元素。
2、單行密碼框:密碼框中的內容是以“*”號顯示,是為了保證數據的安全
<input type=“password” name=“名稱” size=“字符寬” maxlength=“最大字符數” />
3、按鈕
提交銨鈕:<input type=“submit” name=“submit” value=“提交按鈕” />
重置按鈕(清空):<input type=“reset” name=“reset” value=“重新填寫” />
圖片按鈕:<input type=“image” src=“圖片URL” value=“值” />
注意:圖片按鈕默認是提交表單
普通按鈕:<input type=“button” name=“名稱” value=“按鈕文本” />
<input type="button" value="普通按鈕" onclick="javascript:this.form.reset()" />
注意:普通按鈕沒有任何功能,一般要結合JS來實現提交或重置。
提示:如果哪一個表單項,不想讓它提交到服務器,請不要給它添加name屬性即可。
4、單選按鈕:一組相互排斥的按鈕,也就是每一次只能選擇一個。
<input type=“radio”name=“名稱” value=“值”checked=“checked” />男
注意:一組單選按鈕的name值是一樣的,最后只能提交選中的哪一個。
5、復選框:一組復選框的名稱也是一樣的,在后臺獲取值時,將使用“數組”的形式來獲取。
<input type=“checkbox”name=“名稱”value=“值”checked=“checked” />游戲
注意:復選框可以同時選擇多個,也可以一個都不選。
提示:數組是一個名字里,可以存放多個不同的值(了解)
JS數組:Var hobby=[“游戲”,“美術”,“電腦”]
6、下拉列表
<select name=“edu”>
<option value=“” selected=“selected”>請選擇……</option>
<option value=“高中”>高中</option>
<option value=“大專”>大專 </option>
</select>
7、文本區域
<textarea name=“名稱”rows=“幾行高”cols=“多少個字符寬”></textarea>
提示:如果要在<textarea>中插入圖片,實現圖文混排,這個標記做不到。一般網站的效果都是通過“在線HTML代碼編回器”實現的。比如:FCKEdit(就業班講)
8、上傳文件
<input type=“file”name=“uploadFile” />
注意:value屬性是只讀屬性,是為了保證網站的安全。
GET方式上傳不了文件,
只有POST能上傳文件,并且編碼類型設置為:mulitpar/form-data
3.框架
1、框架的概念:將一個瀏覽器窗口劃分若干個區域,每個區域都是一個獨立的小窗口,小窗口中存放一個網頁文件。
框架相當于一個窗戶。一個窗戶由窗格和玻璃構成。一個框架是由框架集(Frameset)和框架頁(Frame)構成。
<frameset>中定義框架的結構(上下型、左右型)、大小、位置等。
<frame>中定義小窗口是否顯示滾動條、小窗口是否可以改大小、默認顯示的網頁
在框架定義頁面中,不能出現<body>及<body>的子標記,換句話說,<frameset>和<body>只能選擇其中一個。
2、框架的代碼結構
<frameset>
<frame />
<frame />
</frameset>
3、<frameset>的常用屬性
Rows:指定框架為上下型,例如:rows=“180,*”,上窗口的高為180px,剩下都給下窗口。
Rows=“180,20,*”,頂窗口高為180px,中窗口高為20px,剩下高都給下窗口。
Rows=“20%,50%,*”
Cols:劃分框架為左右型,例如:cols=“200,*”,左窗口寬為200px,剩下都給右窗口。
Cols=“200,10,*”
Frameborder:是否顯示框架邊線,取值:1或0,yes或no
Border:指定邊框的粗細
Bordercolor:邊框的顏色
Framespacing:指框架邊框間的距離
4、<frame>的常用屬性:主要定義:是否可以調整大小、是否顯示滾動條、默認頁設置
Src:設置小窗口中顯示的默認網頁;
Noresize:是否可以調整窗口的大小,取值:noresize
Scrolling:是否顯示滾動條,取值:yes、no、auto(自動)
Name:設置每個小窗口的
Index.html
4.行內框架<iframe></iframe>
<iframe>是<body>的子元素
<ifame>是嵌套到<body>元素中的。
常用屬性
Src:引入哪個HTML文件
Width:指行內框架的寬度
Height:指行內框架的高度
Scrolling:是否顯示滾動條
Align:水平對齊方式
*請認真填寫需求信息,我們會在24小時內與您取得聯系。