前言
作爲一名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].