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小时内与您取得联系。