前言
作为一名Android工程师,有时候也要接触一下传说中世界上最好的语言,11月中旬老板说想做一个网站,就接触了php这门最好的语言,而且要快速开发,到12月初网页功能基本已经完成,所以记录一下,说不定以后有用呢,以前都没有记录的习惯,比如才入职的时候编译的PJSIP,现在要编译又得看看去了,所以好记性不如烂笔头。
入门(开发环境与debug环境)
以安装环境入门吧,PHPStorm + Wampserver 快速搭建php开发环境,其中需要注意的是我们安装好这个之后需要适当的配一下参数,首先MySQL的用户名和密码初始化情况下是root无密码,需要改一下密码,这个有工具,只需要打开Wampserver 的phpmyadmin可视化网页,按着步骤编辑mysql的相关信息就可以了,当然可以选择CMD用质量做这个事,其次我们要配一下Apache配置文件,点击Wampserver 运行后右下角的图标,选中apache编辑httpd.conf,配置工程目录:(D:/phpStudy是我本地的工程目录,中间的参数就是权限之类的,先不理会)
DocumentRoot "D:/phpStudy"
<Directory "D:/phpStudy">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from all
</Directory>
还得改一下:http-vhost.conf文件(63342是我的端口):
<VirtualHost *:63342>
ServerName localhost
DocumentRoot D:/phpStudy
<Directory "D:/phpStudy">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
改完Apache配置之后,应该配一下phpStorm的php环境了,开发中我们离不开debug呀,那我们就把debug环境也配好。
运行环境
打开PHPStorm,有可能需要key,我们可以企业认证,这个为了不引起侵权,那就不写这个了,百度一下就好了。
打开了phpstorm之后,点击File->Setting->Languages&Frameworks->PHP,如图配置好PHP环境,
PHP可执行程序如果你安装wamp没更改应该是在C:\wamp64\bin\php\php7.0.10\php.exe(版本不同略有差异)
这时候编辑Run/Debug Configurations就可以跑PHP程序了,如图:
Debug环境
打开了phpstorm之后,点击File->Setting->Languages&Frameworks->PHP,如图配置好PHP环境:
然后去配一下php.ini文件,这个文件的入口在电脑右下角单击Wampserver图标:
然后文件最后添加上:
; XDEBUG Extension
[xdebug]
zend_extension ="C:/wamp64/bin/php/php7.0.10/zend_ext/php_xdebug-2.4.1-7.0-vc14-x86_64.dll"
xdebug.remote_enable =On
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost
xdebug.remote_mode = req
xdebug.remote_port = 9000
xdebug.idekey=PHPSTORM
结合自己的环境,寻找php_xdebug-2.4.1-7.0-vc14-x86_64.dll文件位置,大概位置应该和我一样,现在配置debug的Configurations:
现在可以跑debug模式了,入门完毕。
开发
我们要写一个商城软件,那么要快速开发,最好是找一个可二次开发的源码进行分析,然后结合自己的情况来二次开发,这一部门其实就是看源码比较难一些,加上以前没写过html和JavaScript,在页面布置上花一些时间,这里就不一一说了,举部分代码来看看php的基础开发吧,这个框架叫Tinyshop类似于ThinkPHP框架,但我觉得比ThinkPHP更容易上手,非常不错,大家有需要可以研究一下。
在controllers里面处理业务逻辑
我写了一个商品详情页业务处理:
public function goodsitems()
{
// 1,读取产品id号
$id = Filter::int(Req::args('id'));
// 2,通过Id查询所有商品信息
$goods = $this->model->table("goods as go")->fields("go.*")->where("go.id=$id")->find();
//3,规格列表,查询类似于LINQ语法,很简单。
$products = $this->model->table("products as pd")->fields("pd.*")->where("goods_id = $id")->findAll();
// ....省略代码
// 传递参数到页面
$this->assign("products",$products);
// 重定向到哪个页面
$this->assign("url","/index/gooditems");
// 跳转
$this->redirect();
}
页面放在themes目录或protected/view
如果themes目录里有相关html优先读取,如果没有回读取protected/view相关的html页面,看源码我们可以知道这样安排的原理,目前我还没来得及看,如果后期有时间这一块要看一看。下面贴一个html页面:
{if:$cart}
<div class="cartMain_hd font list-xx">
<ul class="container order_lists cartTop" >
<li class="font col-md-4" style="text-align: center;"><small>商品信息</small></li>
<li class="font col-md-2" style="text-align: left;"><small>商品参数</small></li>
<li class="font col-md-1" style="text-align: center; margin-left: 10px;"><small>数量</small></li>
<li class="font col-md-1" style="text-align: right;"><small>金额</small></li>
<li class="font col-md-2" style="text-align:center; margin-left: 30px;"><small>优惠</small></li>
<li class="font col-md-1" style="margin-left: 10px; text-align: left;"><small>操作</small></li>
</ul>
</div>
<div class="container">
{set:$total=0.00;$trNum=0;$count=0}
{list:items=$cart}
{set:$total+=$item['amount'];}
{set:$prom=$item['prom']}
{set:$id=$item['id'];}
{set:$count += $item['num'];}
{set:$num=$item['num'];}
{query:name=products as pd join=left join goods as gd on pd.goods_id eq gd.id fields=*,gd.id as id,pd.id as pdid,gd.name as name,gd.name as name where=pd.id}
<div class="cartBox mar20" >
<div class="mar20">
<div class="order_content row">
<div class="order_lists">
<div class="col-md-2 col-xs-3 col-sm-2" style="margin-left: 10px; text-align: center;">
<a href="javascript:;"><img src="{echo:Common::thumb($item['img']);}" style="width:80px; height:80px;" alt=""></a>
</div>
<div class="col-md-2 col-xs-6 col-sm-4">
{set:$gdid=$item['id'];}
<div class="font-b"><a href="{url:/index/goodsitems/id/$gdid}"><h5 class="font-b">{echo:TString::msubstr($item['name'],0,36)}</h5></a>
<p><small>{echo:TString::msubstr($item['seo_keywords'],0,15)}</small></p></div>
</div>
<div class="col-md-2 col-xs-6 col-sm-5">
<h6 class="font">
<p>套餐类型:{$item['goods_package_type']}</p>
<p>出游人群:{$item['goods_crowd']}</p>
<p id="startdate">出发日期:{$item['departure_date']}</p>
<p id="startcity">出发城市:{$item['seo_title']}</p>
</h6>
</div>
<div class="col-md-1 col-xs-12 col-sm-4 list_amount ">
<div class="buy-num-bar amount_box">
<a href="javascript:;" class="btn-dec reduce">-</a>
<input type="text" name="buy_num" value="{$num}" id="{$id}" class="sum">
<a href="javascript:;" class="btn-add plus">+</a>
</div>
</div>
<div class="col-md-1 col-xs-3 col-sm-4 list_sum">
<p class="sum_price">¥{$item['sell_price']}</p>
</div>
<div class="col-md-1 col-xs-3 col-sm-4 list_sum">
<p class="sum_price" id="prom{$id}">{if:$prom} {$prom} {else:} 暂无优惠 {/if}</p>
</div>
<div class="col-md-1 col-xs-12 col-sm-4">
<div class="del font" style="margin-top:7px;margin-left: 20px;">
<a href="javascript:;" class="font delBtn" id="del{$id}"><small>移除</small></a></div>
</div>
</div>
</div>
</div>
</div>
{/query}
{set:$trNum++;}
{/list}
</div>
在html里面可以嵌入sql查询,也可以插入if语句,这个我之前都没接触过,觉得很高端,相当于Android的xml里面也可以写写if语句做相关的显示隐藏吧,然而Android好像不会这样。
{if:条件} … 执行体… {else:}…执行体… {/if}
这是if语句
{set:新变量名=旧变量}
这是赋值语句,与之后的变量可以在sql中使用,也可以显示使用。
{query:查询语句}
…显示语句…
{/query}
这是循环语句,当然query可以替换为list,效果一样。
最后
第一次接触php,而且工期赶得及,看几天就写代码,可能有不对的地方,希望批评指导,[email protected].