「實驗一小時」PHP項目挑戰解析直播
來自專欄 程序員實驗室
直播簡介
「 實驗一小時 」是實驗樓的免費項目直播欄目,每期會邀請不同領域的資深工程師在 Bilibili 上帶你擼代碼、敲項目,全面提升你的編程力!
本期我們邀請了工程師 摩卡,來帶大家一起通過上周PHP樓賽中的項目挑戰題目。
摩卡有多年PHP開發經驗,也是上周PHP樓賽題目的設計者。
直播時間:本周一(4月16日)晚 7:30
價格:免費
怎麼上課
嗶哩嗶哩直播,二次元彈幕直播平台
點擊鏈接進入直播間,點擊關注,即可收到開播通知,並收看更多後續直播~
內容介紹
本期直播中的PHP項目挑戰均來自上周樓賽的實戰題目,樓賽是實驗樓長期運營的項目挑戰活動。不同於側重演算法的 OJ、ACM一類的,樓賽考驗的是動手能力,分析和解決問題的能力。
以下是本期直播中講師將帶領大家通過的項目題目,如果你還沒挑戰過,先去試下再來看直播解析會更有收穫!挑戰地址: PHP_樓賽 第18期_實驗樓 - 實驗樓
(比賽結束後,仍然可以挑戰,但成績不再計入排行榜)
挑戰形式
如下圖所示,在環境中完成項目任務。
1. 列印圍城
介紹
在實際工作中,經常會使用循環操作,如 foreach
,for
,while
。循環對於代碼邏輯操作非常方便,可以輕鬆實現數組遍歷或計數等功能。
給定一定參數,從左往右依次輸出參數並包圍下一個參數,直到最後一個參數在最中間並且輸出一次。文件路徑為 /home/shiyanlou/circle.php
,需求示例
$ php circle.php a baaaabaaaa$ php circle.php @ . !@@@@@@...@@.!.@@...@@@@@@$ php circle.php 眾 從 人 我眾眾眾眾眾眾眾眾從從從從從眾眾從人人人從眾眾從人我人從眾眾從人人人從眾眾從從從從從眾眾眾眾眾眾眾眾
目標
- 代碼路徑必須放在
/home/shiyanlou/circle.php
位置 circle.php
後的參數少於 2 個報錯,直接列印Parameter Error
- 參數可以是字母,數字,特殊字元等
- 使用
echo
輸出結果
2. 綜合技能
介紹
PHP綜合基礎涉及基礎語法,變數,引用,常用函數,面向對象,MySQL和安全等方面知識,通過題目可以在一定程度上檢測開發者哪些方面需要提升,以及在日常開發中需要注意的問題。
文件路徑為 /home/shiyanlou/
,通過 wget 下載題目
$ cd /home/shiyanlou$ wget http://labfile.oss.aliyuncs.com/contestlou18/exam.php$ wget http://labfile.oss.aliyuncs.com/contestlou18/exercise.txt
執行 php exam.php
開始做題
目標
交卷後需要點擊屏幕右上角提交結果。
3. 對象關係映射 ORM
介紹
對象關係映射(Object Relational Mapping,簡稱ORM)是通過使用描述對象和資料庫之間映射的元數據,將面向對象語言程序中的對象自動持久化到關係資料庫中。本質上就是將數據從一種形式轉換到另外一種形式。ORM作為一種中間件,將資料庫操作和應用隔離,使開發者只需關心應用本身忽略各個資料庫之間操作不同帶來的額外開發負擔。
通過以下途徑獲取代碼:
$ cd /home/shiyanlou$ wget http://labfile.oss.aliyuncs.com/contestlou18/test.php$ wget http://labfile.oss.aliyuncs.com/contestlou18/model.php$ wget http://labfile.oss.aliyuncs.com/contestlou18/orm.php$ wget http://labfile.oss.aliyuncs.com/contestlou18/user.php
該項目是一個簡單的ORM,實現了查找的基本功能,示例
//select * from users;User::find()->all();//select * from users limit 1;User::find()->one();
其中模型繼承orm類,一個模型對應一張表,表名稱默認為該模型的小寫複數形式,例如,User表示users表,可以在user.php中通過table屬性重置表名稱。User後的第一個方法(該例中的 find() )需要使用(::)調用,並且必須聲明為protected,User後面其他方法(如 all(),one()以及需要實現的where(),or(),and()等方法需聲明為public)
現在需要實現查詢條件,where,and,or 如
//select * from users where gender = 1 and age > 15;User::find()->where([gender=>1])->and([>,age,15])->all();//select * from users where height < 160 and weight > 70;User::find()->where(height < 160)->and([>,weight,70])->all();//select * from users where name like %zhang% or age != 18;User::find()->where([like,name,zhang])->or([in,age,[15,20]])->all();
目標
- 文件路徑在
/home/shiyanlou/
。 - 創建資料庫 shiyanlou 和表 users,欄位包括 id,name,age,gender,height,weight,其中 name 類型為 varchar,其餘為 int。資料庫用戶名為 root,密碼為空。
#啟動資料庫sudo serice mysql start# 登陸資料庫,密碼為空mysql -uroot -p# 創建資料庫 shiyanlou 和表 users# 插入數據(1,"Tom Li",15,1,165,50)(2,"Tom Zhang",16,1,165,50)(3,"Jack Li",15,1,170,55)(4,"Lucy Wang",15,0,150,40)(5,"Max Wang",15,0,155,45)
- 在orm.php中添加where(),and(),or()方法,可以使用屬性_where。
- 執行php test.php 不報錯返回正確結果。
後記
即將開始的比賽:
樓賽 第19期 Python項目挑戰
推薦閱讀: